メモリその10

Page管理が、Process毎に用意されたPTDとPTEで管理されるとはいえ、システム単位でPageの管理を行うのに、いちいち各ProcessのMemory Spaceにアクセスしていたら効率が悪すぎる。従って、個別のEntryそのものはProcessに置かれるとは言え、それらEntryへのポインタにあたるものは、当然System全体で管理される。それが「PFNデータベース」で、上巻P549の図7-33とか上巻P550の図7-34で示される構造を持っている。さて、これらを見て思い出すのは、こちらで触れたこの図である。名前もやはりPFN Databaseとなっており、全く同じ用途に利用される。各Process単位でPTEを管理する以上、System Wideでこれを管理するためには似た構造がどうしても必要、ということは間違いないのだが、このあたりはNTのMemory管理構造を設計するときに、VMSにおける構造がまるで念頭になかったとは思いがたい。勿論細かい部分は異なるが、これはOSのインプリメントの違いがある以上、仕方が無い。

ということで、ここまでWindowsのMemory Managementのインプリメントを簡単に眺めてきた。内容は一部、先にProcessのところで説明した部分と被っているが、両者は分離不可分な構造になっている以上、これを完全に分離して説明するのは難しいということでご了承いただきたい。

ざっと40回余りを費やして、インサイドWindowsの上巻で説明された構造と、VMSというOSの構造の近似点について説明してきた。ウィキペディア日本語版のWindows NTの項には「設計の要素の多くはデヴィッド・カトラーや一緒に入社したDECの開発者の影響があり、VMSの要素が反映されている。」なんて一節があるが、具体的にどのあたりに影響があったかについての説明はできたかと思う。「で、上巻はいいとして下巻は?」という疑問は当然あると思う。で、その答えは「あんまり関係ない」となる。勿論まるっきり無縁という訳ではない。例えばセキュリティにおけるACL(Access Control List)の取り扱いには近いものがあるし、I/O Systemの一部も近似点がある。が、例えばセキュリティに関してはWindows NT 3.xからWindows 2000に至る過程で大幅に改良されており、もはや相違点しか目に付かない。I/O Deviceについてはこのあたりでも多少論じたが、根本的な仕組みに多少の近似点は残されているものの、実装レベルでは大幅に異なっている。やはりWDMは非常に大きなアーキテクチャ上の変更であり、これが登場して以降のI/Oの取り扱いは完全に変わったと言って良いだろう。

その他の項目に至っては、もう根本的に異なっている。ネットワークは、VMSではDNA(Digital Network Architecture)をベースとしたDECNetがインプリメントされており(後からTCP/IPもサポートするようになったが、今回の話のベースとなっているVMS 5.xでは公式にはサポートされていない)、他方VMSはNetBEUIとTCP/IPがベースとなっている。ネットワークがファイルシステムとも結合している(加えて言えば、キャッシュにも関係する)という点ではVMSの先進性は特筆ものだった気はするのだが(今のWindowsでもここまでの統合は実現できていない)、これはネットワークもファイルシステムも独自のものを使えたからこその話で、標準技術を組み合わる方向を選んだWindowsにそのまま生かすことは出来なかったのだと思われる。

ストレージは、VMSが自社のHDDをサポートするRMSというファイルシステムを前提としたもの、Windowsは汎用のIDEやSCSIをサポートしたFATやHPFS、NTFSを前提としたものだ。またストレージ管理に絡むキャッシュ(これは要するにメモリの空き領域を使ったディスクキャッシュが主体だが、他にもネットワークキャッシュなども含む)については、11.1.4「仮想ブロックキャッシング」(下巻P207)の先頭にあるように、VMSとは異なるロジックを実装しており、ここでの共通項も少ない。

そんなわけで主題となる「WindowsとVMSの共通点」に関しての説明は今回で終了である。この後数回、下巻のテーマを中心にいくつかの補足説明を行って、このシリーズを終了したいと思う。