【しすてむこーる】

システムコール とは?

💡 アプリがOSに「お願い」を出す公式窓口
📌 このページのポイント
ユーザー空間(ユーザーモード) アプリケーション read() write() open() fork() exec() close() システムコールインターフェース(境界) 呼び出し 処理委託 結果返却 カーネル空間(カーネルモード) プロセス管理 メモリ管理 ファイル管理 デバイス 管理 ハードウェア(CPU・メモリ・ディスク)
システムコールの仕組み
ひよこ ひよこ

システムコールって何?プログラムからOSを呼ぶってどういうこと?

ペンギン先生 ペンギン先生

例えばPythonで「ファイルを読む」コードを書いたとき、Pythonが直接ハードウェアのディスクを操作するわけじゃないんだ。OSの「ファイルを読んでくれ」という機能(システムコール)を呼んで、OSにやってもらうんだよ。

ひよこ ひよこ

なんで直接ハードウェアを操作しちゃダメなの?

ペンギン先生 ペンギン先生

複数のアプリが好き勝手にハードウェアを操作したらカオスになるから、OSが管理してるんだ。OSというゲートキーパーを通すことで、権限チェックやリソース管理ができる。

ひよこ ひよこ

ユーザーモードとカーネルモードって何?

ペンギン先生 ペンギン先生

CPUの動作モードで、ユーザーモードは「制限ありの安全な状態」でアプリが動く場所。カーネルモードは「何でもできる特権モード」でOSが動く場所。システムコールを呼ぶと、ユーザーモードからカーネルモードへ切り替わって処理が行われ、終わったら戻ってくる。

ひよこ ひよこ

システムコールって遅いの?

ペンギン先生 ペンギン先生

モード切り替えが必要なのでオーバーヘッドはあるんだけど、最近は「vDSO(仮想動的共有オブジェクト)」という仕組みがあって、時刻取得のような一部のシステムコールはカーネルモードへの切り替えなしに実行できるようになってる。gettimeofdayがvDSOで高速化されてることが多い。逆に言えば、プログラムが想定外に遅いとき「過剰なシステムコール」が原因のことがあって、straceで調べると思わぬ犯人が見つかることがあるんだよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「システムコール」って出てきたら「アプリがOSに処理を頼む公式な方法だな」と思えばだいたいOK!
📖 おまけ:英語の意味
「System Call」 = システム呼び出し
💬 システム(OS)を呼び出す(Call)という直訳通りの名前。略して「シスコール」と呼ぶこともある
← 用語集にもどる