OS開発

x86-64(EM64, AMD64)アーキテクチャ向けのOSを開発していく上で集めた情報をまとめます.

Custom Search

1. BIOS・リアルモード

1.1. BIOSの起動シーケンス

PC(PC/AT互換機,IBM PC compatible)は起動直後,自己ハードウェア診断などをした後,BIOS (Basic Input/Output System)と呼ばれるソフトウェアを起動します.BIOSはEPROM (Erasable Programmable Read Only Memory)内に保存された設定に従って,ブートドライブを検索します.ブートドライブの検索は,対象のドライブがフロッピーディスクやハードディスク(最近のBIOSではUSBフラッシュメモリ等も含む)であれば,最初のセクタ(先頭512バイト)を読み込み,最後の2バイトのシグニチャが0x55 0xAAであれば,マスターブートレコード(MBR: Master Boot Record)と判定します.対象のドライブがCD/DVDの場合は,ISO9660の拡張であるEl Torito形式 [OSDev Wiki]指定されたブートイメージ領域(通常1セクタ・2048バイト)を読み込みます.CD/DVDからのブートはフロッピーディスクやハードディスクとは異なりますので説明を簡単にするため,一旦CD/DVDは対象外とします.

BIOSはブートドライブを発見すると,MBRを0x7c00に読み込み,コードセグメントレジスタ%cs=0プログラムカウンタ%ip=0x7c00として読み込んだプログラムを実行します.なお,8086プロセッサ時代からの互換性のため,x86アーキテクチャのプロセッサもx86-64アーキテクチャのプロセッサも起動直後はリアルモード(16ビットモード)で動作します.

なお,近年では,BIOSに代わってEFI (Extensible Firmware Interface)も普及してきていますが,現時点ではまだEFIは扱いません.EFI対応は64ビットモードやマルチプロセッサ対応と比較するとあまり重要ではないと思いますので優先度は低いですが,将来的に対応していこうとは考えています(未定).

文字で説明してもわかりにくいかと思いますので,次のページでは,フロッピーディスク・ハードディスクからの起動プログラムを書いていきます.