• ベストアンサー

OSはどのようにして、CPUにメモリ上の物理アドレスを伝えるのか?

一般的なシステムにおいて、プログラムを実行するには、コンパイラが再配置可能なオブジェクトファイルにして、そのオブジェクトファイルをローダがメモリ上にローディングして、CPUによって実行が行われると認識しています。 では、実際にCPUにより実行される時に、どのようにしてCPUは、ローディングされている物理アドレスを知ることが出来るのですか?一番初めにOSがどのようにCPUに先頭番地を伝えているのかが見当がつきません。例えば、486では、セグメントレジスタの値とオフセットアドレスを加算したアドレスを基にメモリとやり取りしていますが、OSがこのセグメントレジスタに先頭アドレスをどのように格納しているのかを教えてください。お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

OSは、自分がロードしたプログラムの実行アドレスを知っているのは当然ですから、あとはそのアドレスを(86だとすれば)CSとIP(昔ふうにいえば、プログラムカウンタ)に、セットすれば良いだけです。普通にセットするだけのコードは、ジャンプと呼ばれ、帰ってくる仕度をするのが(一般には)コール(或いはブランチとも)と呼びます。

xyzzy55
質問者

補足

ご回答ありがとうございます。再び質問なのですが、x86では、メモリ管理ユニット(MMU)の中にページングを行う表をOSがローディングしているのですか?そして、x86ではセグメント方式を必ず使うかもしれませんが、プロセッサを作る場合に、セグメント方式を使わずに(プロセッサ内にセグメント方式のハードウェアを用意せずに)、MMUを別途用意してページングだけを利用したメモリ管理は可能ですか?よろしくお願いします。

その他の回答 (1)

  • edomin
  • ベストアンサー率32% (327/1003)
回答No.1

質問の内容からでは、OSとCPUがそれぞれ独立して動いているような印象を受けます。 「ユーザがプログラムを実行」  ↓ 「OSがローダに指示」  ↓ 「プログラムをロード」  ↓ 「OSからCPUに制御を渡す」 OSを動かしているのはCPUですよ。 また、プログラムをロードさせているのもCPUでしょ。

xyzzy55
質問者

お礼

ご回答ありがとうございます。私の質問はなんだかOSとCPUが独立して動いているように感じられました。すみません。再び質問なのですが、x86では、メモリ管理ユニット(MMU)の中にページングを行う表をOSがローディングしているのですか?そして、x86ではセグメント方式を必ず使うかもしれませんが、プロセッサを作る場合に、セグメント方式を使わずに(プロセッサ内にセグメント方式のハードウェアを用意せずに)、MMUを別途用意してページングだけを利用したメモリ管理は可能ですか?よろしくお願いします。