システムコール
アプリケーションによって利用される、OS のカーネルが持つ機能。またはそれらを呼び出す機構。
大体の場合 CPU に専用の命令が用意されてるか、割り込みを使う
PDP-11
割り込みベクタにハンドラを登録しておく
trap でトラップを発生させる
疑似命令として sys がある
システムコールと対応したハンドラが実行される
x86
割り込みベクタにハンドラ登録しておく
IDT にシステムコールを呼び出すためのアドレスを書き込む
int を IDT に設定したアドレスで呼び出し割り込みを発生させる
Linux では 0x80、Windows NT では 0x2e
システムコールと対応したハンドラが実行される
x64(AMD K6 以降でも使えるらしい)
CPU 起動時に IA32_FMASK MSR というレジスタにシステムコールを呼び出すためのアドレスを書き込む
syscall という専用命令を使う
RISC-V
stvec にシステムコールのアドレスなどを設定
ecall で例外を発生させる
特権レベルについては調査中
参考
『はじめての OS コードリーディング』
『低レベルプログラミング』
RISC-Vとx86のsystem callの内部実装の違い(xv6を例に) - 私のひらめき日記
システムコールとは何なのか - Qiita
syscall ‐ 通信用語の基礎知識