OS がアプリとハードウェアの間でどう動いているか、4つの層とシステムコールの流れで可視化します。
OS(Operating System)は、アプリケーションとハードウェアの間に立つ仲介役のソフトウェアです。ハードウェアの細かい違いをアプリから隠したり、複数のアプリが同時にCPUやメモリを使えるよう調整したりします。
身近な例えだと、OSは「マンションの管理人」に似ています。住人(アプリ)が共用設備(ハードウェア)を直接いじることはできず、必ず管理人を通してお願いを伝える仕組みです。これにより、1人の住人が他人の部屋に勝手に入ったり、設備を壊したりするのを防いでいます。
上のツールで「ファイルを開く」シナリオを ▶ 自動再生すると、アプリがOSを介してハードウェアにアクセスする一連の流れを動きで確認できます。
OS(特にカーネル)には5つの基本的な役割があります。いずれも基本となる重要な機能です。
・プロセス管理:プログラムを実行単位(プロセス)として生成・終了・切り替え。複数アプリの同時実行を実現
・メモリ管理:各プロセスにメモリを割り当て、空いたら回収。仮想メモリでディスクを延長として使う
・ファイル管理:ディスク上のデータをファイル・ディレクトリ構造で扱う。アクセス権限の管理もここ
・入出力管理:キーボード・ディスプレイ・ネットワークなどとのやり取りをドライバ経由で制御
・ユーザー管理:誰がログイン中か、どのファイルにアクセスできるかを管理(マルチユーザー環境の権限制御)
上のツールで「プログラムを起動」シナリオのステップ3〜4を見ると、プロセス管理とメモリ管理が連携して新しいプログラムが立ち上がる様子が確認できます。
OS は内部的に大きく 「カーネル」と「シェル」の2つに分かれます。
・カーネル:OSの中核。プロセス・メモリ・ファイル・入出力をすべて管理する。特権モードで動き、ハードウェアを直接操作できる
・シェル:ユーザーとカーネルの間の窓口。ユーザーが入力したコマンドや GUI 操作を、カーネルへの依頼(システムコール)に変換する
シェルにはCLI シェル(bash / zsh / PowerShell など、文字でやり取り)とGUI シェル(Windows Explorer / Finder など、画面で操作)があります。どちらもカーネルの機能を呼び出す「窓口」という点では同じです。
アプリはハードウェアを直接操作できません。これは安全性のため、わざと制限されています。代わりにシステムコールという公式な「お願い窓口」を経由してカーネルに依頼します。
代表的なシステムコール(Linux 系)の例:
・open() / read() / write():ファイルを開く・読む・書く
・fork() / exec():新しいプロセスを作成・起動
・mmap():メモリ領域の確保
・socket() / connect():ネットワーク通信
システムコールが発行されると、CPU はユーザーモードからカーネルモードへ切り替わる(コンテキストスイッチ)。処理が終わるとまたユーザーモードに戻ります。この切り替えにはコストがかかるため、頻繁に呼ぶと性能が落ちます。
CPU には大きく2つの動作モードがあります。OS はこれを使い分けて「アプリの暴走がシステム全体に影響しないように」守っています。
・ユーザーモード:制限つき。ハードウェアに直接アクセスできない。アプリやシェルはここで動く
・カーネルモード(特権モード):全権限。ハードウェアを直接操作できる。カーネルだけがここで動ける
もしアプリが直接ハードウェアを操作できたら、バグや悪意のあるアプリが他のアプリのメモリを覗いたり、ディスクを破壊したりできてしまいます。このモード分離が、現代のOSの安全性の根幹です。
| カテゴリ | 代表例 | 特徴 | 主な用途 |
|---|---|---|---|
| 汎用OS | Windows Windows 10 / Windows 11 / Windows Server | GUI中心 | オフィスPC、家庭用PC、ゲームPC |
| 汎用OS | Linux Ubuntu / CentOS / Debian / Red Hat | オープンソース | Webサーバー、組込み機器、スパコン、Android のベース |
| 汎用OS | macOS macOS Sonoma / macOS Ventura | UNIX系(BSDベース) | Apple 製 Mac 専用、開発者・デザイナーに人気 |
| モバイルOS | iOS / Android iOS / Android / iPadOS | タッチ操作前提 | スマートフォン、タブレット |
| リアルタイムOS | リアルタイムOS(RTOS) VxWorks / TRON / μITRON / FreeRTOS | 応答時間を保証 | 車載システム、ロケット制御、医療機器、家電 |
OS は用途によって大きく 「汎用OS」と「リアルタイムOS(RTOS)」に分かれます。
・汎用OS:多用途。スループット(単位時間あたりの処理量)を重視。Windows / Linux / macOS が代表
・リアルタイムOS:応答時間を保証する。車のエアバッグ、医療機器、ロケット制御など「遅れたら大変なこと」になる用途で使う
「Linux はオープンソース」「リアルタイムOSは応答時間保証」など、特徴と種類を結びつけて整理しておくと分かりやすくなります。Android のベースが Linux カーネルである点も押さえておきましょう。
実際のシステムでは OS とアプリの間にミドルウェアという中間ソフトが入ることがよくあります。
ミドルウェアの代表例:
・データベース管理システム(DBMS):MySQL / PostgreSQL / Oracle
・Webサーバー:Apache / nginx
・アプリケーションサーバー:Tomcat / WebLogic
これらは多くのアプリが共通して必要とする機能(データ永続化・HTTP 通信など)を提供することで、各アプリが同じ機能をゼロから作らずに済むようにしています。OS の機能ではないがアプリでもない、中間的な存在と覚えておきましょう。
もし OS がなかったらどうなるか、想像してみましょう。複数のアプリが好き勝手に CPU やメモリを使おうとすると、取り合いが起きてシステム全体が壊れます。OS はこれを防ぐ「調停役」として生まれた仕組みです。
OS が資源管理(=CPU・メモリ・ディスクなどを誰にどれだけ使わせるかを決める仕事)を引き受けることで、次の3つが実現します。
・公平性:どのアプリも CPU を独占せず、順番に使える
・安全性:あるアプリが他のアプリのメモリを勝手に読み書きできない
・利便性:アプリ開発者がハードウェアの細かい仕様を知らなくてよい
身近な例で考えると、複数の乗客が同じバスに乗るイメージです。乗客(アプリ)が皆バラバラに運転しようとしたら大混乱ですが、運転手(OS)が1人乗って全員を安全に目的地まで運びます。OS の存在意義は「みんなが同じ資源を安全に共有できるようにすること」と言えます。