OS とは
OS(Operating System)は、ハードウェアとアプリケーションの間に立ち、リソースを管理するソフトウェアです。代表例は Windows, macOS, Linux です。
OS の主要機能
プロセス管理
複数のプログラムを同時実行(マルチタスク)するために、CPU 時間をプロセスに割り当てます。
プロセス A: 実行 → 待機 → 実行 ...
プロセス B: 実行 → 待機 → 実行 ...
スケジューリングアルゴリズムの例:
- ラウンドロビン:各プロセスに均等な時間を割り当てる
- 優先度ベース:優先度の高いプロセスを先に実行
メモリ管理
各プロセスに独立したメモリ空間を提供します。
- 仮想メモリ:物理メモリより大きなアドレス空間をプロセスに提供
- ページング:メモリを固定サイズ(ページ)に分割して管理
- スワップ:使われていないページをディスクに退避
ファイルシステム
ストレージ上のデータをファイルとディレクトリの階層で管理します。
| OS | ファイルシステム |
|---|---|
| Windows | NTFS, FAT32, exFAT |
| macOS | APFS, HFS+ |
| Linux | ext4, XFS, Btrfs |
デバイス管理
ハードウェアとのやり取りをデバイスドライバ経由で抽象化します。アプリケーションはハードウェアの詳細を知らなくてよくなります。
システムコール
アプリケーションは OS の機能をシステムコール(syscall)を通じて利用します。
// ファイルを開く(C言語の例)
int fd = open("/etc/hosts", O_RDONLY);
主なシステムコール:
read/write:ファイル読み書きfork/exec:プロセス生成・実行socket/connect:ネットワーク通信malloc/free( libc 経由):メモリ確保・解放
カーネルとユーザ空間
OS はカーネル空間とユーザ空間に分離されています。
┌─────────────────────────────┐
│ ユーザ空間 │ アプリケーション
│ アプリA アプリB アプリC │
├─────────────────────────────┤
│ カーネル空間 │ OS の中核
│ プロセス管理 / メモリ管理 │
│ ファイルシステム / ネットワーク │
├─────────────────────────────┤
│ ハードウェア │ CPU / RAM / ディスク
└─────────────────────────────┘
初心者が混同しやすいポイント
OSを学ぶときは、アプリケーションとOSの責務を分けると理解しやすくなります。
| できごと | アプリケーションの役割 | OSの役割 |
|---|---|---|
| ファイルを読む | 「このファイルを読みたい」と要求する | 権限確認、ディスクアクセス、結果返却 |
| 通信する | ソケットを開いてデータを送る | ネットワークデバイス、TCP/IPスタックを扱う |
| メモリを使う | 必要な領域を要求する | 仮想メモリを割り当て、保護する |
| 複数処理を動かす | プロセスやスレッドを作る | CPU時間を配分し、状態を管理する |
「アプリが直接ハードウェアを触っている」のではなく、OSが安全に仲介していると捉えると、権限エラーやリソース不足の意味が見えてきます。
中級者向け:障害調査でOSを見る
本番障害やローカル開発の詰まりでは、OSの観点が役立ちます。
- CPUが高い: どのプロセスがCPU時間を使っているか
- メモリが足りない: スワップが発生していないか
- ファイルが読めない: パス、所有者、パーミッションは正しいか
- ポートが使えない: すでに別プロセスがListenしていないか
- プロセスが落ちる: 終了コード、OOM、シグナルを確認する
Linuxなら top, ps, df, free, lsof, journalctl などが入口になります。コマンドを暗記するより、「プロセス・メモリ・ファイル・ネットワークのどれを見たいのか」を先に決めましょう。
まとめ
- OS はプロセス・メモリ・ファイル・デバイスを管理する
- プロセスはスケジューリングにより CPU を交代で使う
- アプリケーションはシステムコールを通じて OS 機能を利用する
- 中級者はOSのメトリクスを使って、性能問題や権限問題を切り分ける