カーネルのルーチンを呼び出すための機能または関数。スーパーバイザ・コール(SVC)とも呼ぶ。アプリケーション・プログラムは,システム・コールを介してカーネルを利用する。カーネルは,アプリケーション・プログラム(ユーザー・プログラム)と異なり,CPUの動作モードや,メモリー内の常駐エリアなどが異なるため,CPUのソフトウエア割り込み機能を使うことで,呼び出す仕組みになっている。

 CPUは,割り込み発生命令を実行すると,あらかじめ登録された割り込み処理ルーチンを実行する。どのルーチンに分岐するかは,番号で指定する。米Intel社のx86系CPUの場合は,「int 番号」という命令で,その番号に応じた割り込み処理を実行することができるが,Linuxのシステム・コールの場合は「int 80h」を使う。

 システム・コールの種類は,int 80h命令を実行する前に,CPU内部のレジスタに値を設定しておくことで指定する。例えば,ユーザーがプログラム中に「write( )」というシステム・コールを記述すると,コンパイラがこれを,「eaxレジスタに4を入れてint 80hを実行する」というアセンブラに変換する。なお,システム・コールの種類と番号の関係は,include/asm-i386/unistd.hファイルに定義されている。

 システム・コールは通常,Linuxディストリビューションが提供するライブラリ内の関数から呼んでいるため,一般的なアプリケーション・プログラムから直接呼び出すことはあまりない。

■変更履歴
カーネル内のすべての関数がシステム・コールのように誤解される表現だったため,「カーネル内の関数」を「関数」に修正しました。 [2009/12/21 19:58]