電源投入後に真っ先に起動されるシステム BIOS は、ハードウェアのチェック・初期化を行った後ブートメディアを選択してブートローダーをメモリ上にロードします。
パソコンの電源ユニット部(ATX電源)はパワーコネクタ(20本のピンで構成)でマザーボードと結ばれています。電源ケーブルを繋いで起動準備が整っているパソコンのマザーボードには、パワーコネクタの9番ピンを通してATX電源から待機電力が供給されています。
この状態で電源スイッチを押すと、次のような処理で電源の供給が開始されます。
- マザーボードは電源スイッチが操作された事を検出し、パワーコネクタの14番ピン(PS_ON)に信号を送出(ON)します。
- ATX電源は14番ピン(PS_ON)の信号を受けると パソコン各部に給電を開始します。
- 給電直後は電圧が安定しないため、クロックチップがCPUへのリセット シグナルを送り続け(リセット信号線のON状態を継続し)てCPUの処理が開始されるのを抑制します。
- ATX電源はセルフテストを行って電圧と電流が一定レベルに到達したことを確認すると、8番ピン(PWR_OK)の信号をONにしてクロックチップへ "Power Good" シグナルを送ります。
- クロックチップは "Power Good" を受けると、CPUへ送り続けていたリセット シグナルを停止します。
いよいよ本格的な処理が始まります。
パソコンの制御はシステムBIOSがロード・実行されることから始まります。それは概ね以下のような手順で処理されます。
- リセット シグナルの停止で抑制を解かれたCPUは、内部のキャッシュやレジスター等の初期化(クリア)を行い、動作モードをリアルモード(*1)に変更します。
- CPUの動作はメモリ アドレス0xFFFFFFF0(4GB-16バイト目)へのジャンプで強制的に始まります。
ただしPC/AT互換機の場合、アドレス線の21番目以降が強制的に "0" にされている(A20マスク)ため、実際のジャンプ先は 0xFFFF0(1MB-16バイト目)になります。
- メモリの0xE0000〜0xFFFFFの範囲には、ROMに記録されたコード(システムBIOS)がマップ(*2)されています。そのためCPUがメモリ アクセスのためにアドレス バスに出力した0xFFFF0の値は、チップセット(ノースブリッジ)のアドレス デコーダ(*3)によって、システムBIOS(ROM)側へのアクセスに切り替えられ(回路が開かれ)ます。
- アドレス0xFFFF0の位置にはシステムBIOS先頭アドレスへのジャンプ命令があり、CPUはシステムBIOSの先頭から順次読み込んで処理(命令を実行)することになります。
- システムBIOSは自身のコードの正常性を確認後、以降の動作を行います。
- コンベンショナル メモリ領域(0x00000〜0x9FFFF)の上端と下端に、数kバイトのBIOSワークエリアをセットアップします。
- 0x00000〜0x003FFには割り込みベクタが割り当てられます。
割り込みベクタには、割り込みのハンドラーやBIOSサービスのエントリー アドレス、BIOSが使用する各種テーブルの先頭アドレスなどが収められます。
- 後続の処理のため、適当な長さのスタック領域の確保とスタック ポインターの設定が行われます。
- マザーボード上の各種コントローラー(下記:多くがチップセットに集約されている)にアクセスして、コンフィグレーション(情報取得と使用可能の確認)を行います。
- プロセッサー (機種、クロック)
- メモリコントローラー (種類、容量)
- 外部キャッシュメモリ
- 割り込み(IRQ)コントローラー
- ビデオ コントローラー
- リアルタイム クロック
- パラレル/シリアル ポート
- キーボード コントローラー
- FDDコントローラー
- PCI-IDEコントローラー
- この段階でエラーが発生すると画面表示できない(ビデオ システム初期化未完了)ためビープ音で通知します。
ビープ音はその鳴り方でエラーの種類を表し、ビープコードとしてメーカのホームページ等で公表されています。
- 起動要因が下記のどちらであるかをチェックします。
- 電源ONによる起動(Cold-Start)
- 再起動(Warm-Start)
- 次にPOST(次項)の処理が始まります。
システムBIOS内には、デバイス(周辺機器)の検出・初期化・設定を行うコードをまとめた部分があって、POST(ポスト:Power On Self Test)と呼ばれています。
ビデオ、キーボード、メモリ、マウス、FDD、HDD、シリアル ポート、パラレル ポートといった周辺機器は、POSTを実行することで始めて使用可能になります。
ただし再起動等の "Warm-Start" の場合は検査や初期化を省略することがあります。省略範囲はBIOSのメーカー、バージョンによって異なります。
- 各種バスに装着されている拡張カードを検出し、その種類と仕様をカードのコンフィグレーション レジスターから読み出します。
- オンボードのデバイスや拡張カードが要求しているハードウェア リソース(I/O アドレス、メモリ、IRQ)を割り当て、検出・割り当てを行ったデバイスの一覧はデバイス リストとして保存します。デバイス リストはOSが利用します。
- カード搭載の拡張BIOSは、拡張ROM領域(0xC0000〜0xDFFFF)にマップされます。
拡張ROM領域とは、前項参考図(リアルモードのメモリマップ)の、VGA-BIOSと拡張BIOSの部分です。
- 各種デバイス(オンボードおよび拡張カード)に対して、設定済みのI/Oアドレス、メモリ アドレスを通して初期化コードを送ります。
- 習慣的に拡張ROM領域(0xC0000)の先頭には、初期化コードを含むVGA-BIOS(ビデオBIOS)がマップされます。従って最初に初期化されるデバイスは常にVGAであって、リセット直後にモニター画面が黒くなるのはこのためです。
- システムBIOSは、POSTの実行で取得したシステム(ハードウェア)構成データと、マザーボード上のCMOSメモリに記録されている(旧)システム構成データを比較します。
データに相違がある場合はCMOSの内容を更新します。この時、ユーザーの確認を求めることもあります。
- システムBIOS 、VGA-BIOSのシャドウイングを行います。
システムBIOSの種類と設定によっては拡張BIOSもシャドウイングの対象となります。
(intelのCPUはこのように作られています )