系统调用的原理与好处

我们调用一个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多任务调度和虚拟内存实现提供了基础。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值