Operating System — 日本語で読む
物語のタイトルはまだ英語のままですが、本文は日本語です。

二十世紀中頃、初期の電子計算機は記念碑的な、部屋を埋め尽くすほどの機械であり、工学の勝利ではあったものの、決定的な非効率性に悩まされていました。それぞれの計算、それぞれのプログラムには、高度なスキルを持つ操作員による細心の注意を払った手動設定が必要でした。この時代には、優れた頭脳が複雑なロジスティクスに取り組み、生のハードウェアを機能的なツールへと変貌させていました。 「IBM七〇四にまた一つジョブがキューに入ったぞ」と、上級操作員のトンプソンがパンチカードの山を指して言いました。「次のプログラムのためにテープドライブを交換してパッチパネルを再構成するだけで、二〇分はかかるだろうな。」 「だとすると、二〇分間のCPUアイドル時間か」と、エンジニアのデイビスがシステムログを見ながらため息をつきました。「私たちが実行する一つ一つのジョブにつき、ほぼ四分の一時間だ。この機械は驚異的だが、計算している時間よりも私たちを待っている時間の方が長い。」 トンプソンは重々しく頷きました。「貴重な計算サイクルが、これらの手動による切り替えで失われている。これらの操作を管理するための、もっと速く、もっと統合された方法が必要だ。」

新しいタスクごとにコンピューターを準備するという骨の折れるプロセスは、技術的にも経済的にも大きな負担でした。複雑な科学計算であろうと、単純なデータ分類であろうと、すべてのプログラムは機械の完全な手動再初期化を必要としました。これは、正しいコンパイラをロードし、入出力デバイスを構成し、メモリパーティションを設定することを意味しました。これらすべては、実際の計算が始まる前に行われました。この「セットアップ時間」は、これらの信じられないほど高価な機械が、人間の介入を待ってアイドル状態になることが多く、その計り知れない処理能力が一時的に休止状態にあることを意味しました。 「これを見てください」と、二十代後半で、黒い髪を後ろに束ね、集中した表情をした、実用的な灰色の作業着を着た技術者、アーニャ・シャルマは、機械の使用状況を詳述した大きなスケジュールボードを指差しながら言いました。「ジョブAが終わって、再調整のために十五分の間隔があって、それからジョブB、また十分の間隔。まるで、一つ一つの品物の間に組み立てラインが完全に停止する工場を操業しているようなものです。」 デイビス技師は、眼鏡を調整しながら首を振りました。「その通りです。私たちは毎日、貴重な計算時間を何時間も失っています。プロセス間のこの『デッドタイム』は天文学的です。機械が私たちを待っているのに、私たちがそのボトルネックになっているのです。」 「このような強力なツールにとって、それは単に容認できません」と、トンプソンはゆっくりと歩きながら付け加えました。「これらの移行を自動的に管理し、ジョブをキューに入れ、この費用のかかるダウンタイムを削減できるシステムが必要です。」

非効率な機械利用という厳しい現実は、コンピューティングの先駆者たちの間で抜本的なビジョンを刺激しました。もし機械自体が自身のプロセスを管理できたらどうだろうか?というものです。そのアイデアは、コンピューターのメモリに常駐し、他のプログラムの実行を調整し、リソースの割り当てを処理し、人間の介入を最小限に抑える「マスタープログラム」を作成することでした。「スーパーバイザー」または「モニター」プログラムというこの概念は、オペレーティングシステムの知的先駆けであり、混沌とした手動操作を合理化された自動ワークフローに変えることを約束しました。 「機械の内部操作のための交通整理役となる、監視プログラムが必要です」と、きちんと整えられた茶色の髪を持ち、洗練された一九五〇年代のビジネススーツを着た、三十代後半の聡明なコンピューター科学者であるイヴリン・リード博士は提案しました。彼女はホワイトボード上の複雑な回路図を指差しながら言いました。「ジョブを受け取り、ロードし、実行し、そして次のジョブのために機械を準備する常駐プログラムを想像してみてください。これらすべてを、タスク間に人間の手が一切触れることなく行うのです。」 短い黒髪と眼鏡をかけ、パリッとした白いシャツを着た二十代後半の若く真面目なプログラマーであるエンジニアのデビッド・キムは、思案顔で言いました。「他のプログラムを管理するプログラムですか。それは機械に自身の事柄を管理する脳を与えるようなものに聞こえます。その途方もない複雑さ…メモリ保護、I/O処理、エラー回復…」 リード博士は微笑みました。「その通りです。レオナルド・ダ・ヴィンチがかつて述べたように、『シンプルさこそ究極の洗練である』。私たちの課題は、単に自動化するだけでなく、機械に内在する複雑さを処理できる根底にある優雅さをもってこのシステムを設計することです。内部の仕組みが複雑であっても、プログラマーにはシンプルに見えなければなりません。」

理論的なアイデアは、実用的な解決策へと具体化し始めました。モニターシステムの実装で最も初期かつ影響力のあるものの一つが、ゼネラルモーターズとノースアメリカン・アビエーションのロバート・パトリックが、一九五六年にアイビーエム七〇四向けに開発したジーエム・エヌエーエー・アイオー・システムでした。この先駆的なシステムは、手動によるセットアップを自動化されたジョブシーケンスに置き換えるという、極めて重要な一歩を踏み出しました。それは、高価なメインフレームの操作を、手作業によるプロセスから、より継続的なバッチ指向のワークフローへと変革する、画期的な飛躍でした。 「ジーエム・エヌエーエー・アイオー・システムは、アイビーエム七〇四での我々の操作を真に革命しました」と、三十代後半で、短く実用的な茶色の髪に眼鏡をかけ、タックインした半袖シャツとネクタイを着用した、集中力のあるエンジニア、ロバート・パトリックは、賑やかな研究室で訪問してきた同僚に説明しました。「我々の目的は単純でした。バッチジョブ間の手動介入をなくすことです。以前は、各プログラムの間に数分を無駄にしていました。」 三十代前半で、短い黒髪に実用的なブラウスを着用した同僚のエンジニア、サラ・チェンは、「常駐モニター」を示す図を指差しました。「では、この『モニター』はメモリに常駐するのですね。ジョブ制御カードを読み込み、ユーザープログラムをロードし、ジョブが完了したら制御を戻す、と?」 「その通りです」とパトリックは断言しました。「それは連続したループです。モニター自体はプログラムですが、その仕事は他のプログラムの実行を管理することです。これにより、アイドル時間が劇的に減少し、スループットが向上します。各実行の間にテープやスイッチをいじる手間はもうありません。」

GM-NAA I/Oシステムは、シンプルでありながら奥深い原理であるバッチ処理に基づいて動作していました。オペレーターは、一度に一つのプログラムを読み込むのではなく、それぞれが特別な制御カードによって区切られた複数のジョブを一つの「バッチ」にまとめました。常駐モニタープログラムは、これらの制御カードを順次読み込み、正しいユーザープログラムを自動的に読み込み、実行し、クリーンアップしてからバッチ内の次のジョブに移りました。この自動化されたシーケンスは画期的な一歩であり、CPUを継続的に稼働させ、初期のコンピューティングを悩ませていた高価な待機時間を最小限に抑えました。 「仕組みはこうです」とパトリックは制御コンソールで実演しながら説明しました。「これらの特殊な制御カードで明確に区切られたプログラムのバッチを用意します。モニタープログラム自体は小さいですが、強力です。常にマシンのメモリの小さな部分で実行されています。」 チェンは、パンチカードのスタックがリーダーに供給されるのを観察しました。「つまり、モニターがカードを読み込み、プログラムを識別し、リソースを割り当ててから、ユーザープログラムに制御を渡すのですね?」 「その通りです」とパトリックは確認しました。「ユーザープログラムがタスクを完了すると、制御をモニターに戻す特定の命令を実行します。モニターは次にジョブカードを確認し、次のプログラムを読み込み、サイクルが続きます。この自動化されたハンドオフがアイドル時間を最小限に抑える鍵です。手動での停止の連続を、流れるような継続的な計算のストリームに変えたのです。」

バッチ処理によって効率は大幅に向上しましたが、コンピューターは依然として一度に一つのプログラムしか実行できませんでした。次の論理的な飛躍はマルチプログラミングでした。これは、複数のプログラムを同時にメモリに常駐させ、CPUがそれらの間を高速に切り替えることを可能にするものです。これが、マルチプログラミングを拡張して複数のユーザーがコンピューターと同時に対話できるようにするタイムシェアリングと組み合わさることで、コンピューティングは単一のバッチ指向のタスクから、強力な対話型ユーティリティへと劇的に変貌しました。千九百六十一年のMITのCTSS(Compatible Time-Sharing System)のような初期の取り組みは極めて重要であり、一台のマシンが多くのユーザーに効果的にサービスを提供できることを実証しました。 「真の課題は、単純なバッチ処理を超えてCPUの利用率を最大化することでした」と、短い巻き毛の白髪と鋭く知的な目を持ち、ツイードのジャケットを着た四十代の先見的なコンピューター科学者であるアリス・スターリング博士は、MITのチームに説明しました。「なぜCPUは、あるプログラムのI/O操作が完了するのを待ってアイドル状態になる必要があるのでしょうか。別のプログラムで作業できるというのに?」 きちんとした髪型で熱心な表情をした、カレッジセーターを着た二十代前半の若いプログラマー、マイケル・チェンは身を乗り出しました。「つまり、複数のプログラムを一度にメモリにロードして、OSがCPUをそれらの間で高速に切り替えるということですか?でも、メモリの競合はどうなりますか?そして、プログラム間の公平性をどうやって確保するのですか?」 スターリング博士は頷きました。「素晴らしい質問です。これには洗練されたメモリ管理とCPUスケジューリングが必要です。OSは審判となり、リソースを仲裁し、各プログラムにプロセッサ時間の公平な分け前を与えます。それはカーネルの核となる責任であり、プログラムを互いから、そしてハードウェアの複雑さから保護する重要な抽象化レイヤーなのです。」

すべてのオペレーティングシステムの中核には、その基本コンポーネントであるカーネルが存在します。カーネルは、CPU、メモリ、入出力デバイスといったコンピュータの最も重要なリソースを管理します。これは仲介層として機能し、複雑なハードウェアの詳細をアプリケーションプログラムから抽象化し、一貫性のある安全な環境を提供します。主要なメカニズムには、どのプログラムがプロセッサをどれくらいの期間使用するかを決定するCPUスケジューリング、各プログラムのメモリセグメントを割り当てて保護するメモリ管理、キーボード、ディスプレイ、ストレージなどの周辺機器との通信を制御するI/O管理が含まれます。 「カーネルは操作の頭脳であり、最初にロードされ、最後にメモリを離れるプログラムです」と、白髪交じりの髪を後ろで束ね、プロフェッショナルでやや厳格なスーツを着た四十代後半の女性であるリードアーキテクトのレナ・ペトロヴァ博士は、新入りのエンジニアに説明しました。「CPUで誰の番かを決めるプロセススケジューリングから、メモリのすべてのバイトとすべての周辺機器の管理まで、すべてを処理します。」 分厚いマニュアルを手に、二十代前半の熱心で注意深い新入りのエンジニア、アレックス・ジョンソンは答えました。「では、プログラムがファイルを要求するとき、その要求を実際のディスク操作に変換するのはカーネルなんですね?そして、あるプログラムが別のプログラムのメモリを上書きするのを防ぐのもカーネルですか?」 「その通り、アレックス」とペトロヴァ博士は、同心円を示す図を指しながら確認しました。「カーネルは特権的な『リングゼロ』で動作し、絶対的な制御権を持ちます。一方、アプリケーションは『リングスリー』で実行されます。この保護メカニズムは極めて重要です。これにより、欠陥のあるアプリケーションがシステム全体をクラッシュさせることはありません。この抽象化層こそが、現代のコンピューティングを安定させ、効率的にしているのです。」

一九六〇年代後半までに、オペレーティングシステムの進化は、ベル研究所でのUnixの誕生という極めて重要な局面に達しました。主にケン・トンプソンとデニス・リッチーによって開発されたUnixは、それまでのオペレーティングシステムよりも、よりシンプルで、より洗練され、そして決定的に、より移植性の高いものとして設計されました。その革新的な設計、特にコマンドラインインターフェース、階層型ファイルシステム、そしてプロセス間通信のための強力な概念であるパイプへの重点は、それを信じられないほど柔軟で適応性の高いものにしました。Unixの効率性と明確なアーキテクチャは、初期のコンピューティングで特定された「アイドル時間」と非効率性の問題を直接的に解決し、前例のないリソース利用を可能にしました。 「私たちは、シンプルで、洗練されていて、移植性の高いものが欲しかったのです」と、二十代後半で、黒い乱れた髪と眼鏡をかけ、カジュアルなボタンアップシャツを着た、集中力のあるエンジニアであるケン・トンプソンは、デニス・リッチーに説明しました。彼らはテレタイプ端末に身をかがめており、その紙の出力にはコードがスクロールしていました。「Multicsはあまりにも野心的で、あまりにも複雑でした。オペレーティングシステム自体が、小さく、焦点を絞ったツールの集まりであるようなシステムが必要だったのです。」 特徴的なひげと物思いにふける表情をした二十代後半のデニス・リッチーは、シンプルなシャツを着て、コマンドを入力しました。「そして、そこでファイルシステムとパイプが真に輝くのです。プログラムを配管のように接続する—あるものの出力が別のものの入力になる。それはシンプルさから計り知れない力を生み出します。」 「その通りです」とトンプソンは、画面に目を固定して肯定しました。「堅牢なカーネルと、簡単に組み合わせられる一連のユーティリティを設計することで、私たちは新たなレベルの生産性を解き放ちました。複雑な設定による無駄なサイクルはもうありません。Unixは機械の時間を効果的に最適化し、プロセスをシームレスに管理し、開発者がシンプルなコンポーネントから複雑なシステムを構築できるようにしました。」

Unixのような先駆的なオペレーティングシステムによって確立された原則は、次世代のコンピューティングに深く影響を与えました。マイクロプロセッサが登場し、より小型で手頃な価格のコンピューターが可能になると、堅牢でユーザーフレンドリーなオペレーティングシステムの必要性が最も重要になりました。CP/M、MS-DOS、そして後にApple DOSやMacintosh Operating Systemのようなシステムは、洗練されたリソース管理とユーザーインタラクションをパーソナルコンピューターにもたらしました。この変化は、コンピューティング能力へのアクセスを民主化し、専門の研究室や企業のデータセンターから、世界中の家庭、オフィス、大学へと移動させました。 「これは信じられないわ!コマンドを直接入力して、すぐに結果を見ることができるなんて!」と、二十代前半で巻き毛の黒髪をした、一九八〇年代のカジュアルなセーターを着た若い学生、マリア・ロドリゲスは、大学の研究室で初期のApple IIコンピューターに座りながら叫びました。「教授たちが説明するバッチジョブとは違うわ。コンピューターと話しているみたい。」 彼女のクラスメートで、二十代前半でストレートの黒髪をした思慮深い表情のデビッド・リーは、デニムジャケットを着て身を乗り出しました。「それがオペレーティングシステムの力だよ、マリア。それは下のすべてを管理してくれるから、僕たちはプログラムに集中できるんだ。IBM PCのMS-DOSや、Macintoshのグラフィカルインターフェースは、それをさらに簡単にしてくれる。専門家だけでなく、誰もがコンピューティングにアクセスできるようにしているんだ。」 「その通りです。」と、五十代で上品な白髪と物知りな笑顔をした、ブレザーを着た彼らの教授、エレノア・ヴァンス博士は述べました。「OSは、私たちとハードウェアの間に直感的な層を提供します。それは専門家のためのツールを、大衆のためのユーティリティに変えました。これは単に計算が速くなるということだけではありません。個人の能力を高めることなのです。」

今日、オペレーティングシステムは私たちのデジタル世界の目に見えない設計者であり、私たちが触れるほぼすべてのテクノロジーを支える不可欠な層です。グローバルネットワークを動かす強力なサーバーから、私たちのポケットの中のスマートフォン、自動車や医療機器に組み込まれたシステムから、クラウドコンピューティングの複雑なインフラストラクチャに至るまで、オペレーティングシステムは膨大な計算リソースを管理し、割り当て、保護しています。それらは静かで絶え間ないオーケストレーターであり、混沌としたハードウェアを組織化されたインテリジェントなシステムに変えようとした先見の明のあるエンジニアたちの遺産として、効率性、安定性、セキュリティを保証しています。 「このナレーションは主に視覚的なもので、モンタージュシーンには短い統合されたラベルが付いています。」