Linux下的系统调用

Linux下的系统调用

ID:41091948

大小:82.50 KB

页数:9页

时间:2019-08-16

Linux下的系统调用_第1页
Linux下的系统调用_第2页
Linux下的系统调用_第3页
Linux下的系统调用_第4页
Linux下的系统调用_第5页
资源描述:

《Linux下的系统调用》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、Linux下的系统调用1什么是系统调用系统调用,顾名思义,说的是操作系统提供给用户程序调用的一组“特殊”接口。用户程序可以通过这组“特殊”接口来获得操作系统内核提供的服务,比如用户可以通过文件系统相关的调用请求系统打开文件、关闭文件或读写文件,可以通过时钟相关的系统调用获得系统时间或设置定时器等。从逻辑上来说,系统调用可被看成是一个内核与用户空间程序交互的接口——它好比一个中间人,把用户进程的请求传达给内核,待内核把请求处理完毕后再将处理结果送回给用户空间。系统服务之所以需要通过系统调用来提供给用户空间的根本原因是为了对系统进行“保护”,因为我们知道Linux的运行空间分为内

2、核空间与用户空间,它们各自运行在不同的级别中,逻辑上相互隔离。所以用户进程在通常情况下不允许访问内核数据,也无法使用内核函数,它们只能在用户空间操作用户数据,调用用户空间函数。比如我们熟悉的“helloworld”程序(执行时)就是标准的用户空间进程,它使用的打印函数printf就属于用户空间函数,打印的字符“helloword”字符串也属于用户空间数据。但是很多情况下,用户进程需要获得系统服务(调用系统程序),这时就必须利用系统提供给用户的“特殊接口”——系统调用了,它的特殊性主要在于规定了用户进程进入内核的具体位置;换句话说,用户访问内核的路径是事先规定好的,只能从规定位

3、置进入内核,而不准许肆意跳入内核。有了这样的陷入内核的统一访问路径限制才能保证内核安全无虞。我们可以形象地描述这种机制:作为一个游客,你可以买票要求进入野生动物园,但你必须老老实实地坐在观光车上,按照规定的路线观光游览。当然,不准下车,因为那样太危险,不是让你丢掉小命,就是让你吓坏了野生动物。2Linux的系统调用对于现代操作系统,系统调用是一种内核与用户空间通讯的普遍手段,Linux系统也不例外。但是Linux系统的系统调用相比很多Unix和windows等系统具有一些独特之处,无处不体现出Linux的设计精髓——简洁和高效。Linux系统调用很多地方继承了Unix的系统调

4、用(但不是全部),但Linux相比传统Unix的系统调用做了很多扬弃,它省去了许多Unix系统冗余的系统调用,仅仅保留了最基本和最有用的系统调用,所以Linux全部系统调用只有250个左右(而有些操作系统系统调用多达1000个以上)。   这些系统调用按照功能逻辑大致可分为“进程控制”、“文件系统控制”、“系统控制”、“存储管理”、“网络管理”、“socket控制”、“用户管理”、“进程间通信”等几类,详细情况可参阅文章系统调用列表   如果你想详细看看系统调用的说明,可以使用man2syscalls命令查看,或干脆到<内核源码目录>/include/asm-i386/uni

5、std.h源文件中找到它们的源本。   熟练了解和掌握上面这些系统调用是对系统程序员的必备要求,但对于一个开发内核的人员或内核开发者来[1]说,死记硬背下这些调用还远远不够。如果你仅仅知道存在的调用而不知道为什么它们会存在,或只知道如何使用调用而不知道这些调用在系统中的主要用途,那么你离驾驭系统还有不小距离。   要弥补这个鸿沟,第一,你必须明白系统调用在内核里的主要用途。虽然上面给出了数种分类,不过,总的概括来讲,系统调用在系统中的主要用途无非以下几类:l控制硬件——系统调用往往作为硬件资源和用户空间的抽象接口,比如读写文件时用到的write/read调用。l设置系统状态或

6、读取内核数据——因为系统调用是用户空间和内核的唯一通讯手段[2],所以用户设置系统状态,比如开/关某项内核服务(设置某个内核变量),或读取内核数据都必须通过系统调用。比如getpgid、getpriority、setpriority、sethostnamel进程管理——一系统调用接口是用来保证系统中进程能以多任务在虚拟内存环境下得以运行。比如fork、clone、execve、exit等第二,什么服务应该存在于内核;或者说什么功能应该实现在内核而不是在用户空间。这个问题并没有明确的答案,有些服务你可以选择在内核完成,也可以在用户空间完成。选择在内核完成通常基于以下考虑:l服务

7、必须获得内核数据,比如一些服务必须获得中断或系统时间等内核数据。l从安全角度考虑,在内核中提供的服务相比用户空间提供的毫无疑问更安全,很难被非法访问到。l从效率考虑,在内核实现服务避免了和用户空间来回传递数据以及保护现场等步骤,因此效率往往要比在用户空间实现高许多。比如,httpd等服务。l如果内核和用户空间都需要使用该服务,那么最好实现在内核空间,比如随机数产生。理解上述道理对掌握系统调用的本质意义很大,希望网友们能从使用中多总结,多思考。3系统调用、用户编程接口(API)、系统命令和内核函数的关系系

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。