システムコール

読み:システムコール
外語:system call 英語
品詞:名詞

システムの機能を呼び出すこと。及び、それをするための機構のこと。

目次

差異

システム、一般にはオペレーティングシステム(OS)であるが、その機能の呼び出し方はOSによって大きく違いがある。

OSに求められる機能の差や、OSの設計方針の差などが反映されるからである。

かくして、あるOS用に書かれたプログラムは、別のOSで動かすことができない(実際の理由はそれだけではないが)。

主な一覧

呼び出し方法は、出来るだけ無理がなく、簡単であるほうが望ましい。

そこでどのようなOSでも、そのCPUの種類に応じ、最も自然な方法が選択されている。

x86系でありがちなOSでは、16ビット/32ビット/64ビットの環境を問わず、ソフトウェア割り込み機能が使われている。

OS名呼び出し方法概要
MS-DOSINT 21hAHまたはAXにファンクション番号。引数はレジスター。
Windows VxDINT 20hCD20FFFFNNNN (int 20h, <ファンクション番号>, <VxD識別番号>)
Windows NTINT 2EhEAXにファンクション番号
Windows 2000
Windows XP(x86)sysenter 
Windows XP(64)syscall 
FreeBSDINT 80hEAXにファンクション番号。引数はスタック。
LinuxINT 80hEAXにファンクション番号。引数はレジスター。
sysenter

Linuxの場合、Linux 2.6からsysenterによる呼び出しにも対応した。

MS-DOS

MS-DOSは、INT 21hシステムコールと呼ばれるソフトウェア割り込みで行なわれる。

AHレジスターに機能番号、それ以外のレジスターに必要な引数(パラメーター)を入れ、INT 21hを実行する。

Windows 3.xと9x

Windows 9xの場合、アプリケーションソフトは通常、ring3で動作する。このためINT 30hでリングレベルをring0に変更し、VxD層にある機能を呼ぶことになる。後はWindows 3.xと同様である。

VxD層の機能は、INT 20hで呼ぶ。引数込みで6バイトで構成される。

CD 20 FF FF NN NN

FFFFがファンクション番号、NNNNが呼び出すVxD識別番号である。

FreeBSD

FreeBSDのx86版は、int 80hソフトウェア割り込みで行なわれる。

引数はスタックにpushし、システムコール番号をEAXレジスターに入れ、int 80hを実行する。

Linux

Linuxのx86版は、二通り方法がある。

基本はFreeBSDと同様にソフトウェア割り込みで行なわれる。但し呼び方は若干異なり、引数はレジスターに入れ、システムコール番号をEAXレジスターに入れ、int 80hを実行する。各レジスターの使われ方は、次のとおり。

  • eax ‐ システムコール番号
  • ebx ‐ システムコールの第1引数
  • ecx ‐ システムコールの第2引数
  • edx ‐ システムコールの第3引数
  • esi ‐ システムコールの第4引数
  • edi ‐ システムコールの第5引数
  • ebp ‐ システムコールの第6引数

Linuxカーネル2.6からはsysenterによる呼び出しにも対応した。int 80h命令でのシステムコールは既に古く、sysenterの方が高速である。

関連する用語
BIOS
オペレーティングシステム
API
SVC

コメントなどを投稿するフォームは、日本語対応時のみ表示されます


KisoDic通信用語の基礎知識検索システム WDIC Explorer Version 7.04a (27-May-2022)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club