「システムコール」の版間の差分
提供: セキュリティ
(ページの作成:「<!-- vim: filetype=mediawiki --> システムコール (System Call) とは、 OS の カーネル の機能を呼び出すための仕組みです。 '''...」) |
|||
(同じ利用者による、間の1版が非表示) | |||
行1: | 行1: | ||
− | |||
− | |||
− | |||
[[システムコール]] (System Call) とは、 [[OS]] の [[カーネル]] の機能を呼び出すための仕組みです。 | [[システムコール]] (System Call) とは、 [[OS]] の [[カーネル]] の機能を呼び出すための仕組みです。 | ||
行10: | 行7: | ||
== 概要 == | == 概要 == | ||
− | |||
[[システムコール]] は、[[OS]] ([[カーネル]]) が一般のプログラムに提供する機能 や [[OS]] ([[カーネル]]) が提供する機能を呼び出すための API のことをいいます。 | [[システムコール]] は、[[OS]] ([[カーネル]]) が一般のプログラムに提供する機能 や [[OS]] ([[カーネル]]) が提供する機能を呼び出すための API のことをいいます。 | ||
プログラムは、入出力装置や物理メモリを直接操作することができません。そうしたプログラムの変わりに、[[カーネル]] が処理を実行します。 | プログラムは、入出力装置や物理メモリを直接操作することができません。そうしたプログラムの変わりに、[[カーネル]] が処理を実行します。 | ||
− | |||
ライブラリ関数と[[システムコール]]がありますが、 fopen などの関数は、内部的に [[システムコール]] を呼び出しています。 | ライブラリ関数と[[システムコール]]がありますが、 fopen などの関数は、内部的に [[システムコール]] を呼び出しています。 | ||
ファイル I/O 系のライブラリ関数は、バッファリングの機能などを持っているため、直接 [[システムコール]] を呼び出すよりもパフォーマンスが良いかもしれません。 | ファイル I/O 系のライブラリ関数は、バッファリングの機能などを持っているため、直接 [[システムコール]] を呼び出すよりもパフォーマンスが良いかもしれません。 | ||
− | |||
− | |||
== UNIX のシステムコール == | == UNIX のシステムコール == | ||
− | |||
* fopen / fread / fgets などの関数は、ライブラリ関数です。 | * fopen / fread / fgets などの関数は、ライブラリ関数です。 | ||
* open / read / write などの関数は、[[システムコール]] です。 | * open / read / write などの関数は、[[システムコール]] です。 | ||
− | |||
== ライブラリ関数を利用する利点 == | == ライブラリ関数を利用する利点 == | ||
− | |||
* 移植性(ポータビリティ)の向上 | * 移植性(ポータビリティ)の向上 | ||
** [[システムコール]] は、[[OS]] によって変わってきます。 | ** [[システムコール]] は、[[OS]] によって変わってきます。 | ||
行31: | 行21: | ||
* 開発効率 | * 開発効率 | ||
** ライブラリ関数が[[システムコール]]をラップしてくれているため、短いコードで簡単に利用できる。 | ** ライブラリ関数が[[システムコール]]をラップしてくれているため、短いコードで簡単に利用できる。 | ||
− | + | === システムコールの制限 === | |
+ | * [[Linuxカーネル]]には、[[seccomp]] (secure computing mode) と呼ばれる [[サンドボックス]] があります。 | ||
+ | == システムコールのトレース == | ||
+ | [[システムコール]]は、トレースできます。実行中のプロセスの情報を取得したり、記録することができます。 | ||
+ | ;[[FreeBSD]]:ktrace | ||
+ | ;[[Linux]]:[[strace]], [[auditd]] | ||
== 関連項目 == | == 関連項目 == | ||
− | + | * [[auditd]] | |
* [[カーネル]] | * [[カーネル]] | ||
+ | * [[システムモニタリングツール]] | ||
+ | <!-- vim: filetype=mediawiki | ||
+ | --> |
2015年12月19日 (土) 21:49時点における最新版
システムコール (System Call) とは、 OS の カーネル の機能を呼び出すための仕組みです。
読み方
- システムコール
- しすてむ こーる
- system call
- しすてむ こーる
概要
システムコール は、OS (カーネル) が一般のプログラムに提供する機能 や OS (カーネル) が提供する機能を呼び出すための API のことをいいます。
プログラムは、入出力装置や物理メモリを直接操作することができません。そうしたプログラムの変わりに、カーネル が処理を実行します。 ライブラリ関数とシステムコールがありますが、 fopen などの関数は、内部的に システムコール を呼び出しています。 ファイル I/O 系のライブラリ関数は、バッファリングの機能などを持っているため、直接 システムコール を呼び出すよりもパフォーマンスが良いかもしれません。
UNIX のシステムコール
- fopen / fread / fgets などの関数は、ライブラリ関数です。
- open / read / write などの関数は、システムコール です。
ライブラリ関数を利用する利点
- 移植性(ポータビリティ)の向上
- システムコール は、OS によって変わってきます。
- バッファリングによるパフォーマンスアップ
- 開発効率
- ライブラリ関数がシステムコールをラップしてくれているため、短いコードで簡単に利用できる。
システムコールの制限
システムコールのトレース
システムコールは、トレースできます。実行中のプロセスの情報を取得したり、記録することができます。