システムコール

ユーザー空間からカーネル機能を呼び出す

システムコールとは

システムコール(syscall)は、ユーザー空間のプログラムがカーネルの機能を利用するためのインターフェースです。 ファイル操作、プロセス生成、ネットワーク通信など、ハードウェアリソースへのアクセスは すべてシステムコールを通じて行われます。

システムコールの流れ

  1. 1
    アプリケーションがライブラリ関数を呼び出し

    例: fopen() → glibc

  2. 2
    ライブラリがシステムコールを発行

    例: open() syscall

  3. 3
    CPUがカーネルモードに遷移

    ソフトウェア割り込み(syscall命令)

  4. 4
    カーネルが処理を実行

    ファイルオープン処理など

  5. 5
    ユーザーモードに復帰、結果を返す

    ファイルディスクリプタ or エラー

主要なシステムコール

カテゴリシステムコール説明
ファイルopenファイルを開く
read/write読み書き
closeファイルを閉じる
statファイル情報取得
プロセスforkプロセス複製
execプログラム実行
exitプロセス終了
wait子プロセス待機
メモリmmapメモリマッピング
brkヒープ拡張
munmapマッピング解除
ネットワークsocketソケット作成
connect/accept接続

straceによるシステムコール追跡

straceはプログラムが発行するシステムコールを追跡するツール。 デバッグやパフォーマンス分析に非常に有用です。

1# 基本的な使い方
2strace ls
3
4# プロセスにアタッチ
5strace -p <PID>
6
7# 特定のシステムコールのみ
8strace -e open,read,write ls
9
10# サマリー表示
11strace -c ls
12
13# 出力例
14# % time seconds usecs/call calls errors syscall
15# ------ ----------- ----------- --------- --------- ----------------
16# 25.00 0.000025 2 10 read
17# 20.00 0.000020 1 15 write
18# ...
19
20# タイムスタンプ付き
21strace -t ls
22
23# ファイルに出力
24strace -o trace.log ls

ユーザーモード vs カーネルモード

ユーザーモード(Ring 3)

  • • 制限された権限
  • • 直接ハードウェアアクセス不可
  • • アプリケーションが動作
  • • クラッシュしても他に影響少

カーネルモード(Ring 0)

  • • 全権限
  • • ハードウェア直接アクセス
  • • カーネルコードが動作
  • • 不具合はシステム全体に影響

SRE/インフラ観点

パフォーマンス分析

  • strace -cでボトルネック特定
  • • 過剰なsyscallはオーバーヘッドに
  • • I/O待ちの可視化

セキュリティ

  • • seccompでsyscall制限(コンテナセキュリティ)
  • • auditdでsyscall監査