← SEARCHABLE ARCHIVE
Operating System · 2026-07-13

プロセスとは何ですか?

実行中のプログラムにはどのようなリソースがありますか?

INTERACTIVE READING MODE →

本ブログ作成文は、講義を目指して製作されました。 また、作成された文章の情報も間違っている可能性がありますので、ご注意ください。

実行ファイルはディスクに保存されたコードとデータです。 この実行ファイルをオペレーティングシステムがメモリに載せ、実行に必要なリソースを付けた状態をProcess(プロセス)と呼ぶ。

つまり、プログラムはファイルであり、プロセスは実行中のプログラムのインスタンスです。

プロセスが持つもの

プロセスはコードだけを持っていません。

  • 独立した仮想アドレス空間
  • 実行コードとグローバルデータ
  • 動的に割り当てるヒープ
  • スレッドが使用するスタック
  • 開いたファイルとソケット情報
  • セキュリティ権限とプロセスID
高い住所
┌──────────────┐
│ Stack │ スレッドの関数呼び出しとローカル変数
├──────────────┤
│              │
│ Heap │ new、mallocなどの動的割り当て
├──────────────┤
│ Data/BSS │ グローバル変数、静的変数
├──────────────┤
│ Code │ 実行する命令
└──────────────┘
低い住所

実際の配置と詳細はオペレーティングシステムと実行可能ファイル形式によって異なりますが、異なる用途のメモリゾーンを持つという流れは同じです。

プロセスは互いに分離されています

プロセスAが使用するポインタは、プロセスBがそのまま取得しても同じデータにアクセスできません。 各プロセスは独自の仮想アドレス空間を持ち、カーネルがページテーブルを介して物理メモリに接続するためです。

この隔離のおかげで、ブラウザの1つが間違っていても、他のプログラムのメモリをすぐに壊すことはありません。

プロセス間で通信するには方法が必要です

メモリが分離されているため、プロセス間でデータを送受信するには、IPC(Inter-Process Communication)を使用する必要があります。

  • Pipe
  • Shared Memory
  • Socket
  • Message Queue

共有メモリは高速ですが、同時にアクセスするときに同期が必要です。 ソケットやメッセージ方式は境界がはっきりしているが、データコピーと通信コストが生じることがある。

プロセスは単に実行中のコードの1つではありません。 オペレーティングシステムがメモリとファイル、権限、1つ以上のスレッドをまとめて管理するリソースコンテナに近い。