コース一覧
OS入門:プロセス・メモリ・ファイルシステム
プロセスとは

OS入門:プロセス・メモリ・ファイルシステム

OSがCPU・メモリ・ストレージをどのように管理しているかを、プロセス、スレッド、仮想メモリ、ファイルシステム、同期と並行性から体系的に学びます。アプリケーションの裏側で何が起きているかを説明できるようになります。

1
OS とは
0. コンピューターとOSの役割15分
1. OSの歴史(バッチ→マルチタスク→マルチユーザー)15分
2. カーネルとユーザーランド15分
3. システムコールの仕組み15分
4. Linux / macOS / Windows のアーキ比較15分
2
プロセスとスレッド
0. プロセスとは15分
1. スレッドとプロセスの違い15分
2. コンテキストスイッチ15分
3. スケジューラとアルゴリズム15分
4. プロセス間通信(IPC)15分
3
メモリ管理
0. メモリ階層(レジスタ→キャッシュ→RAM→ディスク)15分
1. 仮想メモリ15分
2. ページングとスワップ15分
3. mmap とメモリマップトファイル15分
4. ガベージコレクション概要15分
4
ファイルシステム
0. ファイルシステムとは15分
1. i-node とディレクトリ15分
2. ext4 / APFS / NTFS の違い15分
3. ジャーナリングと耐障害性15分
4. パーミッションと所有者15分
5
同期と並行性
0. レースコンディション15分
1. Mutex と Semaphore15分
2. デッドロック15分
3. 非同期と並行15分
4. イベントループと epoll15分

OS入門:プロセス・メモリ・ファイルシステム

01コンピューターとOSの役割
02OSの歴史(バッチ→マルチタスク→マルチユーザー)
03カーネルとユーザーランド
04システムコールの仕組み
05Linux / macOS / Windows のアーキ比較
06プロセスとは
07スレッドとプロセスの違い
08コンテキストスイッチ
09スケジューラとアルゴリズム
10プロセス間通信(IPC)
11メモリ階層(レジスタ→キャッシュ→RAM→ディスク)
12仮想メモリ
13ページングとスワップ
14mmap とメモリマップトファイル
15ガベージコレクション概要
16ファイルシステムとは
17i-node とディレクトリ
18ext4 / APFS / NTFS の違い
19ジャーナリングと耐障害性
20パーミッションと所有者
21レースコンディション
22Mutex と Semaphore
23デッドロック
24非同期と並行
25イベントループと epoll

OS入門:プロセス・メモリ・ファイルシステム

プロセスとは

同じプログラムを 2 つ起動しても、変数がぶつからない

ターミナルを 2 枚開いて、どちらでも同じ Python スクリプトを走らせたとします。中で count = 0 としているのに、片方で増やした値がもう片方に漏れることはありません。同じファイル、同じ変数名、同じ機械なのにです。

理由は、起動するたびに別の家が建っているからです。ディスクに置いてあるプログラムは設計図にすぎず、それをメモリに読み込んで実行を始めた瞬間に、1 軒ぶんの実体ができます。これがプロセスです。設計図は 1 枚でも、家は何軒でも建ちます。そして家と家の間には壁があり、隣の部屋を覗くことはできません。

カーネルは 1 軒につき 1 枚の台帳を持つ

家を建てた以上、管理台帳が要ります。カーネルはプロセスごとに 1 枚の記録を持ち、そこに住所と持ち物を書いています。番地に相当するのが PID という一意な整数で、誰が建てたかを示す親の PID も並んで載ります。

台帳に載るのは番号だけではありません。メモリのどこからどこまでを使ってよいかという割り当て、開いているファイルやソケットの一覧、いま走っているのか入出力を待っているのか終わったのかという状態、そして順番待ちでの優先度です。プロセスを止めたり、再開したり、後片付けしたりできるのは、この 1 枚があるからです。

状態が複数あるのは、走れる状態と走っている状態が違うからです。順番待ちの列に並んでいるだけで走っていないもの、ディスクの返事を待っていて呼ばれても走れないもの、実際に CPU を握っているもの。この区別があるので、入出力を待っている相手を順番から外して、走れる相手だけを呼ぶことができます。

終わった直後のプロセスが一瞬だけ残ることがあります。親が結果を受け取るまで台帳を捨てられないためで、ps で Z と出るのがこの状態です。親が受け取り忘れると台帳が溜まり続けます。

建ててから、中身を入れ替える

新しいプログラムを動かすとき、POSIX 系の OS は更地に家を建てません。いま動いている自分をそっくり複製して、複製したほうの中身を入れ替えます。

c

pid_t pid = fork();          // 自分と同じ家をもう 1 軒
if (pid == 0) {
    execve("/bin/ls", (char *[]){"ls", NULL}, environ);  // 中身を ls に
} else {
    int status;
    waitpid(pid, &status, 0);   // 子が終わるのを待つ
}

複製と聞くとメモリを丸ごとコピーしているように思えますが、実際にコピーされるのは書き換えが起きたところだけです。だから複製そのものは見た目ほど高くつきません。

この親子関係は機械の中で 1 本の木になっています。手元で確かめてみてください。

ターミナル

ps -ef | head

PPID の列をたどると、ps の親はシェル、シェルの親はログインを受け付けたサービス、と遡っていき、最後は PID 1 に着きます。起動中のすべてのプロセスが、この 1 軒目の子孫です。

このレッスンに出てくる用語

意味があいまいなまま進んだ語は、ここから読み直せます。

  • 変数データに名前をつけて参照する仕組み
  • ターミナルコマンドを入力する黒い画面
  • 設計何をどう作るかを決める前工程
  • メモリプログラムとデータを一時保持する高速領域
  • プロセス実行中のプログラムのこと。
  • カーネルOS の中核。資源管理を担う
  • 入出力input()はユーザーからの入力を文字列として受け取る関数。
  • シェルコマンドを解釈して実行するプログラム
生田 陸人
監修生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
編集 ゆめさく編集部·公開 2026/05/27·更新 2026/08/26

関連レッスン

  • スレッドとプロセスの違い

    同じプロセス内のメモリを共有する軽量な実行単位スレッドと、強い分離を持つプロセスの違いを、並列処理の利点とデータ競合の危険の両面から整理します。

  • コンテキストスイッチ

    CPU が実行中のプロセスを保存して別のものへ切替えるコンテキストスイッチの仕組みと、頻発がシステム性能を蝕む理由を、現場で役立つ形で整理します。

  • スケジューラとアルゴリズム

    次に走らせるプロセスを選ぶスケジューラの役割と、ラウンドロビンや優先度などの代表アルゴリズム、Linux の CFS や EEVDF までを解説します。

  • プロセス間通信(IPC)

    別々のプロセスがデータをやり取りするプロセス間通信を、パイプ・シグナル・共有メモリ・ソケット・メッセージキューの五種類の特徴と使い分けで解説します。

分からないところは Tap (AI先生) に質問できます

24 時間いつでも、あなたのレベルに合わせて日本語で答えます。