- - PR -
PAEに関して
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2009-03-08 12:08
私今まで 今のwindows(x86のものは)物理メモリがMax 4GBまでしか
認識できないと思っておりました。 しかし書き記事を見るとOS,アプリケーション,ハードで条件を満たしていると 4GB以上のメモリを積んでも認識できる上に使うことができることを知りました。 http://www.atmarkit.co.jp/fwin2k/win2ktips/1140maxmem/maxmem.html そこで教えていただきたいのですが、通常物理メモリを4GB積んでOSも4GBまでしか 対応していないで4GTを使用しない限りは ユーザ空間:2GB カーネル空間:2GB の使い分けだったと思います。 これが、4GB以上認識できるということは カーネル空間の部分が拡張できるという認識でいいのでしょうか? たとえば 2003Enterpriseは32GBとありますが以下のような設定ができるということでしょうか? ユーザ空間:2GB カーネル空間:30GB | ||||
|
投稿日時: 2009-03-08 14:43
そうではなくて、仮想アドレス空間は32bitのOS/APであるかぎりその空間サイズは基本的に固定的で、それをマッピングする先である物理アドレス空間?とでも言うべきものが32bitを超えられる、そのための技術がPAEです。
ユーザ・カーネルのアドレス空間の話は仮想アドレス空間の話なので、「32bitで表現可能な値を超えた物理メモリを扱える」という話とは、同じにしてはいけません。 ・・・と私は理解しています。 [ メッセージ編集済み 編集者: akira 編集日時 2009-03-08 14:46 ] | ||||
|
投稿日時: 2009-03-08 17:10
akira様
ご回答ありがとうございます。 ですが、もしakira様のご回答だとすれば、以下のようになるという認識でよろしいでしょうか? だとすると結局 仮想アドレスが以上のもの(4GBまでしか)は使い切れないということになりませんでしょうか? 仮想アドレスは32bit 物理アドレスは36bit(PAE使用時) >そうではなくて、仮想アドレス空間は32bitのOS/APであるかぎりその空間サイズは基本>的に固定的で、それをマッピングする先である物理アドレス空間?とでも言うべきもの>が32bitを超えられる、そのための技術がPAEです。 | ||||
|
投稿日時: 2009-03-08 19:36
1つのプロセスが扱える仮想アドレス空間はどうやっても4GBまでです(カーネル空間も込みで)。 OS上では複数のプロセスが走っていますので、例えば
となれば仮想アドレス空間が4GBのままでも6GBの物理メモリを使いきることができます。 また、AWEに対応しているプログラムならばアドレス空間は4GBのままでそれ以上の物理メモリを扱うことができます。PAEを有効にして4GB超のRAMを積んでも、AWEに対応していないプログラムには直接の恩恵はありません。 | ||||
|
投稿日時: 2009-03-08 20:44
OSがファイルIO時のデータキャッシュとして使うので全く恩恵がないわけじゃないですけどね。でもデータキャッシュが何GBもあっても恩恵はたかが知れているです。 他に4GB上の物理メモリをRAMディスクに割り当てて、そのRAMディスクをテンポラリに充てるって使い方もあります。もちろんクラッシュ時にはテンポラリのファイルが消滅するので、リスクの高い使い方です。テンポラリファイルを作らないアプリケーションではまったくメリットがないですし。 AWE対応アプリケーションとして作らないと、メリットを得るのは難しいです。ただしデータベースなど一部のアプリケーションしか対応していません。AWE対応アプリケーションを作るよりも、64bitアプリケーションを作るほうがお手軽でからね。 | ||||
|
投稿日時: 2009-03-08 21:09
色々と回答者がいるのですが、、
Kiraさんが誤解されているような気がするので言うと、仮想アドレス空間は、実行されるプロセス毎に持つものです。システム共通でひとつしかないというものでもありません。 その上で、たとえばですが、プロセスAの仮想アドレスの0は、物理アドレスの0x00000000。プロセスBの仮想アドレス0は、0x100000000という風にマッピングします。 そうすれば、32bitを超えた物理メモリを活用できます。 そしてこのマッピングを実現するために、MMUというHWや、ページテーブルといった仕組みが色々と使われています。 ちなみに物理メモリはフレームという基本的に4KB固定のページに分割され、フレーム番号が割り振られます。仮想アドレスと物理アドレスの紐付けはこのフレーム番号を用いて行われますが、これは仮想アドレスと物理メモリのアドレスのマッピングもフレームの単位で行われるということも意味します。これは、言い換えれば仮想アドレス空間は4KB毎に別の物理メモリフレームを自由に割り当てることができるということでもあります。 プロセスAとBがあるアドレス以降の仮想アドレス空間のみ、同じ物理メモリを参照するということも可能です。この仕組みを用いて、システム用の仮想アドレス空間は、すべてのプロセスが共通に持つような形になっています。 よって、複数の仮想アドレス空間が存在しつつも、仮想アドレス空間のメモリレイアウトイメージは、すべて一緒になりますが、、、一緒であってひとつではありません。 | ||||
|
投稿日時: 2009-03-08 22:07
akira様 甕星様 スフレ様
ご回答ありがとうございました。 以下の認識でよいのでしょうか? 86xの場合、仮想アドレスでは4GBまでしか扱うことはできない。 そのため以下の前提は変わらない。 ユーザ空間 :2GB カーネル空間:2GB(1プロセスに対して) ただし、カーネル空間に対して割り当てられた仮想アドレスは 1プロセスに対して2GBであるため 2プロセスであれば4GB, 3プロセスであれば6GB使用することができる。 2プロセス稼動で、物理メモリを6GB積んでいた場合場合では通常では カーネル+ 2*プロセス=6GB使用するため PAEを使用しなければ2GBページングする必要があるが PAEを使用するば物理アドレスを6GBとして使えるため ページアウトする必要がなくなる。 また、いくらPAEを使用したとしても1プロセスに対して2GB以上の仮想アドレスを 割り当てることはできない | ||||
|
投稿日時: 2009-03-09 01:00
おっしゃるカーネル空間は、Windowsではシステムアドレス空間というらしいですよ。確かに厳密に言えばカーネルとは異なるシステムコンポーネントも動いているし。
>ただし、カーネル空間に対して割り当てられた仮想アドレスは >1プロセスに対して2GBであるため >2プロセスであれば4GB, >3プロセスであれば6GB使用することができる。 この部分の意図するところが良くわからないのですが、仮想的なアドレス空間の領域サイズを単純に合算すればそうなると思います。 ですが、あくまでも実体は1つですし、カーネルも1つです。複数のプロセスの、それぞれのシステムアドレス空間も、ひとつの共有の物理メモリを参照しますし、それぞれシステム空間は同じ仮想アドレスを持ちます。 カーネル自身は2GB内で動作します。6GBの仮想アドレス空間を使用することはありません。 >2プロセス稼動で、物理メモリを6GB積んでいた場合場合では通常では >カーネル+ 2*プロセス=6GB使用するため >PAEを使用しなければ2GBページングする必要があるが >PAEを使用するば物理アドレスを6GBとして使えるため >ページアウトする必要がなくなる。 >また、いくらPAEを使用したとしても1プロセスに対して2GB以上の仮想アドレスを >割り当てることはできない 各プロセスとカーネルが、2GBをフルに扱う状況なら、基本的な考え方はそんな感じです。 [ メッセージ編集済み 編集者: akira 編集日時 2009-03-09 01:06 ] |