システムコール
システムコールの発行はアプリケーションがint 80hのトラップを発生させることで行う。
trap_init()で例外ハンドラのIDTを設定する際、ベクタ番号80hについても一緒に設定している。
sys_call_tableに各種システムコールのエントリポイントが並べられている。
2. syscall_exit:
3. restore_all:
4. syscall_exit_work:
5. work_pending
[関連ページ]
例外処理
システムコールのエントリルーチン
entry.S::system_calltrap_init()で例外ハンドラのIDTを設定する際、ベクタ番号80hについても一緒に設定している。
sys_call_tableに各種システムコールのエントリポイントが並べられている。
システムコールからの戻る時の流れ
1. 各システムコールルーチンからリターン2. syscall_exit:
thread_info.flagsにbitが立っていれば
syscall_exit_workにジャンプ
syscall_exit_workにジャンプ
3. restore_all:
レジスタを元に戻す。
iret
iret
4. syscall_exit_work:
TIF_SYSCALL_TRACE|TIF_SYSCALL_AUDITが立っていなければwork_pendingへジャンプ
5. work_pending
TIF_NEED_RESCHEDが立っていればschedule()をコール
restore_allへジャンプ
restore_allへジャンプ
[関連ページ]
例外処理