谁在系统调用例程之前保存硬件和软件上下文?它是处理器本身还是软件处理程序?
感谢。
答案 0 :(得分:1)
每个系统调用都有一个如前所述的包装函数,每个包装器函数触发中断128,int 0x80,它自动在内核堆栈上保存寄存器eip,esp,cs,ss,eflags。 在处理函数中,调用SAVE_ALL宏,它将在堆栈上推送其余寄存器,当系统调用被提供时,值将被调用以恢复先前的状态。调用iret命令,CPU弹出之前保存的5个寄存器。
答案 1 :(得分:0)
通常,工作方式是每个系统服务都有一个包装函数。该包装器在使用系统的常规调用约定时接受参数。该包装器解包参数并设置寄存器。然后它触发异常进入内核模式。
系统服务的内核模式异常处理程序必须保存它修改的寄存器(超出用于返回值的寄存器)并在退出时恢复它们。
包装器函数获取系统服务在寄存器中返回的任何值,并使用普通函数调用约定将它们放入参数中。