32ビットWindowsでのメモリ管理


-1

32ビットシステムでは、OS全体の4GBの仮想アドレス空間ですか、それとも個々のプロセスのためのものですか?

それがOS全体のためであるならば、OSはそれ自身の4GBのアドレス空間を持っていることをすべてのプロセスを欺くのでしょうか?

プロセスが開始されるとき、それはすべての仮想アドレス空間を利用しますか?仮想アドレスをコミットまたは予約すると言っているのでしょうか。

プロセスに必要な仮想アドレススペースの量をどのように確認できますか? プロセスが3 GBを超える仮想アドレス(拡張ユーザーモードシステム)を必要とする場合はどうなりますか。


それぞれ1 GB RAMの要件で設計されている32ビットウィンドウで3つのプロセスを実行している場合。 2GBのRAMシステムでメモリ割り当ての問題はありますか。そうでなければ、どのようにしてwindowsはこれを達成しますか?プロセスのすべての仮想アドレス空間には、物理​​メモリ内の物理アドレスが割り当てられていますか。それとも、その仮想アドレスにアクセスしたときにのみマッピングが行われる遅延割り当てですか。
Aman Yadav

1
コメントであなたの質問を詳しく述べないでください。 編集する あなたの質問はそれをより明確にそしてもっと完全にします。
Scott

回答:


1

32ビットシステムでは、OS全体の4GBの仮想アドレス空間ですか、それとも個々のプロセスのためのものですか?

各プロセスには独自の4GBの仮想アドレス空間があり、そのうちの2GBはカーネル空間用です。 32ビットWindowsではあなたが使用することができます LARGEADDRESSAWARE に加えて /3GB 起動オプション カーネルスペースを1GBに減らす

OSはより広いアドレスバスを取得します PAE したがって、実際には4GBを超えるRAMをアドレス指定できます。

それがOS全体のためであるならば、OSはそれ自身の4GBのアドレス空間を持っていることをすべてのプロセスを欺くのですか?

ここにばかなことはありません。 仮想アドレス!=物理アドレス 。すべてのプロセスは、物理RAMの容量に関係なく、常に独自の4GBのアドレス空間を持っているので、他のプロセスのデータを破壊することはありません。 RAMが128MBしかない場合でも、4GBのアドレス空間があります。これは、32ビットプログラムのポインタは常に32ビット幅だからです。アドレス空間はRAMだけでなくMMIOデバイスにも使用されます。 ファイルをそのアドレス空間に直接マッピングする

システムに4GB以上のRAMがある場合、プロセスは AWE それがすべての利用可能なメモリにアクセスできるように4GBのウィンドウに高いアドレスをマッピングするあるいは、次のように複数のプロセスを作成することもできます。 アドビプレミアCS4 1つ以上のプロセスのメモリ制限を利用するため

プロセスが開始されるとき、それはすべての仮想アドレス空間を利用しますか?仮想アドレスをコミットまたは予約すると言っているのでしょうか。

このプロセスには2〜4GBのアドレス空間がありますが、当然ながら、必要なメモリ量を決定するのはプロセスによって異なります。プロセスが利用可能なメモリよりも多くのメモリを要求したが、実際にその領域に書き込まなかった場合、実際にはメモリを消費しません。というの オーバーコミット そして Linuxで許可されています しかしWindows 利用可能な総RAM +ページファイル以上を割り当てることはできません。

プロセスに必要な仮想アドレススペースの量をどのように確認できますか?プロセスが3 GBを超える仮想アドレス(拡張ユーザーモードシステム)を必要とする場合はどうなりますか。

仮想アドレス空間は常に2/3/4 GBです。32ビットを超える仮想アドレスを使用するアーキテクチャに変更しない限り、それ以上の容量を持つことはできません。 3GB以上のRAMを必要とすることは別の問題です。その場合、いくつかの解決策があります。

  • 64ビットWindowsでプロセスを実行します。 LARGEADDRESSAWAREその場合は4GBのメモリにアクセスできます
  • 上記のPremiere CS4の例のように複数のプロセスを使用します。
  • つかいます AWE 上記のように
  • ソースコードがある場合は、使用するメモリが少なくなるようにアルゴリズムを書き直します。
  • プログラムの64ビット版を使用

それぞれ1 GB RAMの要件で設計されている32ビットウィンドウで3つのプロセスを実行している場合。 2GBのRAMシステムでメモリ割り当ての問題はありますか

そのうちのいくつかはページファイルに移動することができるので、通常問題はありません。しかしもちろんそれはずっと遅くなるでしょう

そうでない場合、Windowsはどのようにこれを達成しますか?プロセスのすべての仮想アドレス空間には、物理​​メモリ内の物理アドレスが割り当てられていますか。それとも、その仮想アドレスにアクセスしたときにのみマッピングが行われる遅延割り当てですか。

仮想アドレス全体は ではない マッピングされた 巨大な塊として直線的に 物理アドレス空間に。メモリがマップされています ページ数 だから、このようにプロセスのアドレス空間に未定義のアドレスがたくさんあるでしょう

pagetable

さらに、一部の物理ページは複数の仮想アドレス空間に表示されるため、プロセスはデータを共有できます。読み取り専用とマークされている一部の共有ページも、メモリ節約のために書き込まれると自動的に複製されます。というの コピーオンライト

あなたは最初に仮想メモリについて読む必要があります


0

プロセスごとに4ギガバイトの仮想アドレススペースが作成され、OSとプロセスの間で共有されます。 OSが境界を決定します(これはすべてのプロセスに対して固定されています)。
OSはすべての仮想アドレス空間に存在します。
私は 「プロセスは独自の4GBのアドレス空間を持っています」 しかし、それをOSと共有する必要があり、カーネルが所有する仮想メモリの一部を読み書き、実行することはできません。

それぞれ1 GB RAMの要件で設計されている32ビットウィンドウで3つのプロセスを実行している場合。 2GBのRAMシステムでメモリ割り当ての問題はありますか。そうでなければ、どのようにしてwindowsはこれを達成しますか?

ユーザプロセスは、常駐のままである(すなわち、スワップアウトすることができない)物理メモリを要求する特権を持たない。
仮想メモリ方式は(ページファイルまたは大容量記憶装置上のスワップ空間との)スワッピングを使用するので、通常、物理サイズが仮想サイズよりも小さい4GBの仮想アドレス空間の複数のプロセスを実行しても問題はありません。

プロセスが大量のメモリを必要とし、十分な物理メモリとスワップ空間がない場合、メモリ不足(別名OOM)状態を引き起こす可能性があります。

プロセスのすべての仮想アドレス空間には、物理​​メモリ内の物理アドレスが割り当てられていますか。それとも、その仮想アドレスにアクセスしたときにのみマッピングが行われる遅延割り当てですか。

プログラム全体に物理メモリを割り当て、メモリにロードする必要があるという要件はありません。
プロセスの物理メモリのマッピングは必要に基づいています。
プロセスは、それが実際に実行されているときにだけメモリ常駐である必要があり、少なくともそのサイズに関係なく、プログラムカウンタレジスタによって現在参照されている1ページのコードおよびデータ参照のページだけが実際に常駐。

はい、あります 「仮想アドレスにアクセスしたときにのみマッピングが行われる遅延割り当て」 、別名デマンドページング。


0

いいえ、ばかげたことはありません。OS全体に最大4GBのRAMがあります。

PAEを有効にすることができます。これが機能する場合は、Windowsに4GB以上を認識させることができます。それでも64ビットOSほどのところはありません。


実際には32ビットWindowsは長い間PAEを必要としていました、なぜならそれはNXビットを必要とするからです。 32ビット版の4GB制限は純粋にライセンス制限です そして、古いドライバはひどく書かれていてPAEではうまく動かないからです。制限を取り除くためのさまざまなパッチがあります 3.5 GB以上のRAMをサポートするためにWindows 7(32ビット)でPAEを有効にするにはどうすればよいですか? 32ビットWindows OSで4 GB以上のRAMを有効にする方法はありますか?
phuclv
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.