杂谈系统调用

应用层的API接口函数中一部分需要调用系统函数,有一对一调用的,也有一堆多调用的,剩下的大部分都是直接调用库函数来完成功能。

1.系统调用的可移植性较差,因为它直接对硬件进行操作,与具体的操作系统及硬件有关。而一般函数调用运行于应用层,一般都为C库,所以一般函数的可移植性较强。

2.每次系统调用时都要由用户层切换到内核层,因此需要耗费一定的开销。过多的进行系统调用会影响到系统的性能。

3.库函数对文件的操作最终会映射到系统调用的相应操作,打开文件获得FILE结构指针,在内核中会有一个相应的文件描述符fd打开。

4.读写文件时即使使用函数调用,最用还是会调用系统调用去进行具体的操作,但是使用函数调用可以减少系统调用的次数,这要得益于用户空间和内核空间的缓冲区技术。只有当缓冲区写满后才会写到目的地。

 

系统调用时将调用号(实际是系统调用表中的偏移),保存在eax寄存器中,通过此寄存器的值在include/unistd.h中对应的宏,内核可以得到相应的调用函数。再到include/system_call.s中执行此函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值