Chinaunix首页 | 论坛 | 博客
  • 博客访问: 26625
  • 博文数量: 7
  • 博客积分: 178
  • 博客等级: 入伍新兵
  • 技术积分: 80
  • 用 户 组: 普通用户
  • 注册时间: 2011-10-25 09:04
文章分类

全部博文(7)

文章存档

2012年(6)

2011年(1)

我的朋友

分类: LINUX

2012-05-08 14:02:43

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

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

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

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

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

 

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

阅读(1055) | 评论(1) | 转发(0) |
0

上一篇:python中alisa和copy区别

下一篇:没有了

给主人留下些什么吧!~~

桔色花花朵2012-05-08 19:37:05

库函数对文件的操作最终会映射到系统调用的相应操作
很不错啊