コンパイラがコンパイルされたコードを記憶装置に入れた後で、CPUが論理アドレスを作成し、それらの論理アドレスがMMU(メモリ管理ユニット)を介して物理メモリにマッピングされた後で、また私は、CPUが直接物理メモリ以外にアクセスすることはできないことを知っています。「CPUが論理アドレス空間を生成する」とはどういう意味ですか?
次に、CPUはどのようにして最初にプロセスの論理アドレスを生成しますか?
コンパイラがコンパイルされたコードを記憶装置に入れた後で、CPUが論理アドレスを作成し、それらの論理アドレスがMMU(メモリ管理ユニット)を介して物理メモリにマッピングされた後で、また私は、CPUが直接物理メモリ以外にアクセスすることはできないことを知っています。「CPUが論理アドレス空間を生成する」とはどういう意味ですか?
次に、CPUはどのようにして最初にプロセスの論理アドレスを生成しますか?
あなたは、何が何をするかについて少し混乱しているようです。
オペレーティングシステムは論理ページと物理ページフレームのページテーブルを設定することで論理アドレス空間を定義します。オペレーティングシステムは、CPUのハードウェアレジスタをロードして、定義したページテーブルについて知るようにします。
このようなページテーブルを使用して論理アドレス空間を定義することは、最新のCPUの不可欠な部分です。一部のシステムでは、物理アドレスの唯一の使用はページテーブル内にあります。
コンパイラは、使用される命令とデータを記述するオブジェクトコードファイルを生成します。
リンカはオブジェクトコードを、プログラムのメモリへのロード方法を定義する実行可能ファイルに結合します。
ローダーは、実行可能ファイル内の命令を読み取り、プログラムを実行するための論理アドレス空間を設定します。ローダーは、論理アドレス空間を定義するページテーブルを設定するシステムルーチンを呼び出します。
たとえば、実行可能ファイルに読み取り専用データがある場合、ローダーはOSルーチンを呼び出して、論理アドレス空間に読み取り専用ページを作成し、実行可能ファイルのデータにマップします。
お返事ありがとうございました。 しかし、ロードが実際に発生するのはいつかわかりました。私たちがgccを入力すると、オブジェクトコードが作成され、ライブラリとリンクされますが、ロードは今すぐまたは./a.outを入力した後にのみ行われます。 – DockYard
読み込みは、プログラムを実行した後にのみ発生します。 – user3344003
私は(おそらく)同じ本を読んで、同じ点で混乱しました。答えは私には満足です。そして1つのメモ。ローディングは、怠惰なやり方で起こるかもしれません。 – zgulser