私の答えは、最新の Linux システムで実行されている Intel CPU に当てはまります。カーネル コードではなく、ユーザー レベルのプロセスについて話しているのです。それでも、他の可能性について考えるのに十分な洞察が得られると思います
住所の種類
質問3について:
仮想アドレスと論理アドレス/アドレス空間は同じであるという議論に出くわしました。本当ですか?
私の知る限り、少なくとも Intel プロセッサ上で実行されている最新の OS では、それらは同じです。
詳細を説明する前に、2 つの概念を定義してみましょう。
- 物理アドレス: RAM チップ内で何かが物理的に配置されている場所のアドレス。
- 論理/仮想アドレス: プログラムがアクセスするために使用するアドレス。通常、後でハードウェア チップによって物理アドレスに変換されます (ほとんどの場合、CPU でさえこの変換を認識していません)。
仮想/論理アドレス
仮想アドレスはまあ、仮想アドレスです.OSは、MMU(メモリ管理ユニット)と呼ばれるハードウェア回路とともに、プログラムがシステム内で単独で実行されていると誤解し、アドレス空間全体を持っています(32ビットシステムを持つということは、プログラムは、4 GB の RAM があると認識します (大まかに言えば)。
明らかに、一度に複数のプログラムを実行している場合 (GUI、Init プロセス、シェル、時計アプリ、カレンダーなど、常に実行しています)、これは機能しません。
何が起こるかというと、OS はプログラム メモリの大部分をハードディスクに置き、最も使用する部分は RAM に存在しますが、それはあなたとあなたのプログラムのアドレスを持っているという意味ではありません。知る。
例:プロセスには、仮想アドレス 0xff (想像上...) が与えられた (counter) という名前の変数と、仮想アドレス (0xaa) が与えられた (しばしばNotUsed) という名前の別の変数がある場合があります。
すべてのリンクが行われた後にコンパイルされたコードのアセンブリを読み取る場合、それらのアドレスを使用してそれらにアクセスすることになりますが、(しばしばNotUsed) 変数は実際には 0xaa の RAM にはなく、ハードディスクにあります。プロセスがそれを使用していないためです。
さらに、変数 (カウンター) は物理的に (0xff) にあるのではなく、RAM の別の場所にあります。CPU が 0xff にあるものを取得しようとすると、MMU と OS の一部がマッピングを行います。 RAMで実際に利用可能な場所からその変数を取得すると、CPUはそれが0xffにないことにさえ気づきません。
プログラムが (頻繁に使用されない) 変数を要求するとどうなるでしょうか? MMU+OS はこの「ミス」に気付き、CPU 用にハード ディスクから RAM にフェッチし、アドレス (0xaa) にあるかのように CPU に渡します。このフェッチは、RAM に存在していた一部のデータがハードディスクに送り返されることを意味します。
これがシステム内のすべてのプロセスで実行されていると想像してください。すべてのプロセスは 4GB の RAM を持っていると考えていますが、実際にそれを持っている人は誰もいませんが、プログラムの一部を RAM で物理的に利用できますが、プログラムの大部分はハードディスクに存在するため、すべてが機能します。HD に配置されるプログラム メモリのこの部分を、ファイル操作を通じてアクセスできるプログラム データと混同しないでください。
概要
仮想アドレス: プログラムで使用するアドレス (CPU がデータを取得するために使用するアドレス) は実際のものではなく、MMU を介して何らかの物理アドレスに変換されます。誰もが 1 つ持っており、そのサイズはシステムによって異なります (32 ビットを実行している Linux は 4GB のアドレス空間を持っています)。
物理アドレス: OS 上で実行している場合、到達することのないアドレス。仮想アドレスに関係なく、データが RAM に存在する場所です。他のプロセスにより多くのスペースを確保するために、データがハードディスクとの間で送受信される場合、これは変わります。
上で述べたことはすべて、概念全体の単純化されたバージョンですが、コンピュータ システムのメモリ管理部分と呼ばれるものです。
このシステムの結果
- プロセスはお互いのメモリにアクセスできず、すべての人が個別の仮想アドレスを持ち、2 つのプロセスが同じ仮想アドレスにアクセスしようとしていることに気付く場合でも、すべてのプロセスが異なる領域への異なる変換を取得します。
- このシステムはキャッシング システムとしてうまく機能します。通常、利用可能な 4 GB をすべて使用するわけではありません。他の人にそれを共有させ、彼らにも使用させてください。プロセスがさらに必要な場合、OS は HD からデータを取得し、他のプロセスのデータを置き換えますが、もちろん費用がかかります。