コンパイル時とロード時のアドレスバインディングが同一の物理アドレスと論理アドレスを生成するのに対し、実行時のアドレスバインディングは異なる物理アドレスと論理アドレスを生成するのはなぜですか?
1 に答える
この質問が出されてから長い時間が経ちましたが、アーカイブの目的で答えを追加しているだけです。
次の定義を見てみましょう。
Logical address
:CPUによって生成されたアドレス
Physical address
:メモリ管理ユニット(MMU)から見たアドレス
ここでcompile time binding
、メモリ位置の範囲が常に利用可能であり(プログラムには十分です)、絶対コードが生成されると想定します。したがって、CPUが生成するアドレス(ポインタアドレスなど)は、MMUで見られるものと同じです。
メモリ使用率のより良いバージョンは、ディスク上にあるプログラムによってメモリが使用されないように、ロード時までバインディングを遅らせることです。このために、再配置可能な形式で生成されたコード。これはload time binding
です。
execution time binding
バインディングが実行時間まで遅延する場合は、少し異なります。この場合、CPUはアドレスを生成し、たとえば300
、アドレスに対してすべての操作を実行します300
が、実際のメモリアクセスがある場合は常に、このアドレスに再配置可能レジスタの値(たとえばR
、)を追加することによってこのアドレスが変換されます。したがって、論理アドレス範囲は0-LIM
、物理アドレス空間はR-(R+LIM)
です。
より明確になるように、例を挙げて説明します。
プログラムをload time binding
スワップして同じ場所に戻す必要がある場合は、スワップを検討してください(手順のすべてのアドレスはこのアドレスに従って入札されたため)。一方、execution time binding
変更するだけでよいので、任意のプロセスを任意の場所にスワップバックできます。再配置可能レジスタの値を指定すると、正常に機能します。したがって、メモリ使用率が増加します。