ホームページ >よくある問題 >仮想メモリはコンピュータのメモリの一部ですか?

仮想メモリはコンピュータのメモリの一部ですか?

青灯夜游
青灯夜游オリジナル
2020-08-19 15:19:146930ブラウズ

仮想メモリは、コンピュータの物理メモリの一部です。仮想メモリはコンピュータ システムのメモリ管理テクノロジであり、通常は複数の物理メモリ フラグメントに分割され、一部は必要に応じてデータ交換のために外部ディスク ストレージに一時的に保存されます。

仮想メモリはコンピュータのメモリの一部ですか?

#オペレーティング システムには、仮想メモリと物理メモリの概念があります。仮想メモリの概念がなかった昔、プログラムはアドレス指定に物理アドレスを使用していました。プログラムがアドレス指定できる範囲は、CPU のアドレス線の数に応じて制限されます。たとえば、32 ビット プラットフォームでは、アドレス範囲は 2^32、つまり 4G です。仮想メモリがなく、プロセスが開始されるたびに 4G の物理メモリが与えられると、多くの問題が発生する可能性があります:

  • 物理メモリが限られているためです。 , 実行するプロセスが複数ある場合、4Gのメモリを割り当てる必要がありますが、明らかにメモリが小さければすぐに割り当てられるため、リソースが割り当てられていないプロセスは待つことしかできません。プロセスの実行が終了すると、待機中のプロセスがメモリにロードされます。この頻繁なメモリのロード操作は非常に非効率です

  • 命令は物理メモリに直接アクセスするため、プロセスは他のプロセスのデータを変更したり、カーネル アドレスのデータを変更したりする可能性があります。スペースは見たくないものです。

  • メモリはランダムに割り当てられるため、プログラムが実行されるアドレスも正しくありません。

そこで、上記で発生するさまざまな問題に対応して登場したのが、仮想メモリです。

プロセスの実行中に、4G の仮想メモリが取得されます。この仮想メモリについて考えてみましょう。各プロセスは自分に 4G のスペースがあると考えています。これは各プロセスが考えているだけです。しかし、実際には、仮想メモリに対応する物理メモリは少量の物理メモリにしか対応していない可能性があります。実際には、 , メモリの使用量は、物理メモリの使用量に対応します。

プロセスによって取得される 4G 仮想メモリは連続したアドレス空間です (これはプロセスが認識しているだけです)。しかし実際には、通常は複数の物理メモリ フラグメントに分割されており、一部は外部ディスクに保存されます。 . メモリ上では、必要に応じてデータのやり取りが行われます。

プロセスがアドレスへのアクセスを開始すると、次のプロセスが実行される場合があります。

  • アドレス空間内のアドレスにアクセスする必要があるたびに、アドレスを変換する 実際の物理メモリ アドレスについては

  • #すべてのプロセスがこの物理メモリ全体を共有し、各プロセスは現在必要な仮想アドレス空間を物理メモリにマップするだけです

  • プロセスは、アドレス空間内のどのデータが物理メモリにあるのか、どれが物理メモリにないのか (おそらくこの部分はディスクに保存されている)、および物理メモリのどこにデータがあるのか​​を知る必要があります。ページ テーブルを通じて記録

  • ページ テーブルの各エントリは 2 つの部分に分かれています。最初の部分では、ページが物理メモリ内にあるかどうかが記録され、2 番目の部分ではページのアドレスが記録されます。物理メモリ ページ (存在する場合)

  • プロセスが仮想アドレスにアクセスすると、最初にページ テーブルが参照され、対応するデータが物理メモリに存在しないことが判明した場合は、

  • ページ欠落例外の処理プロセスでは、オペレーティング システムは直ちにプロセスをブロックし、対応するページをハードディスクからメモリにスワップし、メモリがいっぱいで空き領域がない場合は、ページ カバレッジを見つけます。具体的にどのページがカバーされるかは、オペレーティング システムのページ置換アルゴリズムの設計によって異なります。

仮想メモリと物理メモリの関係については、次の図がわかりやすくなります。

仮想メモリはコンピュータのメモリの一部ですか?

ページテーブルの動作原理は次のとおりです。

仮想メモリはコンピュータのメモリの一部ですか?

  • 私たちの CPU は次のことを望んでいます。仮想アドレスにアクセスします。ページ テーブルに従って、それが配置されている仮想ページ (VP3) について、ページ テーブルの 3 番目のエントリの値を見つけ、有効ビットを決定します。有効ビットが 1 の場合、DRMA キャッシュがヒットし、物理ページ番号に基づいて物理ページ内のコンテンツが検索されて返されます。

  • 有効ビットが 0 の場合、パラメータ ページ フォールト例外が発生し、カーネル ページ フォールト例外ハンドラが呼び出されます。カーネルは、ページ置換アルゴリズムを通じて上書きされるページとしてページを選択し、ページのコンテンツをディスク領域に更新します。次に、VP3 マップされたディスク ファイルを物理ページにキャッシュします。次に、ページ テーブルの 3 番目のエントリの有効ビットが 1 になり、2 番目の部分に物理メモリ ページのアドレスに対応できる内容が格納されます。

  • ページフォールト例外処理後、中断前の命令に戻って再実行すると、キャッシュがヒットして1を実行します。

  • 見つかったコンテンツを通知キャッシュにマッピングすると、CPU は通知キャッシュから値を取得して終了します。

#仮想メモリの仕組みを要約しましょう

各プロセスが作成されると、カーネルは 4G の仮想メモリをプロセスに割り当てます。プロセスが実行を開始していないとき、これは単なるメモリ レイアウトです。実際、仮想メモリ内の対応する位置にあるプログラム データとコード (.text.data セグメントなど) は、すぐに物理メモリにコピーされるわけではなく、仮想メモリとディスク ファイル (メモリと呼ばれる) の間のマッピングにすぎません。マッピング)。この時点では、データとコードはまだディスク上にあります。対応するプログラムが実行されると、プロセスはページ テーブルを検索し、ページ テーブル内のアドレスが物理メモリではなくディスク上に格納されていることが判明するため、ページ フォールト例外が発生し、ディスク上のデータがコピーされます。物理メモリに。

また、プロセスの実行中に、malloc を通じてメモリが動的に割り当てられると、仮想メモリのみが割り当てられ、この仮想メモリに対応するページ テーブル エントリがそれに応じて設定されます。 this データが取得されると、ページ フォールト例外がトリガーされます。

仮想空間はディスク領域にマッピングされていると考えることができます (実際には、仮想空間とディスク領域の間のマッピング関係を確立するために使用される mmap を通じて、必要に応じてディスク領域にもマッピングされます)。

仮想メモリ機構を利用する利点

  • #各プロセスのメモリ空間は一貫していて固定されているため (32 ビット プラットフォームでは 4G) ), したがって、実行可能ファイルをリンクするとき、リンカはデータの最終的な実際のメモリ アドレスを気にせずにメモリ アドレスを設定できます。これは、マッピング関係を完了するためにカーネルに任されます

  • #異なる場合 プロセスが同じコード部分 (ライブラリ ファイルのコードなど) を使用する場合、そのようなコードのコピーは物理メモリに 1 つだけ保存できます。異なるプロセスは、独自の仮想メモリをその仮想メモリにマップするだけで済みます。物理メモリを節約できる

  • プログラムが連続領域を割り当てる必要がある場合、仮想メモリに連続領域を割り当てるだけでよく、連続物理メモリは必要ありません。実際、物理メモリは多くの場合、断続的な記憶の断片。このようにして、物理メモリを効果的に活用できます。

関連知識の詳細については、

PHP 中国語 Web サイト をご覧ください。

以上が仮想メモリはコンピュータのメモリの一部ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。