《Linux內核設計與實現(英文版·第3版)-華章經典原版書庫》 第73頁:
int $0x80, 這是一個調用x86 的第128號中斷,也就是一個system call handler. CPU 在執行這個指令以後,就會進入kernel mode,然後可以用各種kernel code了。
問題:它在哪裏調用的呢?
我估計是在C wrapper (P74) 裏有一個地方會調用 syscall_() 之類的方法。
像http://www.win.tue.nl/~aeb/linux/lk/lk-4.html 給出的 uid_t getuid(void) 函數一樣,
int getuid32_available = UNKNOWN; uid_t getuid(void) {
if (getuid32_available == TRUE)
return INLINE_SYSCALL(getuid32, 0); //喏,這就是調用中斷的代碼了!
if (getuid32_available == UNKNOWN) {
uid_t res = INLINE_SYSCALL(getuid32, 0);
if (res == 0 || errno != ENOSYS) {
getuid32_available = TRUE;
return res;
}
getuid32_available = FALSE;
}
return INLINE_SYSCALL(getuid, 0);
}