パソコン実習室
ブート ストラップ - パソコンの起動 by BIOS
≪ previous next ≫

U.BIOS の動作


 電源投入後に真っ先に起動されるシステム BIOS は、ハードウェアのチェック・初期化を行った後ブートメディアを選択してブートローダーをメモリ上にロードします。

U.1.電源 ON

 パソコンの電源ユニット部(ATX電源)はパワーコネクタ(20本のピンで構成)でマザーボードと結ばれています。電源ケーブルを繋いで起動準備が整っているパソコンのマザーボードには、パワーコネクタの9番ピンを通してATX電源から待機電力が供給されています。

この状態で電源スイッチを押すと、次のような処理で電源の供給が開始されます。
  1. マザーボードは電源スイッチが操作された事を検出し、パワーコネクタの14番ピン(PS_ON)に信号を送出(ON)します。
  2. ATX電源は14番ピン(PS_ON)の信号を受けると パソコン各部に給電を開始します。
  3. 給電直後は電圧が安定しないため、クロックチップがCPUへのリセット シグナルを送り続け(リセット信号線のON状態を継続し)てCPUの処理が開始されるのを抑制します。
  4. ATX電源はセルフテストを行って電圧と電流が一定レベルに到達したことを確認すると、8番ピン(PWR_OK)の信号をONにしてクロックチップへ "Power Good" シグナルを送ります。
  5. クロックチップは "Power Good" を受けると、CPUへ送り続けていたリセット シグナルを停止します。
 いよいよ本格的な処理が始まります。


U.2.制御の開始

 パソコンの制御はシステムBIOSがロード・実行されることから始まります。それは概ね以下のような手順で処理されます。

  1. リセット シグナルの停止で抑制を解かれたCPUは、内部のキャッシュやレジスター等の初期化(クリア)を行い、動作モードをリアルモード(*1)に変更します。
  2. CPUの動作はメモリ アドレス0xFFFFFFF0(4GB-16バイト目)へのジャンプで強制的に始まります。
    ただしPC/AT互換機の場合、アドレス線の21番目以降が強制的に "0" にされている(A20マスク)ため、実際のジャンプ先は 0xFFFF0(1MB-16バイト目)になります。
     CPUが起動直後に最初に参照するメモリ アドレス(0xFFFF0)をリセットベクタと呼んでいます。
     (intelのCPUはこのように作られています )
  3. メモリの0xE0000〜0xFFFFFの範囲には、ROMに記録されたコード(システムBIOS)がマップ(*2)されています。そのためCPUがメモリ アクセスのためにアドレス バスに出力した0xFFFF0の値は、チップセット(ノースブリッジ)のアドレス デコーダ(*3)によって、システムBIOS(ROM)側へのアクセスに切り替えられ(回路が開かれ)ます。
  4. アドレス0xFFFF0の位置にはシステムBIOS先頭アドレスへのジャンプ命令があり、CPUはシステムBIOSの先頭から順次読み込んで処理(命令を実行)することになります。
  5. システムBIOSは自身のコードの正常性を確認後、以降の動作を行います。
  6. コンベンショナル メモリ領域(0x00000〜0x9FFFF)の上端と下端に、数kバイトのBIOSワークエリアをセットアップします。
  7. 0x00000〜0x003FFには割り込みベクタが割り当てられます。
    割り込みベクタには、割り込みのハンドラーやBIOSサービスのエントリー アドレス、BIOSが使用する各種テーブルの先頭アドレスなどが収められます。
  8. 後続の処理のため、適当な長さのスタック領域の確保とスタック ポインターの設定が行われます。
  9. マザーボード上の各種コントローラー(下記:多くがチップセットに集約されている)にアクセスして、コンフィグレーション(情報取得と使用可能の確認)を行います。
    • プロセッサー (機種、クロック)
    • メモリコントローラー (種類、容量)
    • 外部キャッシュメモリ
    • 割り込み(IRQ)コントローラー
    • ビデオ コントローラー
    • リアルタイム クロック
    • パラレル/シリアル ポート
    • キーボード コントローラー
    • FDDコントローラー
    • PCI-IDEコントローラー
  10. この段階でエラーが発生すると画面表示できない(ビデオ システム初期化未完了)ためビープ音で通知します。
    ビープ音はその鳴り方でエラーの種類を表し、ビープコードとしてメーカのホームページ等で公表されています。
  11. 起動要因が下記のどちらであるかをチェックします。
    • 電源ONによる起動(Cold-Start)
    • 再起動(Warm-Start)
  12. 次にPOST(次項)の処理が始まります。
(*1) リアルモード (Real Address Mode)
 intelが8086(CPUの名称)等で採用していた動作モードで、MS-DOS等で使われていました(と言うより、それしか無かった)。リアルモードという呼称は、その後登場するプロテクトモードと対比するために付けられたもので、当時こうした呼び名はありませんでした。
 メモリアドレシング(アクセス可能なメモリ領域)は1MBまで、シングルタスク(一度に動作できるのは一つのプロセスのみ)、プロセスの実行権限はすべて同じといった特徴(制限)があります。

(*2) マッピング
 実際の物理メモリ(RAM等)とは別に仮想的なメモリ アドレス空間を考え、実際の物理メモリ(RAM)やシステムBIOSのROM等を仮想メモリ アドレス空間に割り当てる(番地を与える)ことをメモリ マッピングといいます。
 こうした管理機能によって、物理的にバラバラな位置にあるメモリでも連続した(リニアな)アドレスとして利用可能になり、システム アーキテクチャとして決められたアドレスへ、各種リソースを割り当てることが可能になります。
 マップされるリソースはシステムBIOS以外にも多数あって、マッピングの結果はアドレス デコーダー(*3)にも反映されます。

(*3) アドレス デコーダー
 デバイスや制御チップに付属する機能で、アドレス バスを監視しています。
アドレス デコーダーは、あらかじめ自分に割り当てられたアドレスがバス上に現れると、チップセレクト信号をONにします。
チップ セレクト信号がONになったデバイスや制御チップは、リード/ライト信号に基づいてデータ バスにアクセス(データ バスに繋がるゲートをオープン)します。


U.3.POST

 システムBIOS内には、デバイス(周辺機器)の検出・初期化・設定を行うコードをまとめた部分があって、POST(ポスト:Power On Self Test)と呼ばれています。
 ビデオ、キーボード、メモリ、マウス、FDD、HDD、シリアル ポート、パラレル ポートといった周辺機器は、POSTを実行することで始めて使用可能になります。

 ただし再起動等の "Warm-Start" の場合は検査や初期化を省略することがあります。省略範囲はBIOSのメーカー、バージョンによって異なります。

  1. 各種バスに装着されている拡張カードを検出し、その種類と仕様をカードのコンフィグレーション レジスターから読み出します。
  2. コンフィグレーション レジスター
     拡張カードに搭載されるレジスター(メモリの一種)で、システムBIOSやOS がハードウェア リソース(I/O アドレス、メモリ、IRQ)を割り当てる際に使用されます。
  3. オンボードのデバイスや拡張カードが要求しているハードウェア リソース(I/O アドレス、メモリ、IRQ)を割り当て、検出・割り当てを行ったデバイスの一覧はデバイス リストとして保存します。デバイス リストはOSが利用します。
  4. ※ WindowsやLinuxはシステムBIOSが行ったリソース割り当てや初期化を無視し、自身で再度リソー
      ス割り当てや初期化を行っているようです。
    I/Oアドレス
     intelアーキテクチャではメモリ空間以外に、周辺機器(I/O)とのデータ入出力用にI/O空間を設けています。
     周辺機器用に割り当てられたI/O 空間をI/Oポートと呼び、そのアドレスをI/Oポートアドレスあるいは I/Oアドレスと呼びます。(単にI/Oポートと言った場合、ソフトウェア上ではI/Oアドレスのことを指し、ハードウェア上ではコネクタを指すことが多いようです)
  5. カード搭載の拡張BIOSは、拡張ROM領域(0xC0000〜0xDFFFF)にマップされます。
    拡張ROM領域とは、前項参考図(リアルモードのメモリマップ)の、VGA-BIOSと拡張BIOSの部分です。
  6. 拡張 BIOS
     拡張カード上には自身を制御するためのコードが記録されたROMが搭載されています。このコードもBIOSであり、システムBIOSと区別するため拡張BIOSやカードBIOS等と呼ばれます。
  7. 各種デバイス(オンボードおよび拡張カード)に対して、設定済みのI/Oアドレス、メモリ アドレスを通して初期化コードを送ります。
  8. ※ テスト対象にはメモリも含まれますが、video memory領域やROM領域は除外されます。
    ※ メモリテストを省略する機種もあります。
    ※ 必ずしもすべての拡張カードがPOSTによって初期化されるわけではありません。
      BIOSを経由しない拡張カードはPOST用ROM(拡張BIOS)を用意していません。
  9. 習慣的に拡張ROM領域(0xC0000)の先頭には、初期化コードを含むVGA-BIOS(ビデオBIOS)がマップされます。従って最初に初期化されるデバイスは常にVGAであって、リセット直後にモニター画面が黒くなるのはこのためです。
  10. 拡張ビデオカード
    AGPやPCIeに装着するビデオカードには、"VGA-BIOS ROMチップ" と "ディスプレイ制御チップ" が搭載されます。
    VGA-BIOS
    ビデオ システムを初期化したり、文字や画像を表示する基本的なコードで構成されています。
    高機能なグラフィックを多用する現在のパソコンでは、OSが起動するまでの一時的な表示のみに使用されます。
    ディスプレイ制御チップ
    ビデオRAMの内容をディスプレイに出力したり、ビデオRAMを読み書きします。
    主にWindows(ドライバ)で使用されています。
  11. システムBIOSは、POSTの実行で取得したシステム(ハードウェア)構成データと、マザーボード上のCMOSメモリに記録されている(旧)システム構成データを比較します。
    データに相違がある場合はCMOSの内容を更新します。この時、ユーザーの確認を求めることもあります。
  12. ※ 相違の内容によってはOS起動不能となることもあります。
      そうした場合の対処にCMOSクリアがあります。システム構成データが再セットアップされて、ほとんどの場合OSの起動が可能になります。
  13. システムBIOS 、VGA-BIOSのシャドウイングを行います。
    システムBIOSの種類と設定によっては拡張BIOSもシャドウイングの対象となります。
  14. BIOSシャドウ
     BIOSが格納されているROM(EPROM)のレスポンス(応答速度)は、RAMと比較すると格段に遅くなっています。そこでパソコンの起動処理やビデオの表示など高速性を求められるBIOSを、RAM領域にコピーして使用する方法が考案されました。これを "BIOS シャドウ" と呼んでいます。
     BIOSをコピーされたRAM領域は、再マッピングによりROMと同じアドレス(0xC0000〜0xFFFFF)で参照可能となります(アドレス バスを監視しているRAMのアドレス デコーダが、シャドウRAM領域のアドレスを検知するとRAMのチップセレクト信号をONにします)。
    当然ですがシャドウRAM領域は書き込み禁止になります。

     システムBIOSによっては、BIOS設定画面に "System BIOS Shadow"、 "Video BIOS Shadow" 等の項目があり、有効/無効の切り替えが可能なものもあります。その場合BIOSシャドウを無効にすると、システムで使用可能なRAM領域が若干増加します。

     BIOSを頻繁に使用するMS-DOS等では、BIOSシャドウを行うことでパフォーマンスは向上します。しかしWindows NT以降のOSでは、起動時以外はBIOSを使わずにドライバーを使用するようになったので、BIOSシャドウはパフォーマンスに影響しなくなりました。




≪ previous [[ ブート ストラップ - パソコンの起動 by BIOS ]] next ≫