0

私はGalvinのオペレーティングシステムの概念のメモリ管理の概念を経験しました。私は声明を読みました:

プロセスがメモリ内のどこに存在するかがコンパイル時にわかっている場合は、絶対コードを生成できます。

コンパイル時に、プロセッサがメイン メモリ プロセスのどのメモリ位置に格納されるかを知る方法。

プログラムが準備完了状態から実行状態に移行するときにメモリが割り当てられるため、プロセスがメモリ内のどこに存在するかをコンパイル時に知っている場合、誰かが正確に何を意味するのか説明できますか。

4

2 に答える 2

1

一般に、マシン コードは位置に依存しません。任意の開始アドレスにロードしてそこで実行できるようにするには、マシンコードに関する追加情報が必要です (たとえば、それ自体のさまざまな部分へのアドレスがある場所など)。これにより、任意の位置に調整できます。

OTOH、コードが常に同じ固定アドレスにロードされる場合、その余分な情報や処理は必要ありません。

absoluteつまりfixed+ final、すでに適切なアドレスに調整されています。

プロセッサは何も「認識」しません。あなたはそれを「伝えます」。

于 2012-09-07T18:52:02.347 に答える
0

彼が「絶対コード」で何を意味するのか正確にはわかりません。使用するオペレーティングシステムによっては、コードとデータを含むプログラムが仮想アドレスにロードされ、そこから実行されます。

これに加えて、コンパイラではなくリンカが、プログラムがロードされるアドレスを設定します。

Linux のような最新のオペレーティング システムは、アドレス空間レイアウトのランダム化を使用して、すべてのプログラムが読み込まれる 1 つの静的アドレスを回避し、ソフトウェアの欠陥が悪用される可能性を回避しています。

独自のオペレーティング システムを作成している場合は、osdev.org wiki が参考になるかもしれません。ドイツ語が読める/話せるなら、lowlevel.euをお勧めします。

于 2012-09-07T08:50:50.853 に答える