システムコール
システムコールとは、プログラムがオペレーティングシステムに対して行う要求です。これにより、アプリケーションはオペレーティングシステムのAPIにある関数やコマンドにアクセスできます。
システムコールは、ハードウェアデバイスとの通信やファイルの読み書きなど、システムレベルの操作を実行します。システムコールを使うことで、開発者は関数を最初から作成する代わりに、オペレーティングシステム(OS)がサポートする、あらかじめ作成された関数を利用できます。これにより、開発が簡単になり、アプリの安定性が向上し、異なるバージョンのOS間でアプリをより「移植しやすく」できます。
システムコールの仕組み
アプリケーションは、ユーザー空間と呼ばれるメモリ内の領域で実行されます。システムコールは、カーネル空間で動作するオペレーティングシステムのカーネルにアクセスします。アプリケーションがシステムコールを行うときは、まずカーネルに許可を求める必要があります。これは割り込み要求によって行われる場合があります。割り込み要求が発生すると、現在のプロセスが一時停止し、制御がカーネルに移ります。
要求が許可されると、カーネルはファイルの作成や削除など、その要求を処理します。操作が完了すると、カーネルは出力をアプリケーションに渡します。アプリケーションは、メモリ内のカーネル空間からユーザー空間へデータを転送します。アプリケーションは、カーネルからの出力を入力として受け取ります。プログラムのソースコードでは、これはパラメーターの値や、関数内の戻り値である場合があります。入力を受け取ると、アプリケーションはプロセスを再開します。
システム日時の取得などの基本的なシステムコールには、数ナノ秒かかることがあります。ネットワークデバイスとの通信の確立など、より高度なシステムコールには数秒かかる場合があります。ボトルネックを防ぐため、ほとんどのオペレーティングシステムは、システムコールごとに個別のカーネルスレッドを開始します。最新のオペレーティングシステムはマルチスレッドに対応しており、複数のシステムコールを同時に処理できます。
知識をテストする