Linux实例分析.pptVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
7.1.3 中断屏蔽 ?中断屏蔽是指在提出中断请求之后, CPU不予响应的状态。 它常用来在处理某一中断时防止同级别中断的干扰或在处理一段不可分割的、 必须连续执行的程序时防止意外事件把它打断。 引入中断屏蔽和禁止的原因主要有以下三个方面: (1) 延迟或禁止对某些中断的响应。 (2) 协调中断响应与中断处理的关系。 (3) 防止同类中断的相互干扰。 7.2 UNIX系统对中断和陷入的处理 7.2.1 中断处理 当发生中断时, 系统作出响应, 不管它们是来自硬件(如来自时钟或者外部设备)、 程序性中断(执行指令导致“软件中断(Software Interrupts)”), 或者来自意外事件(如访问页面不在内存)。 核心对中断处理的顺序主要由以下动作完成: (1) 保存正在运行进程的各寄存器的内容, 把它们放入核心栈的新帧面中。 表7-2 中 断 向 量 表 (2) 确定“中断源”或者查证中断发生, 识别中断的类型(如时钟中断或者是盘中断)和中断的设备号(如哪个磁盘引起的中断)。 系统接到中断后, 就从机器那里得到一个中断号, 它是检索中断向量表的位移。 中断向量因机器而异, 但通常都包括相应中断处理程序入口地址和中断处理时处理机的状态字。 表7-2列出示意性的中断向量表。 (3) 核心调用中断处理程序, 对中断进行处理。 (4) 中断处理完成并返回。 执行完中断处理程序, 核心便执行与机器相关的特定指令序列, 恢复中断时寄存器内容和执行核心栈退栈, 进程回到用户态。 中断处理算法 输入: 无 输出: 无 { 保存(进栈)当前断点现场; 确定中断来源; 寻找中断向量; 调用中断处理程序; 恢复(退栈)先前保存的现场; } 图7-4示出一个多级中断的例子。 进程在执行系统调用期间接到盘中断, 而在执行盘中断处理子程序期间又接到时钟中断并对它进行相应处理。 每次系统只接受一个中断(或一个系统调用), 建立一个新的映像帧面, 在其中保存前一个处理子程序的寄存器内容。 图7-4 多级中断时核心栈层次 7.2.2 陷入处理 在UNIX系统中, 对异常的处理称为陷入(Trap)。 因为各种异常事件经过硬件处理, 再统一进入陷入处理程序trap。 引起陷入的事件可分为两组: 一组是自愿进入陷入, 称为自陷, 如使用系统调用、 断点跟踪; 另一组是由于程序运行中出现软、 硬件故障或错误而进入陷入, 也称为捕俘, 如转换无效、 访问违章、 非法指令等。 (1) 请求系统管理人员干预。 (2) 按用户规定方式进行处理。 (3) 用户栈自动扩充。 (4) 系统调用处理。 多数系统调用带有一个或几个参数。 传递参数的方式一般有两种: 通过通用寄存器(如r0, r1)的直接传送和在trap指令后自带参数。 系统调用入口表sysent的项数与系统调用编号一样多, 通常为64。 每项有三个部分: 自带参数个数、 标志位(如果执行setjmp函数, 则置为0, 否则置为1)和相应处理程序的入口地址。 表7-3列出了sysent的结构形式。 表7-3 系统调用入口表 系统调用算法 输入: 系统调用号码 输出: 系统调用执行结果 { 根据系统调用号码从入口表中检索项; 确定系统调用的参数个数; 把参数从用户地址空间复制到user中; 保存当前映像, 以便失败时返回; 调用核心的系统调用子程序进行处理; if(在子程序执行期间有错) { 在保存用户现场的0号寄存器中置出错码; 在保存用户现场的PS寄存器中置上进位位; } else 在保存用户现场的0号和1号寄存器中设置从系统调用返回的值; if(检测到信号) 对信号作相应处理 } 7.3 系统调用的实施举例 设进程A在运行中要向已打开的文件(fd)写一批数据。 在用户的源程序中可使用系统调用语句: rw=write(fd, buf, count); 这条语句经编译以后形成汇编指令形式: trap 4 参数1

文档评论(0)

精品资料 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档