web-dev-qa-db-ja.com

32ビットRHEL 6システムで使用可能な最大メモリ

32ビットRHEL OS64ビットシステム。

[〜#〜] pae [〜#〜] のWikiページから:

Linuxカーネルには、バージョン2.3.23以降の完全なPAEモードのサポートが含まれています。LinusTorvaldsは、1.3.15でのPAEの4 MBページのサポートについて言及し[18]、32ビットマシンで最大64 GBのメモリにアクセスできるようにしました。

いずれかのサーバーの現在のカーネルバージョンは次のとおりです。

2.6.32-431.17.1.el6.i686

質問1

カーネルバージョンは、別の24GB RAMを既存の8GB RAM、全体32GB物理メモリが使用可能になりますか?

現在、システムは8GB RAMが使用可能であることを示しています(私はfreeコマンドを使用して確認しています)。

質問2

私はまだ仮想メモリの概念に混乱しています。

32ビットシステムは仮想メモリをどのように使用しますか?

私は32ビットRHELが3GBのチャンクでメモリを使用することを読み取りました。

これは、いつでもメインメモリに最大3GBしか存在できないことを意味しますか?

私はいつでも32GBのメモリを持っているので32GBのデータはメインメモリに常駐できると思っていました。特に、私は ここ からの答えを理解しようとしています:

各プロセスは独自のアドレス空間で実行され、32ビットであるため、各プロセスのアドレス空間は約3GBに制限されます。 32ビットアプリケーションで使用されるメモリの合計は、まったく関係ありません。回避するものは何もありません。

6
Ramesh

まあ、私は here から利用できるものよりも簡潔な答えを期待していません。

32ビットOSについて私が理解しているのは、アドレスが32ビットで表現されているため、最大でOSが2 ^ 32 = 4GBのメモリ空間を使用できることです。

process が実行できる最大値は address が4GBです。 memory address space を混同している可能性があります。 プロセスはアドレス空間よりも多くのメモリを持つことができます。これは完全に合法ですおよびビデオ処理やその他のメモリ集約型アプリケーションではかなり一般的です。 プロセスには数十GBのメモリを割り当てることができ、アドレス空間との間で自由にスワップできます。一度に user アドレス空間に入ることができるのは2 GBだけです。

家に4台の車庫があれば、50台の車を所有できます。 すべてをガレージに保管することはできません。少なくとも46台を保管するには、別の場所に補助ストレージが必要です。ガレージにどの車を保管し、通りを下った駐車場に保管するかはあなた次第です。

これは、マシンのハードディスクに4 GBを超えるRAM +ページファイルがある場合、Windowsまたはunixの32ビットOSを意味しますか。たとえば、8GB RAMおよび20GBページファイル、「メモリが使い果たされる」ことはありませんか?

絶対にそういう意味ではありません。単一のプロセスがそれより多くのメモリを使用する可能性があります!繰り返しプロセスが使用するメモリの量は、プロセスが使用する仮想アドレス空間の量とはほぼ完全に無関係です。ガレージに保管する車の数が、車の数とはまったく無関係です自分の。

さらに、2つのプロセスが非プライベートメモリページを共有できます。 20個のプロセスがすべて同じDLLをロードする場合、プロセスはすべてそのコードのメモリページを共有します。それらは仮想メモリアドレス空間を共有せず、 memory を共有します。

はっきりしない場合の私のポイントは、メモリとアドレス空間はまったく同じものではないので、同じものとして考えるのをやめるべきです。

この32ビットOSマシンに2GB RAMと2GBのページファイルがある場合、ページファイルサイズを大きくしてもパフォーマンスは向上しません。これは本当ですか?

50台の車と4台の車のガレージがあり、通りに100台の駐車場があります。駐車場のサイズを200スポットに増やします。 50台の追加の駐車スペースではなく、150台の追加の駐車スペースを用意した結果、車の速度が速くなりましたか?

2
Ramesh

ラメシュの答えは完全に間違っています。プロセスはアドレス空間よりも多くのメモリを持つことはできません、そして単にそれがそれをアドレス指定できないからです!! 4GBを超えるものを使用するには、C/C++でポンターを使用する場合と同様に、プロセスはアドレスでアクセスする必要があります。たとえば、10 GBのRAMを搭載できるとしたら、32ビットのポインタが最大4 GBに到達できる場合、プロセスに5 GBにあるデータにアクセスするように指示するにはどうすればよいでしょうか。それは不可能だ。彼の説明はすべてオペレーティングシステムに関連しています。最大64 GBの特定のブロックを、たとえば64 GBのプールからアクティブ化できます。したがって、同時に最大4GBが常に存在し、どのプロセスも最大4GBにアクセスできます。次に、別のプロセスの場合、SOはプールから4GBの別のブロックをアクティブ化できますが、プロセスは再び4GBに制限されます。実際には、32ビットポインターが最大4GB、32ビットプロセスの制限は3GBです。

2
Luis Rojas