【コラム】

セカンド・オピニオン

195 OS小論:OSの構造をもう少し考えてみる(1)

    大原雄介  [2007/02/25]

    いい加減ハードウェアの話が続いたので、そろそろソフトウェアの話でも...とか思ったのですが、よく考えたら相変わらずハードウェアの話になりそうな気もします。でも一応建前はソフトウェア。

    日経BPソフトプレス社から、2005年8月に"インサイドWindows 第4版 上"が、同10月に"インサイドWindows 第4版 下"が発売になったことはご存知の方も多いでしょう。いや筆者も下巻の発売をまって、まとめて買いましたが。通読した感想を言うと、中身の細かいところまでよく記述してあり、かなり内部構造が理解できます。Windows NT系の場合、他の資料として有用なのはMicrosoftから出ているWindows DDK(Driver Development Kit)。OS全体をカバーするわけではなく、あくまでもドライバの動きに関係するところのみですが、ドライバを作成するのに必要充分なだけの資料が含まれています(*1)。

    ただ通読して感じたのが、「こういう構造になっている」という話は良くわかるのだが、「なぜこうなったか」に関して、いまいち説明が不十分な箇所があること。例えば6.5.2の「優先度レベル」(上巻P384)で、合計32レベルのPriorityってどっから出てきたんだ? とか、7.9の「ワーキングセット」(上巻P534)で「そもそもWorking Setって何よ?」とか、そういった疑問には本書では答えてくれません。まぁ内部構造そのものを理解するのに、こうした疑問は不可欠とはいえない訳ですが、でもその背景を知っておくのは悪い事ではありません。

    で、こうした背景はどっから出てきたか、というとこれは旧Digital Equipment(現HP)がリリースしていたVAX/VMSというOSに起因しています。これも広く知られている話ですが、Windows NTの開発を手がけたDavid Cutler氏は、かつてはVAX/VMSの開発を手がけていたわけで、そりゃ同じ人がやってるんだから、コンセプト持ってきても当然だよなぁ、というのは素直にご理解いただけるか、と。もっともハードウェアが異なりますから、コンセプトはともかくとしてインプリメントに関しては激しく違っていたりするのですが。ただコンセプトが同じということは、例えば32レベルのPriorityが元々どんな目的で利用されていたかを知るのは悪い事ではありませんし、そうすればどこの部分をWindows NTに持ち込んだかを理解するのは本書を深く理解することに繋がるでしょう。

    もう一つ言うと、VAX/VMSが影響を与えたのはWindows NTだけではありません。VAX/VMSは仮想記憶をインプリメントした初めてのOSですが、これを稼動させたVAXというアーキテクチャを搭載したVAX-11/780という機械は、1978年にリリースされました。1978年というのは、Intelならば8086を発売した年ですし、MotorolaはまだMC6809の開発を行っていた時期です。VAXアーキテクチャ自体が、同社の16bitマシンであったPDP-11の影響を色濃く受けているのですが、このPDP-11はMotorolaのCPUに強い影響を与えていますし、VAXの特に仮想記憶周囲のインプリメントは、その後のIntelやMotorolaの仮想記憶のしくみに大きな影響を及ぼします。結果として、Intelプラットフォーム上で動くWindows NTというのが、VAX/VMSの影響をかなり受けているのは否定できません。

    まぁただ直系とは言い切れない、というのはあきらかにVMS以外からの影響もそこそこに受けているからです。詳細は本論で行いますが、UNIX系(特にVAX-11上で動いていたBSD系の影響は少なくなったと思われます)の影響は少なくありません。なので、全部が全部、VAX/VMSからと主張するつもりもないのですが。ただ「Windows NTはVAX/VMSの影響を受けている」という話は広く知られていますが、「んじゃVAX/VMSって何?」という話は案外に知られていないわけで、このあたりをご紹介してゆこう、というのがこの連載の趣旨となります。

    そんなわけでこの連載は、「インサイドWindows 第4版 上・下」の記載を元に、そこに適時解説を加えてゆく事になります。ただ他所様の出版社から出ている内容をここで引用するわけにもいきませんので、連載の中ではあくまで場所のみを示す形とします。ですので、興味ある読者はお手元に「インサイドWindows 第4版 上・下」を置いて参照していただくことになるか、と思います。ちなみにVAX/VMSに関しての記述は、Digital Pressから1992年に発売された"VAX/VMS Internal and Data Structures Version 5.2"(DP ISBN 1-55558-059-9/PH ISBN 0-13-929886-X)(Photo01)をベースとします。実はこのVersion 5.2というのは、まだAlpha AXPなどには対応していないかなり古いものであり、もっと言えばOpen VMSにも対応した最新のものはHPから発売されています。ただDavid CutlerがDECからMicrosoftに移籍したのは1988年の事であり、なのでVersion 5.2でも充分足りると判断しています。

    Photo01:通称IDS。単に頭文字を取っただけ。ちなみに猫はIDSとは無関係。

    この連載は別にOS論をぶち上げるつもりはなく(それをやるだけの知識も体力もありません)、あくまでも上に述べたような補足解説がメインですので、「OS小論」とさせていただきます。まぁそんなわけで、次週から始めさせていただきます(*2)。

    (*1) 「建前上は」。最近はだいぶマシになったが、以前はひどかった。Windows NT 4.0が出た時に、ディスプレイドライバを書くという仕事をしたことがある。この時は当然Windows NT 4.0のDDKを使ったのだが、ドキュメントを読むとNT 3.51からの違いとかの章が全部"TBF"(To be Filled)になってて、流石に途方に暮れた。最終的にはドキュメントの完成を待たずに、ET4000用のサンプルドライバの中身を読んで理解する、という作業を強いられることに。サンプルコードだけあってコメントが充実していたのと、ET4000のレジスタ構造の詳細とかの資料を持っていて助かったのだが....。最近DDKには目を通していないのだが、まだS3のTrio64とかがベースなのだろうか?

    (*2) 本当は「インサイドWindows」が発売された直後にこれをやる気になり、US AmazonからIDSも購入して準備は整ったのに、Bus話が引っ張りまくり。おまけに「数回のつもり」でやったCoreの話が18回も続いてしまい、1年以上も遅れる事に。いや、引っ張ったり続けたりしたのは筆者なんで、誰を恨むわけにもいかないんですが....

    新着記事

    特設サイトの情報

      人気記事

      一覧

        新着記事

        特別企画

        マイナビニュースマガジン