システムコールとは、アプリケーションがOSのカーネルへ、ファイル・通信・プロセス・メモリなどの処理を依頼するための基本インターフェースです。Linuxではopen、read、writeなどに関係するシステムコールがあります。

アプリはSSDやネットワーク機器を好き勝手に直接操作しません。OSが用意した入口を通り、権限と引数を確認してもらいます。その入口がシステムコールです。
アプリとカーネルの間にある入口
Linux man-pagesでは、システムコールをアプリケーションとLinuxカーネルの基本インターフェースと説明しています。アプリが自分では実行できない特権的な処理を、カーネルへ依頼するために使います。
テキストエディタがmemo.txtを保存するとき、アプリのコードからライブラリやランタイムを経由し、最終的にOSへファイル操作を依頼します。OSはパス、権限、ファイル状態を確認し、ファイルシステムとドライバへ処理を進めます。

なぜアプリを制限するのか
Windowsの説明では、通常のアプリはユーザーモード、OSの中核部分はカーネルモードで動きます。ユーザーモードのプロセスは専用の仮想アドレス空間を持ち、OS用の領域や別アプリのデータを自由に変更できません。
もしすべてのアプリがカーネルと同じ権限で動けば、1つのバグがOS全体や別アプリのデータを壊す恐れがあります。システムコールの境界で引数と権限を検査することで、強い処理を限定された方法で利用できます。
| 実行領域 | 主な対象 | 権限の考え方 |
|---|---|---|
| ユーザーモード/ユーザー空間 | 一般のアプリ、ライブラリ | OS中核や別プロセスへ直接触れない |
| カーネルモード/カーネル空間 | OS中核、多くの低水準ドライバ | CPU・メモリ・機器などを管理できる |
memo.txt保存をPOSIX風の操作で見る
次は仕組みを理解するための概念的な疑似コードです。実際のテキストエディタは一時ファイルへの書き込みや置換など、より安全な保存方式を使う場合があります。またWindowsではAPIや内部名が異なります。
// POSIX風の概念例(そのまま実行する完全コードではありません)
fd = open("memo.txt", 書き込み用)
write(fd, 更新後のバイト列)
fsync(fd) // 永続化が必要な場合に同期を要求
close(fd)
| 操作 | カーネルへ依頼する内容 | 代表的な結果 |
|---|---|---|
| open | パスで対象を開き、以後の識別子を得る | ファイル記述子またはエラー |
| write | バッファのバイト列を書き込む | 書けたバイト数またはエラー |
| fsync等 | 保留中の変更を永続媒体へ同期するよう要求 | 成功またはエラー |
| close | 開いている識別子を閉じ、資源を解放する | 成功またはエラー |
API・関数・システムコールの違い
アプリのコードで呼ぶ関数が、そのままシステムコールとは限りません。ライブラリ関数が引数を整え、複数の処理を行ったあと、必要なシステムコールを呼ぶ場合があります。
| 用語 | 中心となる意味 | 例 |
|---|---|---|
| API | ソフトウェア同士が機能を利用するための公開された約束 | Java API、Win32 API、Web API |
| ライブラリ関数 | 再利用可能なコードとして提供される関数 | C標準ライブラリの関数 |
| システムコール | ユーザー空間からカーネル機能へ入る基本インターフェース | Linuxのread・writeに関係する呼び出し |
戻り値とエラーが重要
カーネルは依頼の成功・失敗と結果を返します。権限がない、対象が存在しない、容量が足りない、処理が中断された、といった理由で失敗する可能性があります。LinuxのCライブラリでは、多くのラッパー関数が失敗時に-1を返し、errnoへ理由を設定します。
アプリがエラーを無視すると、「保存できたように見えるが実際には書けていない」といった障害につながります。戻り値、書き込んだバイト数、同期処理の結果まで確認します。
バッファが呼び出し回数を減らす
システムコールは便利ですが、ユーザー空間からカーネルへ移る処理には一定の仕事があります。1文字ごとにwriteするより、バッファへまとめてから書く方が、呼び出し回数を減らせる場合があります。
ただし、まとめるほど未送信データがバッファへ残る時間も増えます。性能とデータ保護のどちらを優先するかに応じて、flushや同期のタイミングを設計します。
まとめ:システムコールとは何か
システムコールとは、制限されたアプリが、強い権限を持つOSへ安全に仕事を頼むための窓口です。memo.txtの保存を「アプリ → ライブラリ → システムコール → カーネル → 機器」と追うと、OSが必要な理由が具体的に見えます。
関連する基礎用語
- OSとは:システムコールを受けるOSとカーネルの役割を確認する
- ファイルシステムとは:パスとファイルを管理するファイルシステムへつなぐ
- デバイスドライバとは:カーネルから機器へ要求を渡すデバイスドライバへつなぐ
