どうやら世間的にお盆休みは終わったらしい。今日から、いつもどおりの通勤となるのだろうか(学生さんたちは長い夏休みだから、いつもどおりとは言えないが…)。で、今回も総括編に行く前に、五月雨的にベンチマーク結果などをあげておこう。その前に、Gavotte Ramdiskの件について、一つふれておく。
半ば予想はしていたが、Windows Vista管理領域外の物理メモリ(RAM)をRAMディスクに設定すると、休止状態に移行できないという事実が判明した。スリープ状態には移行・復帰はできる。もちろん、シャットダウンや再起動も問題はない(無論、ファイルは全部なくなるが、シャットダウンや再起動自体に問題はない)。だが、休止状態への移行はできない、という状況である。
考えられるのは、休止状態への移行には物理メモリの内容をHDDに書き出すという作業が伴い、これがGavotte Ramdiskのドライバとの間で何らかの影響が出たということだろう。Gavotte Ramdiskを使ってみて何となく思い出したが、Windows Vista管理領域外の物理メモリを扱うという言い方になってはいるが、実はまったく管理領域外とは言えないのだ。
というのは、32-bit OSであってもWindows 2003 Server等は、36-bit物理アドレス拡張(物理メモリ64GBまで)をサポートしているので、リニアアドレス空間は4GBという制限はあるが、4GBを超える物理メモリ(RAM)を扱うことができる。これは、Server向けOSだけの機能と思われがちで、かつMicrosoft社もエンドユーザ向けのアピールはほとんど行われていないので、32-bit版のWindows XPやWindows Vistaではないと通常思われている。だが、実際はこれらの32-bit OSでも36-bit物理アドレス拡張は、PSE(Page Size Extension)モード及びPAE(Physical Address Extension)モードのどちらもOSレベルでサポートされており、多くの制約はあるが、DOSで1MB超えメモリを扱うXMSのようなイメージ(実装は大きく異なるが)で4GB超えメモリを扱うことが可能なのである。
これは、デバッガ等も何にも用いていない勝手な当て推量なので、眉につばをしっかりつけていただきたいが(苦笑)、レジストリデータベースにPAEを追加するということは、まず間違いなく、Pentium Pro以降実装されている(しかし、チップセット=メモリコントローラが4GB超の物理メモリをサポートしていないと無意味。なので、長い間無用の長物だった)PAEを有効にしており、これをGavotte Ramdiskドライバが利用している(言い方を変えればPAEモードでGavotte Ramdiskドライバが動作している)と思われる。そして、Windows Vista標準のカーネルモードのRAMディスクドライバに被せられる形で、Gavotte Ramdiskドライバが動作し、これが物理メモリの3~4GB部分をPAEによって拡張された4GB超のリニアアドレス空間に割り当てる形で利用する。このような流れではないだろうか。
つまり、先に述べたように、そして古い話で恐縮だが、16-bitのMS-DOSが1MB超の物理メモリアドレスを扱うには、XMSドライバによる拡張が必要であり、XMSドライバ自身は仮想86モード(リアルモードではない。また議論を単純にするため、80286プロテクトモードは考慮に入れない)で動作するのではなく、プロテクトモードで動作し、DOSとメモリの内容を交換しあうことで実現した。しかし、XMSメモリはDOSプログラムを実行させる領域とすることができなかった(できないことはないが、パフォーマンスが大々幅減)ので、多くの利用はRAMディスクの領域として利用された。もうおわかりだろう。DOSをWindows XPまたはWindows Vista、XMSドライバをGavotte Ramdiskドライバと読み替えれば、まったく同じことの繰り返しでなのである。
32-bitのWindows XP及びWindows Vistaが4GB超の物理メモリアドレスを扱うには、Gavotte Ramdiskドライバによる拡張が必要であり、Gavotte Ramdiskドライバ自身は32-bit物理アドレスモードで動作するのではなく、PSEによる36-bit物理アドレス拡張モードで動作し、Windowsとメモリの内容を交換しあうことで実現した。以下略。
以上のように、DOSは16-bit、Windowsは32-bitの違いはあれど、本質的には32-bitモードの動作モードの一つ仮想86モードでDOSが動作し、PAE拡張による36-bitモードの一つの32-bitリニアアドレス空間内でWindowsが動作しており、その上位モードでXMSドライバやGavotte Ramdiskドライバが動作しているという位置づけとなっているわけである。よって、OS管理外領域とは一概に言えず、ドライバによる拡張と言った方が適当だろう。
理屈の説明が思った以上に長くなったが、これでも大きく端折ったつもりなのでご容赦願いたい。話を戻して、Gavotte RamdiskドライバをいわゆるOS管理領域外の物理メモリをRAMディスクとして利用した場合、要はPAEモードで動作されられているWindows Vistaにおいて、休止状態への移行ができない(HDDへのアクセスが間断なく続き、それが終わることなく続けられる)のは、休止状態へ移行するプロセスのうち、物理メモリ領域を把握する等の処理が想定外のPAEモードによって、正しく認識できていないのではないか、と考えられるのである。休止状態以外への移行、スリープ、再起動、シャットダウンいずれも物理メモリ全体のHDDへの待避は行わないことからも、そのことが言えるのではないだろうか。
ということで出勤時間が来てしまったので、今回はここまで。最初に書いた五月雨的にベンチマーク結果を…というのは次回とさせていただきます。
コメント