今日3月13日は、デヴィッド・カトラーの誕生日(1942)。
伝説級の OS 開発者です。
かなりの変人らしいです。
彼のことを知るには「闘うプログラマー」を読むのが一番良いようなのですが、恥ずかしながら読んでおりません。
なので、彼自身については語れるほどの知識を持っておりません。
とはいえ、せっかくなので、ネット上で知りえる程度の話を、僕の得意な技術方面を中心として、まとめておきます。
まず、彼が手掛けた最初の OS から。
DEC で PDP-11 用の、RSX-11M というリアルタイム OS を開発したそうです。
…DEC PDP-11 から説明したほうがよさそうです。
DEC は PDP シリーズという「ミニコンピューター」を作っていました。
当時、コンピューターと言えば UNIVAC 。そして、IBM。
特に IBM は、プログラムや操作を行う「オペレーター」の派遣とセットで販売しており、コンピューターは自分で扱うものではありませんでした。
それを、あえて「自分でプログラムしてよいコンピューター」として販売したのが、PDP-1 に始まる PDP シリーズです。
ところが、PDP シリーズは、開発開始順に番号がつけられています。
それとは別に、大きく分けて3系統のシリーズがあります。
つまり、数字とシリーズに関連性がなく、非常にわかりにくいです。
PDP-1 は、18bit コンピューターでした。
18bit って、今見るとすごく中途半端に見えますが、当時は UNIVAC も IBM も 36bit で、安くするためにその半分サイズにしたものです。
PDP-7 は、最初の UNIX が作られたことで有名な機械ですが、18bit のシリーズでした。
そして、このシリーズの最後は PDP-15 。
他に、12bit と 36bit のシリーズがあるのですが、突然変異のように一台だけ、16bit の機械があります。
それが、PDP-11 。最終的に、PDP の中で一番売れた機種です。
PDP-11 は、それまでの開発経験をもとに、使いやすくなるように1から再設計を行ったマシンです。
このため、CPU の命令などが非常にわかりやすく、以降の多くの CPU のお手本となりました。
当初 PDP-7 で作られた UNIX も、のちに PDP-11 に移植され、大きく発展しています。
さて、PDP-15 で、RSX-15 というリアルタイム OS が作られます。
…リアルタイム OS 、というのも聞きなれない人も多いと思います。
普段使われている、Windows や Mac OS X 、Linux などは、複数のプログラムを同時に動かせます。
これは、1つのプログラムを少し実行したら、途中結果を保存して別のプログラムを少し動かして…という操作を、行っています。
CPU が十分に速ければ、同時に複数のプログラムが動いているように見えますが、基本的には、1つのプログラムから見れば「一定時間ごとに処理のタイミングが来る」ようになっています。
しかし、世の中には、わずかな遅れも許されないような処理内容もあります。
たとえば、コンピューターにセンサーをつなぎ、何かの状態を監視しているとしましょう。
この監視内容に基づき処理を行う必要があるのですが、「処理」に時間がかかったとしても、監視をおろそかにしてはなりません。
しかし、その「監視」よりも重要な作業もあり、非常停止キーが押された場合には、速やかに停止状態に移行しなくてはならない…など。
こうした場合には、Windows のような「一定時間ごとに順番に処理する」やり方では問題が出ます。
プログラムごとに、どの処理がより優先されるか、絶対に間に合わせないといけない「締め切り時間」などを指示する仕組みを作り、OS はこうした情報を基にプログラムに処理時間を割り当てます。
こうした OS を、リアルタイム OS と呼びます。
さて、その RSX-15 を、大ヒットマシンである PDP-11 に移植したものが、RSX-11 です。
RSX-11 は、派生バージョンが多数作られています。
まず、最初は紙テープからロードして使用される、RSX-11A。
シングルユーザーの OS でした。
これを拡張し、ディスクにアクセス可能とした B。
さらに、単にアクセス可能なだけでなく、ディスクから起動し、ディスクを前提とした D。
D は、マルチユーザーの OS に変化しています。複数人数が同時にコンピューターを使えるのです。
ところで、PDP-11 はアドレスも 16bit で、64Kbyte のメモリ空間しか持ちません。
当時としては複雑なディスク装置を扱う機能を持ちながら、複数人数が同時にアプリケーションを実行できる、という OS を、64Kbyte のメモリで実現していたことに驚きます。
#注:PDP-11 は大ヒットマシンで、改良版も多数作られました。
このため、のちには 4Mbyte のメモリを搭載する機械もあります。
しかし、当時はメモリの値段が高く、実際に販売された PDP-11 には、搭載可能なメモリ量の半分しか搭載していない、32Kbyte しかないマシンが多数ありました。
RSX-11D を、32Kbyte でも動作させる…半ば無謀ともいえる派生バージョンが、RSX-11M です。
カトラーは、この RSX-11M の開発を指揮しています。
RSX-11M は開発に成功しました。1974 年に最初のバージョンがリリースされています。
D と同じ機能を持ち、より小さなメモリで動作するのですから、これ以降 D は使われなくなります。
M は、RSX-11 の中心バージョンとなり、1993年まで バージョンアップが続けられています。
僕は残念ながら PDP-11 を触ったことはなく、当然 RSX-11 のバージョンごとの違いも知らないのですが、Wikipedia によれば「洗練された半自動オーバーレイシステムを使用している」そうです。
オーバーレイというのは、プログラムを実行する際に、同時に実行される必要のない個別処理にプログラムを分割し、現在必要なプログラムだけをメモリに置く方法です。
こうすることで非常に小さなメモリでプログラムを動かせるのだけど、その処理の必要上、ディスクのようなランダムアクセスメディアが必要になります。
おそらくは RSX-11A から持っている機能ではなく、せいぜい D、おそらくはメモリが不足した M からつけられた機能なのでしょう。
普通は、オーバーレイするプログラムを作成する際には、プログラマがプログラムを分割し、小さなモジュール構成にして、複雑なメモリ管理をしながら作る必要があります。
しかし、「半自動」というのは、分割までやっておけば、メモリ管理などはシステムがやってくれた、ということのようです。
これは、プログラムコンパイル時に行われたようで、複雑なプログラムになると、オーバーレイの生成処理だけで数時間から数日かかったそうです。
…この「数日」も、おそらくは最大限に複雑なプログラム、OS そのものを生成するときなんじゃないかと思います。
OS そのものもオーバーレイしながら動作したのでしょう。
#注:頻繁にディスクアクセスするようでは、真のリアルタイムにはならない。
本当にリアルタイム性が必要な時は、機能はサブセットだが完全にメモリに収まり、ディスクアクセスを行わない RSX-11S が使われた。
ところで、途中で書きましたが、PDP-11 には UNIX も作られていました。
この UNIX は AT&T ベル研究所によるもので、のちにカリフォルニア大学バークレー校によって拡張されています。
(いわゆる Syetem V と BSD)
これに対し、DEC が公式に「移植」した、Ultrix-11 という UNIX もあります。
さらに DEC 公式として、先に書いた RSX-11M もありますが、「世界初のマルチタスク OS」である、MIT の TSS に由来する、RSTS-11 もありました。
「マルチユーザーなんていらない」人向けに、RT-11 という、これも公式の OS があります。
さらに、MUMPS という OS をやはり公式に移植した、DSM-11 もあります。
公式 OS だけでも、5つあるのです。
これに加えて、PDP-11 は大ヒットマシンだったため、先に書いた UNIX をはじめとする多数の OS が作られていました。
もちろん、OS 毎に、その上で動かせるアプリケーションも異なります。
使いやすくするためには、統一した、決定版の OS が必要でした。
PDP-11 は、その後 VAX-11 という名称で 32bit 版が作られています。
初期のシリーズは、PDP-11 とも互換性を保っていました。
ここに、ふたたびカトラーが、RSX-11M を基とした OS を作っています。
VMS と名付けられています。Virtual Memory System の略で、仮想記憶を採用した OS であることを意味しています。
#仮想記憶の概念自体は、VMS 以前から存在している。
UNIX もこの後 PDP-11 から VAX-11 に移植され、仮想記憶に対応した。
仮想記憶とは、単純にいえば、ソフトウェアで頑張ってメモリを節約していた「オーバーレイ」を、ハードウェアの支援で行おう、というものです。
ハードが面倒を見てくれるので、ソフトウェアを作る人は実際の搭載メモリを気にする必要はなくなります。
とはいえ、実際の搭載メモリを超えてしまうと、メモリをディスクにスワップし始め、速度が低下します。
VMS 自体は、ちゃんと RSX-11M の後継として、小さなメモリで動作するように工夫して作られていました。
「OS の決定版」として、UNIX よりも多くの機能を作り込んでありましたし、みんなが使うはずでした。
しかし、先に書いたように、VAX-11 にはすぐに UNIX が移植されています。
そして、UNIX の人気はより高まっていくのです。
先に、PDP-11 が多くの CPU のお手本となった、と書きました。
そのころの CPU は、今でいう CISC と呼ばれるものです。
プログラマーがアセンブラでプログラムを組みやすいように、豊富な命令がそろっています。
しかし、命令を大胆に減らす代わりに、高速な命令実行を可能とする新アーキテクチャ、RISC が台頭します。
DEC でも、RISC CPU を使った新マシンの開発に着手しました。
カトラーは、このプロジェクト全体を指揮しました。
RISC を使ったハードウェア開発と、そのマシンに合わせた新しい OS です。
RISC の高速性を活かし、UNIX とも VMS とも互換性のある、新しい OS となる予定でした。
当時パソコンでは Mac が GUI という概念を提示しており、GUI を中心とした操作にする…という考えもあったようです。
一説には、「VMS を進めたもの」という意味で、WNT という名称で呼ばれていた、とも言われています。
(VMS の文字を、それぞれアルファベット順で1つすすめると、WNT になる)
しかし、DEC は会社として「保険」をかけていました。
RISC マシンプロジェクトは、同時に3つが進められており、途中で判断して、一番よさそうなものだけを残したのです。
カトラーの率いたプロジェクトは、途中で中止となります。
失敗プロジェクトを率いた責任者に、その後の仕事は用意されていませんでした。
仕事を失ったカトラーに、マイクロソフトから引き抜きのオファーが来ました。
カトラーはマイクロソフトに移籍します。
この際、彼のチームメンバーの何名かは、彼を慕ってついていきました。
マイクロソフトは、彼に 32bit 版の Windows の作成を依頼しました。
当時広く使われていた Intel の 486 プロセッサではなく、MIPS,Alpha,PowerPC,i860 などの RISC CPU 向けに作ります。
しかし、のちに方針を転換し、従来の 16bit DOS、Windows と互換性を確保し、Intelの x86 にも対応させることになりました。
ここで、DEC で中止した OS の計画が再び動き出します。
UNIX 、VMS との互換性は不要ですが、DOS、Windows との互換性を持たせた、GUI OS です。
複数の OS と互換性を持った OS 、というのは、このころすでに実績がありました。
IBM は、DOS / Windows / UNIX / MacOS などのソフトをすべて動かせる「Workplace OS」の作成を表明し、実際に DOS / Windows だけに限定した形で完成させ、OS/2 という商品名で発売していました。
その仕組みは、マイクロカーネルという概念にあります。
従来の OS は、全体に必要な機能を考え、すべてを一体として設計されていました。
しかし、マイクロカーネルでは、OS は「各種機能の連絡方法」だけを用意し、あとはすべて別プログラムとしてしまうのです。
普通の OS なら絶対必要な、メモリ管理・プロセス管理・ディスク管理なども、OS 周辺の別プログラムとして用意されます。
このやり方だと、各種 OS との互換を取る際も、既存部分と違う部分だけを少しだけ作ればよいことになります。
流用できる部分は流用し、API (呼び出し方)の問題だけならそれを用意し、根本的に違う部分はそこだけ新たに作り…
当時の Windows は、ディスク管理を中心とした DOS の上に、プロセス管理やメモリ管理、グラフィックライブラリなどを積み重ねた形で作られていました。
もともと、DOS の機能が貧弱だったため、上に乗せた部分が肥大化しすぎ、非常に不安定になっていました。
それを、マイクロカーネルの手法を使うことで互換性は確保しつつ、安定性も高め、さらに先進的な機能まで準備したのです。
完成した OS は、Windows NT と名付けられました。NT は New Technology (先進機能)の略。
しかし、VMS を一歩進めた WNT でもあります。
互換機能はありますが、当初は十分な確認が行われていませんでした。
そこで、サーバー用途として NT を売りつつ、互換性を高めていきます。
2000 年発売の Windows 2000 で、デスクトップ用としても NT が導入されます。
とはいえ、この時は DOS ベースの Windows Me も発売されています。
そして、2001 年の Windows XP で、デスクトップも完全に NT 系列となります。
以降、今でも Windows は NT 系列です。
現在、Windows は 64bit 化され、16bit の DOS / Windows との互換性は失われています。
しかし、32bit Windows との互換性は相変わらず保たれていますし、新たに Linux との互換性が確保されています。
これも、当初からマイクロカーネルの設計が良かったからできたこと。
64bit 化の際には、デヴィッド・カトラーは、自分で 64bit のコードを書いていたそうです。
もう上に立って指揮するだけでいいような身分なのに、プログラムを書くことが楽しいのですね。
2008年ごろには、Windows Azure に参加していたようですし、2013年ごろには、Xbox One に参加していたようです。
現在かかわっているプロジェクト名などは明らかにされていませんが、77歳の今も現役で、マイクロソフトで働いているようです。
同じテーマの日記(最近の一覧)
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 |