コンピューターサイエンス:アルゴリズム / OS / ネットワーク / DB
OSの歴史(バッチ→マルチタスク→マルチユーザー)
OSの歴史(バッチ→マルチタスク→マルチユーザー)
このレッスンで分かること
- OS は「1 つずつ順番に処理」する バッチ処理 から始まり、マルチタスク、マルチユーザー、ネットワーク OS へと進化してきました
- 進化の動機は常に 資源を遊ばせず、人を待たせない という効率の追求でした
- 現代のスマホ・クラウドの裏にあるのは、1960 年代に確立された設計思想の延長線です
OSの歴史 とは
OSの歴史(バッチ→マルチタスク→マルチユーザー)。本レッスンでは、OSの歴史 の基本から実際の使いどころまでを整理し、現場で迷わず使える形に落とし込みます。
バッチ処理から対話型へ
1950 年代の初期コンピューターは、研究者がカード束やテープを順に渡し、計算機は受け取った順に 1 ジョブずつ 実行していました。これがバッチ処理です。CPU は人間がカードを差し替える間ずっと遊んでおり、機械の利用率はわずか数 % でした。
1960 年代初頭、MIT の CTSS(Compatible Time-Sharing System、1961 年稼働)が タイムシェアリング の発想(複数の利用者が同じ機械を細かい時間で交代利用する)を世界で初めて実証しました。1964 年には IBM の OS/360 が登場し、複数ジョブをキューに溜めて自動的に流すバッチ運用を確立します。タイムシェアリングの思想はその後 Multics へと発展し、人間とコンピューターが対話できる時代に入ります。
進化の図解
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 家系に属します。
| 年代 | できごと |
|---|---|
| 1956 | GM-NAA I/O が世界初の OS とされる |
| 1964 | IBM OS/360 でバッチ処理確立 |
| 1969 | UNIX 開発開始 |
| 1985 | Windows 1.0 リリース |
| 1991 | Linux カーネル v0.01 公開 |
| 2001 | macOS X リリース(BSD 系へ移行) |
| 2008 | Android 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 つができることを確認しましょう。
- OSの歴史 の要点を自分の言葉で説明できる
- このレッスンの最小コード (または操作手順) を見ずに書ける
- 練習問題やクイズで間違えた箇所を読み直して理解した
理解度チェック (30 秒)
Q. OSの歴史 とは何か、1 文で説明してください。
A. 本文の「このレッスンで分かること」または冒頭の説明文を見直し、自分の言葉で要約できれば OK。詰まったら本レッスンの最初の H2 セクションを読み返してみましょう。
関連レッスン