glibcのシステムコール発行手続き

「Linuxカーネル2.6解読室」より
理解している内容が浅いけどとりあえずメモしておく。
1.プロセスがライブラリ関数を呼び出す
2.ライブラリが準備をしてカーネルを呼び出す
3.CPUは特権モードに移行し、使用するスタックが切り替わる
4.プロセスのレジスタ値を保存
5.指定されていれば、システムコールを発行したことをデバッグプロセスに通知
6.実際に必要な処理を行う
7.指定されていれば、システムコールの処理結果をデバッグプロセスに通知
8.プリエンプト要求が発生していれば、プロセスの切り替えを行う
9.シグナルが配送されていれば、シグナル処理をする
10.システムコール発行前のレジスタを復元し、ユーザーモードに戻る
11.ライブラリ結果を解釈し、エラーならばerrnoにエラーコードを、戻り値に-1を設定
12.関数呼び出しを終了する
CPUの特権モード
0:特権あり(カーネル)~3:特権なし(プロセス)
レベル1、2は使用しない
CPU特権レベルの変更方法
・ソフトウェア割り込みを使用(int n命令(int 0x80)を使用)
・コールゲートを使用
・タスクゲートを使用
・sysenter命令を使用
システムコールエントリーテーブル
arch/i386/kernel/syscall_table.S
2007年 8月 14日 | Posted in Linux
タグ:
コメントは終了しています。