仮想メモリと論理メモリは、プログラムが互いのデータを破損しないようにするのに役立ちます。
プログラムの再配置は、複数のプログラムが互いに破損しないようにするという、ほぼ同様のことを行います。再配置は、オブジェクト プログラムを変更して、新しい別のアドレスにロードできるようにします。
仮想メモリ、論理メモリ、およびプログラムの再配置はどのように関連していますか? 彼らは似ていますか?それらが同じ/類似している場合、なぜプログラムの再配置が必要なのですか?
仮想メモリと論理メモリは、プログラムが互いのデータを破損しないようにするのに役立ちます。
プログラムの再配置は、複数のプログラムが互いに破損しないようにするという、ほぼ同様のことを行います。再配置は、オブジェクト プログラムを変更して、新しい別のアドレスにロードできるようにします。
仮想メモリ、論理メモリ、およびプログラムの再配置はどのように関連していますか? 彼らは似ていますか?それらが同じ/類似している場合、なぜプログラムの再配置が必要なのですか?
仮想メモリは、プログラムが他のプログラムに干渉するのを防ぎません。それを行うのが論理記憶です。残念ながら、この 2 つの概念が "仮想メモリ" に混同されることはよくあることです。
移転には2つのタイプがあり、どちらを指しているのか明確ではありません。ただし、それらは接続されています。一方、この概念は実際には仮想メモリとは関係ありません。
再配置可能なコードの最初の概念。これは、通常は異なるアドレスにマップする必要がある共有ライブラリにとって重要です。
リロケータブル コードは、絶対アドレスではなくオフセットを使用します。プログラムが次のような命令シーケンスになる場合:
JMP SOMELABEL
. . .
SOMELABEL:
コンピューターまたはアセンブラーは、これを次のようにエンコードします。
JUMP the-number-of-bytes-to-SOMELABEL
それよりも
JUMP to-the-address-of-somelabel.
オフセットを使用すると、JMP 命令がどこにあるかに関係なく、コードは同じように機能します。
2 番目のタイプの再配置では、最初のタイプを使用します。以前は、移転は主に図書館に使用されていました。現在、一部の OS はメモリ内の異なる場所にプログラム セグメントをロードします。それはセキュリティを目的としています。特定のアドレスにロードされているアプリケーションに依存する悪意のあるクラックを保持するように設計されています。
これらの概念はどちらも、仮想メモリの有無にかかわらず機能します。
通常、プログラムを変更して再配置することはありません。通常、実行可能ファイルには、実行時に修正する必要のあるアドレスがいくつか含まれているためです。