コンピューターサイエンス:アルゴリズム / OS / ネットワーク / DB
OSの歴史(バッチ→マルチタスク→マルチユーザー)
計算は数分で終わり、人が紙を差し替えるのに数十分かかった
1950 年代のコンピューターに仕事をさせるには、命令を打ち込んだカードの束を人が抱えて運び、読み取り機に差し込み、印字された結果を受け取り、次の束に入れ替えました。順番待ちの列に並び、自分の番が来たら機械を丸ごと占有し、終わったら次の人に明け渡します。これがバッチ処理です。
計算そのものは数分で終わります。ところがカードを差し替えている数十分、当時としては途方もなく高価だった CPU は何もしていません。1 台で家が何軒も建つ値段の機械が、稼働率数パーセントで置かれていました。時間貸しで使うのが当たり前で、遊ばせている 1 分がそのまま損失として見える世界です。OS の進化は最初から最後まで、この「機械を遊ばせない」という一点に動かされています。
最初の手当ては、次のジョブを先にメモリへ読み込んでおくことでした。1 本目が入出力を待って止まっている間に、2 本目を進めます。複数のジョブを同時にメモリへ載せておくこの方式で、稼働率は一気に上がりました。
1 本のジョブが終わるまで、ほかの全員が帰れない
稼働率は上がっても、人間の側の待ち時間は解決していません。プログラムを 1 行直すたびにカードを作り直して列に並ぶので、1 つのプログラムを仕上げるのに何日もかかりました。
1961 年に動き出した MIT の CTSS が、これをひっくり返します。1 人が機械を占有するのではなく、全員の仕事を細かい時間で刻んで交代させる。1 人あたりに割り当てられる時間は短くても、人間がキーを打って考えている間に他人の計算を進められるので、机に向かっている本人からは自分専用の機械に見えます。時分割です。
この瞬間に、コンピューターは「結果を受け取りに行くもの」から「向かい合って対話するもの」に変わりました。いま画面に文字を打ちながら考えられるのは、この発想の延長線上にいるからです。
代わりに、新しい仕事が生まれました。誰かが順番を決め、割り込みで交代させ、交代しても続きから再開できるように状態を保管しておかなければなりません。バッチ処理の時代にはそもそも不要だった機能が、ここでまとめて必要になります。いま OS の中核と呼ばれているものの多くは、この要求から出てきたものです。
UNIX が残した「小さく作って、つなぐ」
1969 年、AT&T ベル研究所で UNIX が作られます。当時の大規模 OS が抱え込んでいた機能を削ぎ落とし、小さな道具を組み合わせて仕事をさせる方針を採りました。
ターミナル
ls -l | grep ".txt" | wc -l一覧を出す道具、絞り込む道具、数える道具。どれも他方を知らないのに、出力を入力へ流し込むだけで新しい仕事になります。この考え方はソースコードごと大学に配られ、そこから分かれた枝が今も生きています。Linux は UNIX を手本に書き直されたもので、macOS の土台も Android の土台も、たどればこの家系に着きます。
いま手元で ls と打てるのは、機械を遊ばせたくないという 70 年ぶんの都合が積み重なった結果です。