8

プログラムでは、MOV REG,1000のような命令を実行すると、メモリアドレス1000の内容をREGにコピーすることができます。インデックスは、インデックス、ベースレジスタ、仮想アドレスと仮想アドレス空間の理解

これらのプログラム生成アドレスは仮想アドレスと呼ばれ、仮想アドレス空間を形成します。

誰でも私に何を説明してもらえますか?(これらのプログラム生成アドレスは仮想アドレスと呼ばれます)どういう意味ですか?

答えて

27

プログラムとデータは、メモリセルに数字として格納されます。各メモリセルは、アドレスと呼ばれる固有の番号を持っています。有効なアドレスを表す数字の範囲は、アドレススペースと呼ばれます。

プログラムが実行されると、CPUはメモリからデータを読み取り、結果をメモリに書き戻します。 CPUは、読み出しまたは書き込み動作の対象となるメモリセルのアドレスを指定することによって、所望の位置をメモリに通信する。

CPUがアドレスを思いつく方法はいくつかあります(アドレスは数字だけです)。アドレスを表す数字はレジスタ内にあることができ、別のメモリ位置に格納することができ、オフセットをレジスタに加算または減算することによって計算することができます。どのような場合でも、コンパイルされたプログラムは、読み書きする必要のあるアドレスを(またはを生成する)方法をCPUに指示します。

最新のアーキテクチャでは、複数のプログラムが論理アドレス空間全体を所有しているかのように実行できます。言い換えれば、いくつかのプログラムは、互いの結果を踏まずに同じアドレスのメモリ位置に書き込むことができます。これは、アドレス空間を仮想化することによって行われます。プログラムAとBが0x1000のメモリ位置への書き込みを生成するとしましょう。オペレーティングシステムの助けを借りて、CPUはそれをに物理アドレス 0x60001000プログラムBのための0x5F001000マップを追加調整することができます。両方のプログラムは0x1000なぜなら、それらは仮想アドレス空間で動作するからです。メモリのモデルは、0から始まり0x000100000000に続く連続したブロックです(システムにプロセスで使用可能な4GiBのメモリがあると仮定して)。しかし、このモデルは、CPUがさらにの論理アドレスを物理アドレスに変換するためにのみ機能します。物理アドレスは、プログラムの実行中に必要に応じて割り当てられます。

アドレスを表す同じ番号をプログラムにし、CPUに異なることを意味しているため、プログラムのアドレス空間は仮想と呼ばれ、CPUのアドレス空間は物理と呼ばれています。

+0

例では、0x1000はプログラム生成アドレスですか? –

+0

@ program-o-steveはい、プログラム生成アドレスです。プログラムがそのアドレスをどのように生成したかは問題ではないことに注意してください:静的変数のアドレス、アドレス0x1000の配列の要素0、アドレス0x0FE0の配列の要素32などです。 。 – dasblinkenlight

+0

しかし、私の質問のステートメントは、プログラムが仮想アドレスになるようにアドレスを生成したとしています。 0x1000は仮想アドレスではないようです –

1

プログラムがメモリにアクセスすると、そのアドレスをバッキングする物理メモリがどこに格納されているのかわからない、または気にしません。オペレーティングシステムとハードウェアが連携して正しい物理アドレスを特定し、必要なデータにアクセスできるようにすることは、オペレーティングシステムとハードウェアに依存しています。したがって、プログラムがメモリに仮想アドレスをアクセスするために使用しているアドレスを言います。仮想アドレスは2つの部分で構成されています。ページとそのページへのオフセット。

関連する問題