【しすてむこーる】

システムコール とは?

最終更新:
💡 アプリが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)という直訳通りの名前。略して「シスコール」と呼ぶこともある
← 用語集にもどる