系统调用、异常、除以 0 等它们在 linux 中都有相同的 vector 入口。如果在 x86 中,它是 0x80,对吗?那么信号呢?操作系统是否也使用 int 0x80 作为进程信号?如果是,谁叫它?我们知道如果你想在内核中捕获陷阱,你必须像系统调用一样调用 int 0x80 或者它的包装器,但是对于信号,谁调用 0x80 ?
最佳答案
首先,。 int 0x80 很长一段时间没有被现代 Intel CPU 上的现代操作系统使用。 sysenter 指令通常很少使用(参见:http://siyobik.info/main/reference/instruction/SYSENTER)。
至于信号,你有两种情况——
如果发送信号时信号的目标未在 CPU 上运行,那么发送信号只不过是在内核数据结构中标记一个位,该位指示内核何时将该进程调度回CPU 将程序计数器置于信号处理例程而不是原始 PC。
但是,如果发送信号时您发送信号的程序正在 CPU 上运行,则信号作为中断触发 - 如果信号是同步的(例如被零除异常),则中断是异常CPU 内核产生的中断。如果信号是异步的(例如在另一个内核上运行的另一个进程发送信号),则中断是从另一个内核发送的处理器间中断。
所以,那么任何地方都没有 int 0x80 :-)
关于c - linux中的signal,int 0x80是谁调用的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9111039/