現在Youtubeに注力してますので是非チャンネル登録お願いします!

胡田昌彦のコンピューター系チャンネル

[windows] メモリ管理について学ぶ

この記事は約8分で読めます。

以前から何度も疑問がわいたり調査すべき状況になっているにもかかわらず、あやふやなままですませてしまっているメモリ管理に関してちょっと学んでみました。まだまだ分からないことが多いですが、現時点でのまとめ。

疑問

  1. 4GBの壁って何だ?
  2. Windows Serverの/3GBオプションって結局何をしているのか?
  3. Windowsのタスクマネージャーの「パフォーマンス」タブに書かれていることの意味。見方。
  4. 64bitになるとどうなるのか?

とりあえず分かったこと

  • windowsの32bit systemの仮想アドレス空間のレイアウト
    image 
  • 上記、仮想アドレス空間はOS1つにつき1つではなく、アプリケーション1つにつき1つ用意されている
    『Windowsはページ・テーブルを利用して,仮想マシンごとに4Gバイトの仮想メモリー空間を割り当て,そのうち2Gバイトをアプリケーション領域に,残り2Gバイトをシステム領域に指定している。それはあたかもWindowsシステムの中に,4Gバイトのメモリーをもったコンピュータが,いくつも存在しているイメージになる』
    本当に知っている?Windows XPの基礎[アーキテクチャ編](第1回)なぜアプリがハングしてもOSは大丈夫か?:ITpro
  • アプリケーション領域はそれぞれ別々だが、2Gのシステム領域(カーネル領域)はほぼ共通して使われている。
    『 各プロセスで使用されるコンピュータ内のアドレス空間は別々の 2 GB の領域ですが、2 GB のカーネル領域の大部分はグローバルで、現在アクティブになっているユーザー モード プロセスとは関係なく、同じ領域が使用されます。』
    ページ アドレス プールとシステム PTE のメモリ領域の設定方法
  • Windowsの64bit systemでは仮想アドレス空間は16TB(ユーザー空間、システム空間共に8TB)
    『On 64-bit machines, the virtual address space is 16 terabytes, with 8 terabytes of user space and another 8 terabytes of system space. The layout is similar to that for 32-bit Windows, except that the sizes are proportionately larger. As with 32-bit hardware, the sizes vary from release to release. 』
    メモリ管理 : すべてのドライバ作成者が知る必要のある事項
  • ハードウェアの進化によりアドレスをあらわすために使えるビット数は増えてきた。今のx86CPUでは32, 36, 40bitのモードをWindowsでサポートしている。chipsetが制限しているケースもある。現在の32bitのWindowsで扱える上限は37bit(128GB)で、これは将来増える見込み。
    『As hardware has evolved, the number of address bits has increased, leading to larger physical address spaces and potentially greater amounts of RAM. Current x86 CPUs use 32, 36, or 40 bits for physical addresses in the modes that Windows supports, although the chipsets that are attached to some 40-bit processors limit the sizes to fewer bits. Current releases of 32-bit Windows support a maximum of 37 bits of physical address for use as general-purpose RAM (more may be used for I/O space RAM), for a maximum physical address space of 128 GB. (These values may increase in the future.) Windows also continues to support older processors that decode only 32 bits of physical address (and thus can address a maximum of 4 GB).』
    メモリ管理 : すべてのドライバ作成者が知る必要のある事項
  • 64bitのCPUで扱えるのは理論的には16エクサバイトだが、現在の64bitのWindowsでサポートしているのは40bit〜50bitで、128GB〜1TB。
    『A processor that uses full 64-bit virtual addresses can theoretically address 16 exabytes. (An exabyte is a billion gigabytes, and a terabyte is a thousand gigabytes.) Current releases of 64-bit Windows support from 40 to 50 address bits and 128 GB to 1 terabyte of RAM, depending on the specific edition of the operating system. 』
    メモリ管理 : すべてのドライバ作成者が知る必要のある事項
  • paged poolは物理メモリの搭載量とOSの種類による。32bitのWindows XPでは491MB。Windows Server 2003 SP1では560MB。
    『The paged pool is exactly what its name implies: a region of virtual memory that is subject to paging. The size of the paged pool is limited and depends on both the amount of available physical memory on each individual machine and the specific operating system release. For example, the maximum size of the paged pool is about 491 MB on 32-bit hardware running Windows XP and about 650 MB on Windows Server 2003 SP1. 』
    メモリ管理 : すべてのドライバ作成者が知る必要のある事項
  • ドライバはどのIRQLにもアクセスできるため、nonpaged poolを利用する。/3GBスイッチが付与されていないシステムでは256MB。/3GBが付与されているシステムでは128MB。64bitシステムでは128GB。
    『The nonpaged pool is a region of system virtual memory that is not subject to paging. Drivers use the nonpaged pool for many of their storage requirements because it can be accessed at any IRQL. Like the paged pool, the nonpaged pool is limited in size. On a 32-bit x86 system that is started without the /3GB switch, the nonpaged pool is limited to 256 MB; with the /3GB switch, the limit is 128 MB. On 64-bit systems, the nonpaged pool currently has a limit of 128 GB. 』
    メモリ管理 : すべてのドライバ作成者が知る必要のある事項

現在の理解

  1. 4GBの壁って何だ?
    →32bitで指し示すことのできるアドレスの上限。32bit systemにおける1つのアプリケーションで単純にアクセスできるメモリの上限(アプリケーション領域としては2GBまで)。ただし、32bitOSであっても4GB以上メモリを使えるエディションもあるし、1つのアプリケーションで4GB以上のメモリを扱うための機構も用意されている。
  2. Windows Serverの/3GBオプションって結局何をしているのか?
    →1つのサブシステムのメモリ割り当て(アプリケーション2GB、システム2GB)を変更(アプリケーション3GB、システム1GB)する。
  3. Windowsのタスクマネージャーの「パフォーマンス」タブに書かれていることの意味。見方。
    SOHO MIND ≫ タスクマネージャでメモリを調査
  4. 64bitになるとどうなるのか?
    →扱えるメモリ空間が大幅に増える。

参考になったもの

ん〜。難しいなぁ。でもちょっと分かってきた気がする。

コメント

  1. hdk より:

    現在の AMD64・Intel 64 アーキテクチャでは仮想アドレスは 48 ビットまでしか対応していません。これは、OS が対応するしないの問題ではないですね。同様に、物理アドレスは 52 ビットまでです。将来それ以上が必要になったら、また PAE みたいに新たなアドレス変換機構が追加されるんだと思います。

  2. えび より:

    hdkさん、コメントありがとうございます。ふむふむなるほど。そうなんですね、勉強になります。ちょっとAMD64,Intel64の一次文献にもあたってもっと知識を深めたいと思います。やっぱり良く分かってないみたいなので・・・。(^^;