linux的系统调用是用中断实现的
linux的系统调用并不是像普通的函数调用那样直接在用户进程空间完成的,它是通过中断实现的,即:发出中断 + 调用中断服务程序。
以x86体系为例,
1. 用户进程在执行系统调用前,先把系统调用名(实际上是系统调用号)、输入参数等放到寄存器上(EBX,ECX等寄存器)
2. 然后发出int 0x80指令,即触发128号中断
3. 系统暂停用户进程,根据128号中断找到中断服务程序,这个程序名就叫system_call()
4. system_call()接着执行。它会从寄存器中找到系统调用名、输入参数等,并根据系统调用上下文中找到引发系统调用的进程;执行完毕后它又会把输出结果放到寄存器中。
5. 系统恢复用户进程,进程从寄存器中取到自己想要的东西,然后继续执行。
补充说明:
系统调用的中断一般称为软中断