处理器如何知道指令正在进行系统调用

Doo*_*Doo 3 operating-system kernel processor system-calls

系统调用 - 它是一条指令,它产生一个中断,使OS获得对处理器的控制.

因此,如果正在运行的进程发出系统调用(例如,创建/终止/读/写等),则会产生一个中断,该中断会导致KERNEL对控制器进行控制,然后处理器执行所需的中断处理程序.正确?

然后任何人都可以告诉我处理器如何知道该指令应该阻止进程,进入特权模式,并带来内核代码.

我的意思是作为程序员,我只需键入stream1 = system.io.readfile(ABC)或其他东西,转换为打开和读取文件ABC.

现在监控这个过程执行的是什么,cpu中有一个神奇的力量来检测这个?

从我读过的内容来看,一个处理器一次只能执行一个进程,那么监视程序运行在哪里?

如果在不运行状态下进行系统调用,KERNEL如何监控!

或计算机是否有一个系统调用指令表,它与执行任何指令之前进行比较?

请帮忙

感谢你

cni*_*tar 7

内核不监视检测系统调用的进程.相反,该过程会生成一个中断,将控制转移到内核,因为这是软件生成的中断根据指令集参考手册执行的操作.

例如,在Unix上,进程填充系统调用号eax并运行一条int 0x80指令,该指令生成中断0x80.CPU通过查看中断描述符表来查找该中断的内核处理程序,从而对此作出反应.此处理程序系统调用的入口点.

因此,要在32位x86 Linux中调用_exit(0)(原始系统调用,而不是exit()刷新缓冲区的glibc 函数):

movl  $1, %eax   # The system-call number.  __NR_exit is 1 for 32-bit
xor   %ebx,%ebx  # put the arg (exit status) in ebx
int   $0x80
Run Code Online (Sandbox Code Playgroud)