3

アクセスできるメモリの合計が 4GB に制限されている場合、Windows はどのようにして複数のプロセスにそれぞれ 4GB のアドレス空間を与えるのでしょうか。

Windowsメモリ管理で見つけた上記の質問の解決策(作成者:Pankaj Garg)

解決:

これを実現するために、Windows はページングと呼ばれる x86 プロセッサ (386 以上) の機能を使用します。ページングにより、ソフトウェアは物理メモリ アドレスとは異なるメモリ アドレス (論理アドレスと呼ばれる) を使用できます。プロセッサのページング ユニットは、この論理アドレスを透過的に物理アドレスに変換します。これにより、システム内のすべてのプロセスが独自の 4 GB の論理アドレス空間を持つことができます。

誰かがそれをより簡単な形で理解するのを手伝ってくれますか?

4

6 に答える 6

6

基本的な考え方は、物理 RAM が限られているということです。いっぱいになると、代わりにハードディスクにデータを保存し始めます。プロセスが現在ディスク上にあるデータを要求したり、新しいメモリを要求したりすると、ページをディスクに転送して RAM から追い出し、実際に必要なデータをページインします。

OS は、ページ テーブルと呼ばれるデータ構造を維持して、現在物理メモリ内にあるデータに対応する論理アドレスと、ディスク上のデータの場所を追跡します。

各プロセスは独自の仮想アドレス空間を持ち、この空間内の論理アドレスを使用して動作します。OS は、特定のプロセスと論理アドレスの要求をディスク上の物理アドレス/場所に変換する役割を果たします。また、プロセスが他のプロセスに属するメモリにアクセスするのを防ぐ役割もあります。

プロセスが現在物理メモリにないデータを要求すると、ページ フォールトがトリガーされます。これが発生すると、OS はディスクに移動するページを選択します (物理メモリがいっぱいの場合)。キックアウトするページを選択するためのページ置換アルゴリズムがいくつかあります。

于 2012-09-16T08:22:33.967 に答える
3

間違った元の仮定は、「アクセスできる合計メモリも 4GB に制限されている場合」です。OSがアクセスできる総メモリ量はそれほど制限されていません。

32 ビット コードがアクセスできる 32 ビット アドレスには制限があります。4 GB の (1 << 32) です。ただし、これは同時アクセスのみの量です。OS にカード A、B、...、F があり、アプリケーションが一度に 4 つしかアクセスできないと想像してください。App1 にはABCD、App2 - ABEF、App3 -が表示されている可能性がありますABCF。アプリは 4 を認識しますが、OS は 6 を管理します。

32 ビット フラット メモリ モデルの制限は、OS 全体が同じ制限を受けることを意味するものではありません。

于 2012-09-16T08:30:52.537 に答える
2

Windows は、仮想メモリと呼ばれる技術を使用します。各プロセスには独自のメモリがあります。これが行われる理由の 1 つは、セキュリティ上の理由によるもので、他のプロセスのメモリへのアクセスを禁止するためです。

ご指摘のとおり、割り当てられた仮想メモリは、実際の物理メモリよりも大きくなる可能性があります。ここで、ページングのプロセスが始まります。メモリ管理とマイクロアーキテクチャに関する私の知識は少しさびているので、間違ったことを投稿したくはありませんが、http://en.wikipedia.org/wiki/Virtual_memoryを読むことをお勧めします。

より多くの文献に興味がある場合は、「Structured Computer Organization – Tannenbaum」を読むことをお勧めします。

于 2012-09-16T08:20:26.937 に答える
1

仮想アドレス空間は RAM ではありません。アドレス空間です。それぞれpage(ページのサイズはシステムによって異なります) はマップ解除 (ページはどこにもアクセスできず、存在しません)、ファイルにマップ (ページは直接アクセスできず、そのコンテンツはディスクに保存されます) することができます。 RAM にマップされます (実際にアクセスできるページです)。

RAM にマップされたページは、スワップ可能または固定できます。固定されたページがディスクにスワップ アウトされることはありません。スワップ可能なページはディスク上の領域に関連付けられており、その領域に書き込まれて、使用している RAM を解放できます。

RAM にマップされたページは、読み取り専用、書き込み専用、読み取り書き込みも可能です。それらが書き込み可能である場合、直接書き込み可能またはコピーオンライトである可能性があります。

複数のページ (同じアドレス空間内と別のアドレス空間の両方) を同じようにマップできます。これは、2 つの別個のプロセスがメモリ内の同じデータにアクセスする方法です (各プロセスの異なるアドレスで発生する可能性があります)。

最新のオペレーティング システムでは、各プロセスに独自のアドレス空間があります。32 ビット オペレーティング システムでは、各プロセスに 4GiB のアドレス空間があります。64 ビット オペレーティング システムでは、32 ビット プロセスにはまだ 4GiB (4 ギガバイト) のアドレス空間しかありませんが、64 ビット プロセスにはそれ以上のアドレス空間がある場合があります。一般に、それらは 18 EiB (18 exabinary バイト、つまり 18,874,368 TiB) を持っています。

アドレス空間のサイズは、RAM メモリの量と実際に割り当てられた空間の量の両方から完全に独立しています。1 ギガバイトの RAM を搭載したマシン上で、それぞれ 18 EiB のアドレス空間を持つ 100 のプロセスを持つことができます。実際、Windows は、典型的なマシンが数メガバイトまたは RAM しか持っていなかった時代から、各プロセスに 4GiB のアドレス空間を与えてきました。

于 2012-09-16T11:29:11.457 に答える
0

これはずっと前に、OS コースで Windows をケース スタディとして読んだものです。私が示す数字は正確ではないかもしれませんが、舞台裏で何が起こっているかについてのかなりのアイデアを与えることができます. 私が思い出すことができるものから:

Windows で使用されるメモリ モデルはDemand Pagingです。Intel では、ページ サイズは4kです。最初にプログラムを実行すると、4K の各 4 ページのみがプログラムからロードされます。つまり、合計16kのメモリが割り当てられます。プログラムは大きくなるかもしれませんが、プログラム全体を一度にメモリにロードする必要はありません。これらのページの一部はデータ ページです。つまり、変数とデータ構造が存在する場所で読み取り/書き込みが可能です。もう 1 つは実行可能コード、つまりコード セグメントを含むコード ページです。IP はコード セグメントの最初の命令に設定され、プログラムは 4GB が割り当てられているという印象で実行を開始します。

さらに多くのメモリを要求する場合 (データ セグメント)、またはプログラムがさらに実行され、他の実行可能な命令 (コード セグメント) が必要な場合など、さらにページが必要な場合、Windows は十分な量のメモリが利用可能かどうかを確認します。はいの場合、これらのページはロードされ、プロセスのアドレス空間にマップされます。十分なメモリが利用できない場合、ウィンドウはどのページがかなり長い間使用されていないかをチェックします (これは、呼び出しプロセスだけでなく、すべてのプロセスに対して実行されます)。そのようなページが見つかると、それらをページング ファイルに移動してメモリ内のスペースを解放し、要求されたページを読み込みます。

プログラムが、既にロードされている dll からコードを呼び出すことがある場合、ウィンドウは単にそれらのページをプロセスのアドレス空間にマップします。これらのページは既にメモリ内で使用できるため、再度ロードする必要はありません。したがって、重複を回避し、スペースを節約します。

したがって、理論的には、プロセスは利用可能なメモリよりも多くのメモリを使用しており、4 GB のメモリを使用できますが、実際にはプロセスの一部のみが一度にロードされます。

役立つと思われる場合は、私の回答にマークを付けてください

于 2013-08-21T06:13:27.610 に答える
0

コンテキストが 32 ビット システムであると仮定すると、次のようになります。

http://en.wikipedia.org/wiki/Virtual_memoryに加えて、カーネルによって各プロセスに与えられるメモリの抽象化は 4GB です。各プロセスではカーネルもプロセスのほとんどのページにマップされています。一般に、NT システムでは 4GB のうち 2GB がカーネルによって使用され、*nix システムでは 1GB がカーネルによって使用されます。

于 2012-09-16T08:35:17.823 に答える