3. システムコール

巨大なコンサート会場にいると想像してください。一般観客エリアから特別なバックステージへ移動するには、ただ歩いて行けるわけではありません。特定の警備されたドアを通過するための特別なパスが必要です。コンピューティングの世界では、システムコールがその特別なパスに相当します。

システムコールとは?

システムコール(syscalls と略されることが多い)は、ユーザー空間のプロセスがカーネルに直接サービスを要求するための手段を提供します。カーネルは、システムコール API を通じて一連のサービスを公開しています。これらのサービスは、ファイルの読み書き、メモリ管理、ネットワーク接続の処理などの操作に不可欠です。利用可能なシステムコールの数は固定されており、任意に新しいものを追加することはできません。システムは、各システムコールが一意の ID で登録されているsyscall table(システムコールテーブル)を維持しています。

Linux におけるシステムコールの仕組み

lsのようなプログラムを実行するとき、その中のコードがシステムコール linuxコマンドを直接実行するわけではありません。代わりに、ラッパーとして機能するライブラリ関数を使用します。このラッパー関数は必要なパラメータを設定し、ソフトウェア割り込み、つまり「トラップ」を発生させます。

このトラップは、プロセッサに特権のないユーザーモードから特権のあるカーネルモードへ切り替えるようシグナルを送ります。カーネルモードに入ると、システムコールハンドラが処理を引き継ぎます。ハンドラは一意の ID を使用してsyscall table内で要求された関数を検索し、それを実行します。例えば、ファイルのステータスを照会するために使用されるstat()システムコールは、このように見つけられて実行されます。カーネルがタスクを完了した後、コンテキストをユーザーモードに戻し、成功またはエラーを示すステータスコードをプロセスに返します。

ログインして学習進捗を保存

サインイン

演習

練習あるのみです!システムコールの内部動作は複雑ですが、ユーザー空間プログラムがカーネルとどのように対話するかを理解することは基本です。この対話を把握する最良の方法は、これらの基本的な操作を実行するコマンドで練習することです。ファイルシステムとのやり取り(システムコールに大きく依存しています)を強化するための実践的なラボを次に示します。

  1. Linux でファイルシステムを操作する - lscdpwdなどの必須コマンドを練習して Linux ファイルシステム内を移動および検査し、カーネルのファイルシステムサービスに直接関与します。
  2. Linux でファイルとディレクトリを管理する - mkdirrmcpmvなどのコマンドを使用してファイルとディレクトリの作成、削除、コピー、移動を学習します。これらはすべて、アクションを実行するためにシステムコールを利用します。
  3. Linux でファイルとコマンドを見つける - findwhereiswhichを使用してファイルとコマンドを見つけるテクニックを習得し、ユーザーコマンドがカーネルサービスを活用してファイルシステムと対話する方法をさらに示します。

これらのラボは、実際のシナリオでファイルシステム操作の概念を適用し、暗黙的にシステムコールに依存する基本的な Linux 操作に対する自信を構築するのに役立ちます。

クイズ

ユーザーモードからカーネルモードに切り替えるために使用されるものは何ですか?2 語で英語で答えてください。