【发布时间】:2012-02-25 00:45:07
【问题描述】:
系统调用、异常、除以 0 等它们在 linux 中都有相同的向量入口。如果在 x86 中,它是 0x80,对吗?那么信号呢?操作系统是否也使用 int 0x80 向进程发送信号?如果是,谁叫它?我们知道,如果你想在内核中捕获陷阱,你必须调用 int 0x80 或者它的包装类似系统调用,但是对于信号的情况,谁调用 0x80 ?
【问题讨论】:
-
你可能很困惑。内核向应用程序进程发送一个信号(因此它不需要任何
int或陷阱)。阅读basepath.com/aupadvancedlinuxprogramming.comtldp.org/HOWTO/Assembly-HOWTO -
int 80h用于产生中断(CPU 将停止执行当前代码并跳转到由 int 编号索引的向量)。 “除以零”是另一种产生中断的方式(当DIV的第二个参数为零时由CPU 自己生成),它的处理方式类似于int 0h。向量元素指向特定的中断处理程序,它是操作系统内核的一部分。处理程序将检查要做什么,每个 int 数的行为都不同。例如。对于 80 小时,处理程序将启动选定的系统调用(从用户模式切换到内核模式); 0h 它会产生一个信号。