質問: アセンブリでOSコードリングしてるんですが、最初に浮かんできた疑問です。 CPUの動作モードには リアルモードと保護モードがありますが、 リアルモードでも保護モードでも、 各プロッセスは仮想メモリ空間がありますよね?? <リアルモードの動作> 一番最初の動作です。 boot loaderがプログラムをメモリに読み込んでCPUは0番地のプログラムを実行すると思いますが・・・ この0番地というのは仮想メモリ空間上のアドレスですよね? 物理アドレス空間の0番地ではないですよね?
回答: いえ、リアルモードの0番地は物理アドレスの0番地です。 「リアル」モードはその名の通り、物理アドレスへ直接アクセスする動作モードです。「セグメント」と「オフセット」という2つの16ビットの値の組でメモリをアクセスしますが、単純な「セグメント×16+オフセット」という式でアクセスすべき物理アドレスが決まって、**プロセスごとのメモリ保護はありません**。 そして、x86が最初に実行するのは0番地ではなく0xffff0番地(1Mバイトの最後に近い場所)で、ここにBIOSやEFIがおいてあります。