Linux Kernel(2.6)の実装に関するメモ書き

システムコール


システムコールの発行はアプリケーションがint 80hのトラップを発生させることで行う。

システムコールのエントリルーチン

entry.S::system_call

trap_init()で例外ハンドラのIDTを設定する際、ベクタ番号80hについても一緒に設定している。

sys_call_tableに各種システムコールのエントリポイントが並べられている。


システムコールからの戻る時の流れ

1. 各システムコールルーチンからリターン

2. syscall_exit:
thread_info.flagsにbitが立っていれば
syscall_exit_workにジャンプ

3. restore_all:
レジスタを元に戻す。
iret

4. syscall_exit_work:
TIF_SYSCALL_TRACE|TIF_SYSCALL_AUDITが立っていなければwork_pendingへジャンプ

5. work_pending
TIF_NEED_RESCHEDが立っていればschedule()をコール
restore_allへジャンプ

[関連ページ]
例外処理


最終更新 2006/06/24 19:01:44 - kztomita
(2006/06/24 19:01:44 作成)


リンク
最近更新したページ
検索