- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
操作系统第7操作系统接口
* 第七章 操作系统接口 7.3 系 统 调 用 7.3.1 系统调用的基本概念 1.系统态和用户态 特权指令:是在系统态时运行的指令,是关系到系统全局的指令。 非特权指令:是在用户态时运行的指令。 2. 系统调用 (1) 运行在不同的系统状态。调用程序是运行在用户态,而被调用程序是运行在系统态。 (2) 状态的转换通过软中断进入。 (3) 返回问题。当调用进程仍具有最高优先级时,才返回到调用进程继续执行;否则,将引起重新调度,以便让优先权最高的进程优先执行,而调用进程放入就绪队列。 (4) 嵌套调用。系统调用可以嵌套进行。 图 7-3 系统功能的调用 3. 中断机制 系统调用是通过中断机制实现的,并且一个操作系统的所有系统调用都通过同一个中断入口来实现。如MS-DOS提供了INT 21H。 Linux给应用程序授权了4个中断号:3、4、5和80h;3、4和5中断号是提供给应用程序调试所使用的,而80h是系统调用的中断号。 7.3.2 系统调用的类型 1. 进程控制类系统调用 创建和终止进程的系统调用。 (2) 获得和设置进程属性的系统调用。 (3) 等待某事件出现的系统调用。 2. 文件操纵类系统调用 创建和删除文件。 creat和unlink。 (2) 打开和关闭文件。 open和close。 (3) 读和写文件。 read和write。 3. 进程通信类系统调用 在OS中经常采用两种进程通信方式,即消息传递方式和共享存储区方式。 当系统中采用消息传递方式时,在通信前,必须先打开一个连接。为此,应由源进程发出一条打开连接的系统调用open connection, 而目标进程则应利用接受连接的系统调用accept connection表示同意进行通信;然后,在源和目标进程之间便可开始通信。可以利用发送消息的系统调用send message或者用接收消息的系统调用receive message来交换信息。通信结束后,还须再利用关闭连接的系统调用close connection结束通信。 在使用共享存储区方式进行通信时,须先利用建立共享存储区的系统调用来建立一个共享存储区,在利用建立连接的系统调用将该共享存储区连接到进程自身的虚地址空间上,然后便可利用读和写共享存储区的系统调用实现互相通信。 除上述系统调用外,还有设备管理类系统调用和信息维护类系统调用。 7.3.3 POSIX标准 POSIX定义了标准应用程序接口(API),用于保证编制的应用程序可以在源代码一级上在多种操作系统上移植运行。 POSIX标准定义了一组过程,这组过程是构造系统调用所必须的。通过调用这些过程所提供的服务,确定了一系列系统调用的功能。 7.3.4 系统调用的实现 1. 中断和陷入硬件机构 (1) 中断和陷入的概念 中断是指CPU对系统发生某事件时的一种响应:CPU暂停正在执行的程序,在保留现场后自动地转去执行该事件的中断处理程序;执行完后,再返回到原程序的断点处继续执行。外中断是指由于外部设备事件所引起的中断;内中断是指由于CPU内部事件所引起的中断,如程序出错等。内中断(trap)也译为“陷入”。 陷入是由于执行了现行指令所引起的;中断是由于系统中某事件引起的,该指令与现行指令无关 。 图 7 - 4 中断时的CPU轨迹 (2) 中断和陷入向量。 2. 系统调用号和参数的设置 在一个系统中设置了许多条系统调用,并赋予每条系统调用一个唯一的系统调用号。 在系统调用命令中把想要的系统调用号传递给中断和陷入机制的方法有: ①直接把系统调用号放在系统调用命令中,如UNIX,系统调用命令的低8位用于存放系统调用号; ②将系统调用号装入某指定寄存器或内存单元中,如MS-DOS将系统调用号放在AH寄存器中,而Linux则是利用EAX寄存器存放应用程序传递的系统调用号。 陷入指令自带方式。陷入指令除带一个系统调用号外,还自带几个参数,但由于指令长度有限,自带参数是有限的少量几个。 直接将参数送入相应的寄存器中。 MS-DOS用MOV指令将各个参数是送入相应的寄存器中。但由于寄存器数量有限,也限制了所能设置的参数的个数。 (3) 参数表方式。将系统调用所需的参数放入一张参数表中,再将指向该参数表的指针放在某个指定的寄存器中。U
原创力文档


文档评论(0)