「システムコール」の版間の差分

提供: セキュリティ
移動: 案内検索
(ページの作成:「<!-- vim: filetype=mediawiki --> システムコール (System Call) とは、 OSカーネル の機能を呼び出すための仕組みです。 '''...」)
 
 
(同じ利用者による、間の1版が非表示)
行1: 行1:
<!--
 
vim: filetype=mediawiki
 
-->
 
 
[[システムコール]] (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 によって変わってきます。
  • バッファリングによるパフォーマンスアップ
  • 開発効率
    • ライブラリ関数がシステムコールをラップしてくれているため、短いコードで簡単に利用できる。

システムコールの制限

システムコールのトレース

システムコールは、トレースできます。実行中のプロセスの情報を取得したり、記録することができます。

FreeBSD
ktrace
Linux
strace, auditd

関連項目