版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第7章 中断、 陷入和信号机构,7.1 概述 7.2 UNIX系统对中断和陷入的处理 7.3 系统调用的实施举例 7.4 UNIX信号机构 习题,7.1 概 述,7.1.1 中断及其一般处理过程 所谓中断是指CPU对系统发生的某个事件作出的一种反应: CPU暂停正在执行的程序, 保留现场后自动地转去执行相应的处理程序, 处理完该事件后再返回断点继续执行被“打断”的程序。 图7-1所示为中断时CPU活动的轨迹。,图7-1 中断示意图,1. 中断源分类 现代计算机都根据实际需要配备有不同类型的中断机构。 有的较简单, 有的则较复杂, 下面介绍几种常见的中断源分类方法。 1) 按功能划分 这种分类法
2、类似于IBM/360、 370系统的分类法, 所有中断源分为五类:,(1) 机器故障中断。 (2) 输入输出中断。 (3) 外部中断。 (4) 程序性中断。 (5) 访管中断。,2) 按产生中断的方式划分 (1) 强迫中断。 (2) 自愿中断。 中断进行分类, 其主要分为两类: (1) 中断。 (2) 异常(Exception)。,2. 中断的一般处理过程 对中断请求的整个处理过程是由硬件和软件结合起来而形成的一套中断机构实施的。 一般分为由硬件实施的中断响应和主要由操作系统实施的中断处理两大步骤。 发生中断时, CPU暂停执行当前的程序, 而转去处理中断, 这个由硬件对中断请求作出反应的过程
3、, 称为中断响应。 一般来说, 中断响应顺序执行下述三步动作:,(1) 中止当前程序的运行; (2) 保存原程序的断点信息(主要是程序计数器PC和程序状态寄存器PS的内容); (3) 转到相应的处理程序。,通常CPU在执行完一条指令后, 立即检查有无中断请求, 如有, 则立即作出响应。 中断响应后, 就由软件(中断处理程序)进行相应处理。 中断处理过程大致分为四个阶段: 保存被中断程序的现场、 分析中断原因、 转入相应处理程序进行处理、 恢复被中断程序的现场(即中断返回)。 中断处理的一般过程如图7-2所示。,图7-2 中断处理的一般过程,1) 保存现场 保存被中断程序的现场的目的是为了在中断
4、处理完之后, 可以返回到原来被中断的地方, 在原有的运行环境下继续正确地执行下去。 对现场信息的保存方式是多样化的, 常用方式有两种:一种是集中式保存。另一种是分散式保存。,2) 分析中断原因 对中断处理的主要工作是根据中断源确定中断原因, 然后转入相应处理程序去执行。 为此, 应确定“中断源”或者查证中断发生, 识别中断的类型(如时钟中断或者是盘中断)和中断的设备号(如哪个磁盘引起的中断)。 系统接到中断后, 就从机器那里得到一个中断号, 它是检索 中断向量表 的位移。 中断向量 因机器而异, 但 通常包括相应中断处理程序入口地址和中断处理时处理机状态字 。 表7-1列出了示意性的中断向量表
5、。 如果是终端发出的中断, 则核心从硬件那里得到的中断号是2。 利用它去查中断向量表, 得到终端中断处理程序ttyintr的地址。,表7-1 中 断 向 量 表,3) 处理中断 核心调用中断处理程序对中断进行处理。 4) 恢复现场和退出中断 执行完相应中断处理程序后, 就要退出中断。 退出中断的主要工作是: (1) 选取可以立即执行的进程。 (2) 恢复工作现场。,7.1.2 中断优先级和多重中断 高级别中断打断低级别中断的处理层次可以深入多层, 从而形成多重中断嵌套处理。 此时, CPU的活动轨迹如图7-3所示。,图7-3 多重中断嵌套处理,7.1.3 中断屏蔽 中断屏蔽是指在提出中断请求之
6、后, CPU不予响应的状态。 它常用来在处理某一中断时防止同级别中断的干扰或在处理一段不可分割的、 必须连续执行的程序时防止意外事件把它打断。 引入中断屏蔽和禁止的原因主要有以下三个方面: (1) 延迟或禁止对某些中断的响应。 (2) 协调中断响应与中断处理的关系。 (3) 防止同类中断的相互干扰。,7.2 UNIX系统对中断和陷入的处理,7.2.1 中断处理 当发生中断时, 系统作出响应, 不管它们是来自硬件(如来自时钟或者外部设备)、 程序性中断(执行指令导致“软件中断(Software Interrupts)”), 或者来自意外事件(如访问页面不在内存)。,核心对中断处理的顺序主要由以下
7、动作完成: (1) 保存正在运行进程的各寄存器的内容, 把它们放入核心栈的新帧面中。,表7-2 中 断 向 量 表,(2) 确定“中断源”或者查证中断发生, 识别中断的类型(如时钟中断或者是盘中断)和中断的设备号(如哪个磁盘引起的中断)。 系统接到中断后, 就从机器那里得到一个中断号, 它是检索中断向量表的位移。 中断向量因机器而异, 但通常都包括相应中断处理程序入口地址和中断处理时处理机的状态字。 表7-2列出示意性的中断向量表。,(3) 核心调用中断处理程序, 对中断进行处理。 (4) 中断处理完成并返回。 执行完中断处理程序, 核心便执行与机器相关的特定指令序列, 恢复中断时寄存器内容和
8、执行核心栈退栈, 进程回到用户态。,中断处理算法 输入: 无 输出: 无 保存(进栈)当前断点现场; 确定中断来源; 寻找中断向量; 调用中断处理程序; 恢复(退栈)先前保存的现场; ,图7-4示出一个多级中断的例子。 进程在执行系统调用期间接到盘中断, 而在执行盘中断处理子程序期间又接到时钟中断并对它进行相应处理。 每次系统只接受一个中断(或一个系统调用), 建立一个新的映像帧面, 在其中保存前一个处理子程序的寄存器内容。,图7-4 多级中断时核心栈层次,7.2.2 陷入处理 在UNIX系统中, 对异常的处理称为陷入(Trap)。 因为各种异常事件经过硬件处理, 再统一进入陷入处理程序tra
9、p。 引起陷入的事件可分为两组: 一组是自愿进入陷入, 称为自陷, 如使用系统调用、 断点跟踪; 另一组是由于程序运行中出现软、 硬件故障或错误而进入陷入, 也称为捕俘, 如转换无效、 访问违章、 非法指令等。,(1) 请求系统管理人员干预。 (2) 按用户规定方式进行处理。 (3) 用户栈自动扩充。 (4) 系统调用处理。 多数系统调用带有一个或几个参数。 传递参数的方式一般有两种: 通过通用寄存器(如r0, r1)的直接传送和在trap指令后自带参数。,系统调用入口表sysent的项数与系统调用编号一样多, 通常为64。 每项有三个部分: 自带参数个数、 标志位(如果执行setjmp函数,
10、 则置为0, 否则置为1)和相应处理程序的入口地址。 表7-3列出了sysent的结构形式。,表7-3 系统调用入口表,系统调用算法 输入: 系统调用号码 输出: 系统调用执行结果 根据系统调用号码从入口表中检索项; 确定系统调用的参数个数; 把参数从用户地址空间复制到user中; 保存当前映像, 以便失败时返回; 调用核心的系统调用子程序进行处理;,if(在子程序执行期间有错) 在保存用户现场的0号寄存器中置出错码; 在保存用户现场的PS寄存器中置上进位位; else 在保存用户现场的0号和1号寄存器中设置从系统调用返回的值; if(检测到信号) 对信号作相应处理 ,7.3 系统调用的实施举
11、例,设进程A在运行中要向已打开的文件(fd)写一批数据。 在用户的源程序中可使用系统调用语句: rw=write(fd, buf, count);,这条语句经编译以后形成汇编指令形式: trap 4 参数1 参数2 参数3 k1:,其中, 参数1、 2、 3分别对应文件描述字fd, 用户信息所在始址buf及传送字节数count。 这个系统调用的执行过程如下: (1) 处理机执行到trap 4指令时, 产生陷入事件, 硬件做出中断响应: 保留进程A的PS和PC的值, 取中断向量并放入寄存器(PS和PC)中, 控制转向一段核心代码, 将进程状态改为核心态, 进一步保留现场信息(通用寄存器等), 再
12、进入统一的处理程序。,(2) 转入文件系统管理, write调用rdwr程序。 后者根据fd, 经由用户打开文件表和系统打开文件表, 找到活动I节点。 (3) 设原文件存储块的最后一块未放满信息, 现在要扩充文件, 所以第一次不是整块传送。,(4) 由于进程A等待IO完成, 进程调度程序(swtch)选中另一进程B运行, A睡眠。 (5) 磁盘驱动程序根据bp给出的传送要求, 把信息从盘上读到缓冲区。 (6) 磁盘传送完一块信息, 发出中断。 (7) 中断造成进程B的中止, 硬件执行中断响应: 保留进程B的PS和PC, 取盘中断向量, 控制转向磁盘中断处理程序入口。,(8) 接着, 控制转向盘
13、中断处理程序, 验证是否是磁盘发出的中断, 如传输无错, 则调用iodone(bp), 唤醒因调用iowait而睡眠的进程A, 并且继续启动IO队列中下一个传送请求。 (9) 设进程A比进程B更适于在CPU上运行, 因而在唤醒进程A时设置了重调度标志(runrun)。 (10) 中断完成, 核心发现runrun0, 就调用swtch程序, 选中优先级高的进程A投入运行。,(11) 进程A接着运行核心程序: 调用iomove程序, 把信息从指定用户区传送到前面申请且使用的那个缓冲区中, 直至填满, 并且修改传送字节数等。 (12) 文件系统对有关信息项(如参数、 节点信息)进行修改, 然后判别是
14、否传送完成。 (13) 下面进行成块传送, 调用getblk, 申请缓冲区, 重复(11)(13)步。 (14) 写到最后一块, 若是满块, 则调用bawrite作异步写; 若没有满块, 则调用bdwrite,作延迟写。,(15) 最后写文件完成, 控制从文件系统的程序返回到陷入程序, 后者进行退出系统调用的处理。 进程状态回到用户态(设没有置上重调度标志), 则核心恢复进程A的现场, 继续执行A的用户程序。 至此, 系统调用write完成。 上述简要过程示例如图7-5所示。,图7-5 系统调用实现过程示例,7.4 UNIX信号机构,异步进程可以通过彼此发送信号来实现简单通信。 系统预先规定若
15、干个不同类型的信号(如UNIX S_5中设置19种信号), 各表示发生了不同的事件。 当运行进程遇到相应事件或出现特定要求时(如进程终止或运行中出现某些错误非法指令、 地址越界等), 就把一个信号写到相应进程的PCB信号项中。,接收信号的进程在运行过程中要检测自身是否收到了信号, 如果已收到信号, 则转去执行预先规定好的信号处理程序。 处理完之后, 再返回原先正在执行的程序。 进程之间利用信号机制实现通信的过程如图7-6所示。,图7-6 利用信号实现进程间通信,这种处理方式与硬件中断的处理方式有不少相似之处, 大部分陷入都转入信号机构处理。 但是, 二者 又是 不同 的, 因为信号的设置、 检
16、测等都是由软件实现的, 所以也称为 软中断 。 信号处理机构 是系统中围绕信号的产生、 传送和处理而构成的一套机构。 该机构通常包括三个部分: 信号的分类、 产生和传送; 对各种信号预先规定处理方式; 信号的检测和处理。,7.4.1 信号分类 在不同系统中, 信号分类是有差别的, 有多有少。 在UNIX S_5中规定了19种信号, 各对应不同的情况, 如电话挂起(远地用户)、 由键盘上按下“Delete”键、 按下“Quit”键、 非法指令、 断点或跟踪指令、 IOT指令、 EMT指令、 浮点溢出、 要求终止该进程、 总线超时、 段违例、 系统调用错、 Pipe文件只有写者无读者、 报警信号、
17、 软件终止信号、 子进程消亡、 电源失效以及用户定义的信号。 表7-4列出了UNIX System V Release 2中所定义的19种信号及其含义。,表7-4 UNIX SVR2的信号分类及其含义,7.4.2 信号处理方式 在进程user结构(进程的辅助控制结构)中有一个数组signal, 信号的编号就对应数组下标, 其元素值规定了该进程收到相应信号时所采用的相应动作。 表7-5列出了各数组元素的值及约定的动作。,表7-5 信号处理方式,信号的处理方式可在特定情况下进行修改, 但是9号信号对应的零值不要重置。 因为终止进程的信号(9号)不允许用户改变, 所以进程一旦收到该信号后, 总是终止
18、自己。 信号的处理方式可在以下五种情况下设置:,(1) 执行fork系统调用时, 子进程继承父进程signal数组的值。 (2) 执行exec系统调用时, 进程将该数组中所有非零偶数值改为0。 (3) 用户可用ssig系统调用改变该数组的内容。 (4) 执行psig处理某些信号时, 要将数组对应项清0。 (5) 执行rexit终止自己时, 该数组中所有项均置成1。,7.4.3 信号的检测和处理 信号机构区别于中断的一个主要方面是, 只在适当时机进程才检测它是否已接到信号。 如果接到了, 则按预定方式进行信号处理。 检测信号的程序是issig。 检测的时机是以下三种情况:,(1) 在陷入处理子程
19、序trap的末尾; (2) 若用户程序遇到时钟中断(每秒一次), 则时钟中断处理结束之前检测是否收到信号; (3) 进程以低优先级请求睡眠时, 系统要检查该进程是否收到了信号。,信号处理算法(psig) /*检测到信号后处理它们*/ 输入: 无 输出: 无 在进程表的p_sig中得到设置的信号号码; 在进程表的p_sig中清除信号号码; if(用户已调用系统调用signal, 用于忽略该信号),return; /*完成处理*/ if(用户定义了处理信号的函数) 得到user中信号处理函数的用户虚拟地址; 清除user中存放信号处理函数地址的字段; 修改用户级环境: 创建一个用户栈元, 用来模仿调用信号处理函数; 修改系统级环境: 将信号处理函数的地址写到寄存器PC中;,return; if(信号属于要转储进程内存映像) 在当前目录中建立名为“core”的文件; 将用户级环境的内容写到“core”文件中; 调用exit算法, 终止进程; ,习 题,1. 解释下列概念:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025山东滨州无棣县润禹水务集团有限公司及权属公司招聘工作人员笔试和人员笔试历年典型考点题库附带答案详解
- 2024-2025学年度电梯考试高频难、易错点题含答案详解【满分必刷】
- 2025安徽安庆经济技术开发区建设投资集团有限公司招聘最终(实操岗位)笔试历年难易错考点试卷带答案解析
- 2025安徽合肥新华书店有限公司外包服务人员招聘笔试笔试历年难易错考点试卷带答案解析
- 2026广东广州市天河区同仁天兴学校招聘美术教师招聘1人考试备考题库及答案解析
- 2025四川长虹智慧健康科技有限公司招聘工程技术经理岗位测试笔试历年备考题库附带答案详解
- 2025四川泸州市纳溪区融新文化传媒有限责任公司面向社会招聘1人笔试历年常考点试题专练附带答案详解
- 2026春季甘肃临夏州引进高层次人才和急需紧缺专业技术人才849人笔试备考题库及答案解析
- 2025吉林东院东丰鹿业投资发展(集团)有限公司及下属子公司招聘工作人员总笔试历年难易错考点试卷带答案解析
- 2026云南曲靖市陆良县发展和改革局招聘公益性岗位工作人员3人笔试备考试题及答案解析
- 2026年licenseout对外授权交易关键条款与谈判要点
- 2026福建浦开集团有限公司、福建浦盛产业发展集团有限公司、福建浦丰乡村发展集团有限公司社会公开招聘补充笔试模拟试题及答案解析
- 桥牌协会内部管理制度
- 2026重庆市南岸区消防救援支队消防文员招录2人笔试备考试题及答案解析
- 2026年山东省立第三医院初级岗位公开招聘人员(27人)笔试备考试题及答案解析
- 2026年滁州天长市大通镇预任制村干及村级后备干部储备库选拔28名笔试备考试题及答案解析
- 2026秋招:广州环投集团笔试题及答案
- 【新教材】人教PEP版(2024)四年级下册英语全册教案(含教学计划)
- 加油站突发环境事件风险评估报告模板
- 挤塑工艺培训课件
- 生成式AI赋能下的高中地理教师教育观念更新与教学实践研究教学研究课题报告
评论
0/150
提交评论