コンピューターサイエンス:アルゴリズム / OS / ネットワーク / DB

OSの歴史(バッチ→マルチタスク→マルチユーザー)

生田 陸人
LuaGate エンジニア / 現役エンジニア
編集 LuaGate編集部

OSの歴史(バッチ→マルチタスク→マルチユーザー)

このレッスンで分かること

  • OS は「1 つずつ順番に処理」する バッチ処理 から始まり、マルチタスクマルチユーザーネットワーク OS へと進化してきました
  • 進化の動機は常に 資源を遊ばせず、人を待たせない という効率の追求でした
  • 現代のスマホ・クラウドの裏にあるのは、1960 年代に確立された設計思想の延長線です

OSの歴史 とは

OSの歴史(バッチ→マルチタスク→マルチユーザー)。本レッスンでは、OSの歴史 の基本から実際の使いどころまでを整理し、現場で迷わず使える形に落とし込みます。

バッチ処理から対話型へ

1950 年代の初期コンピューターは、研究者がカード束やテープを順に渡し、計算機は受け取った順に 1 ジョブずつ 実行していました。これがバッチ処理です。CPU は人間がカードを差し替える間ずっと遊んでおり、機械の利用率はわずか数 % でした。

1960 年代初頭、MIT の CTSS(Compatible Time-Sharing System、1961 年稼働)が タイムシェアリング の発想(複数の利用者が同じ機械を細かい時間で交代利用する)を世界で初めて実証しました。1964 年には IBM の OS/360 が登場し、複数ジョブをキューに溜めて自動的に流すバッチ運用を確立します。タイムシェアリングの思想はその後 Multics へと発展し、人間とコンピューターが対話できる時代に入ります。

進化の図解

diagram (will load when visible)

UNIX とその子孫

1969 年に AT&T ベル研で UNIX が誕生しました。Multics の複雑さを削ぎ落とし、「小さなツールをパイプで繋ぐ」哲学を持ち込んだのが特徴です。UNIX はソースコード付きで大学に配られ、BSD(カリフォルニア大学バークレー校)系と System V(AT&T)系に分かれて発展しました。

1991 年、Linus Torvalds が UNIX クローンの Linux カーネル を公開し、GNU プロジェクトのユーザーランドと組み合わせて GNU/Linux として爆発的に普及しました。macOS も内部は BSD ベース、Android は Linux ベースで、現在の主要 OS のほとんどが UNIX 家系に属します。

年代できごと
1956GM-NAA I/O が世界初の OS とされる
1964IBM OS/360 でバッチ処理確立
1969UNIX 開発開始
1985Windows 1.0 リリース
1991Linux カーネル v0.01 公開
2001macOS X リリース(BSD 系へ移行)
2008Android 1.0 リリース

具体例

タイムシェアリングがなぜ革命的だったかは、エディタで文章を書く動作を考えると分かります。

プレーンテキスト

キー入力 → カーネル → エディタ → 画面更新 → 次のキー入力

バッチ処理時代は「1 行入力するたびにジョブを投入」する必要があり、文章を 1 つ書くのに 1 日かかりました。タイムシェアリングが入ると、人間がキーを打つ間にも CPU は他人のジョブを進められ、利用者は 自分専用 に機械を使っている感覚を得られました。

トレードオフ

  • マルチタスクは便利ですが コンテキストスイッチ のコストを払います。スイッチ回数が増えるほどスループットは下がります
  • マルチユーザーは資源共有を可能にしますが、アクセス制御 の仕組み(パーミッション・特権分離)が必須になり、設計の複雑さが跳ね上がります
  • 「リアルタイム性」と「公平性」はトレードオフで、組込み RTOS は遅延の上限を保証する代わりに汎用性を捨てています

よくある誤解

  • 「Windows と Linux は別系統」は半分正解で、両者ともマルチタスク・マルチユーザー設計を引き継いでおり、概念は共通です
  • 「クラウド時代に OS は不要」は誤りで、コンテナやサーバーレスの中にも Linux カーネルが必ず存在します

やってみよう

uptime を実行して、自分のマシンが何日連続稼働しているかを見てください。次に who で現在ログインしているユーザー一覧を見ると、マルチユーザー OS の実体を体感できます。

よくある質問

Q. このトピックは実務でどう役立ちますか?

A. DB のクエリ最適化、API 設計、データ構造の選択など、設計判断の根拠になります。表面的にライブラリを使うだけでなく「なぜそれが速いのか」を理解できると、性能問題を未然に防げます。コーディング面接でも頻出のテーマです。

Q. 計算量はどう求めれば良いですか?

A. ループのネストごとに掛け算する、再帰なら漸化式から解く、というのが基本です。Big-O 表記は定数倍と低次の項を無視するため、n の指数(n²、n log n など)に注目してください。最悪・平均・最良の 3 つを意識すると説得力が増します。

Q. 覚えるべき定番アルゴリズムは何ですか?

A. 二分探索、クイックソート/マージソート、BFS/DFS、ダイクストラ、DP の基本問題(フィボナッチ・ナップサック)が必修です。これらを「白紙から書ける」状態にすると、応用問題が一気に解けるようになります。

次のレッスン

次は カーネルとユーザーランド で、OSの歴史(バッチ→マルチタスク→マルチユーザー) を学びます。

事前確認 — 進む前に次の 3 つができることを確認しましょう。

  1. OSの歴史 の要点を自分の言葉で説明できる
  2. このレッスンの最小コード (または操作手順) を見ずに書ける
  3. 練習問題やクイズで間違えた箇所を読み直して理解した

理解度チェック (30 秒)

Q. OSの歴史 とは何か、1 文で説明してください。

この章のポイント

A. 本文の「このレッスンで分かること」または冒頭の説明文を見直し、自分の言葉で要約できれば OK。詰まったら本レッスンの最初の H2 セクションを読み返してみましょう。

関連レッスン