系统调用的原理与好处

我们调用一个C语言库中的API,这个API中有一个指令INT 0x80,这是一个由指令发出的系统中断,叫软中断。这个中断使系统由用户态陷入内核态,并跳转到内核中地址为sys_call的函数首部。sys_call是系统调用引导程序,会通过系统调用号查找系统调用表,取出表中记录的系统调用函数的地址并跳转执行。当中断指令INT 0x80执行的时候,先将系统调用号存入寄存器EAX,sys_call函数将其乘以4作为偏移量,再加上sys_call_table的初始地址得到系统调用服务函数的地址,最后跳转执行。

还有一点,有一些系统调用有参数,API需要将参数先存在寄存器中,然后在调用指令INT 0x80.然后在sys_call函数调用时,将这些寄存器中的值压入堆栈,真正的系统调用服务函数从堆栈中获取参数。

系统调用大的好处:提供了统一的接口,比如读取数据,API就不必理会数据存储的物理介质。保护了OS的稳定,因为系统调用、异常和中断是外界进入内核的仅有通道,这就保证了不同进程对内核空间的操作是可知并可控的,这为OS多任务调度和虚拟内存实现提供了基础。

你可能感兴趣的:(系统调用)