操作系统教程—Linux实例分析 孟庆昌 第7章 中断、 陷.ppt
-
资源ID:87668627
资源大小:1.19MB
全文页数:59页
- 资源格式: PPT
下载积分:15金币
快捷下载
会员登录下载
微信登录下载
三方登录下载:
微信扫一扫登录
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
操作系统教程—Linux实例分析 孟庆昌 第7章 中断、 陷.ppt
第第7 7章章 中断、中断、陷入和信号机构陷入和信号机构 第第7章章 中断、中断、陷入和信号机构陷入和信号机构 7.1 概述概述 7.2 UNIX系统对中断和陷入的处理系统对中断和陷入的处理 7.3 系统调用的实施举例系统调用的实施举例 7.4 UNIX信号机构信号机构 习题习题 第第7 7章章 中断、中断、陷入和信号机构陷入和信号机构 7.1 概概 述述 7.1.1中断及其一般处理过程所谓中断是指CPU对系统发生的某个事件作出的一种反应:CPU暂停正在执行的程序,保留现场后自动地转去执行相应的处理程序,处理完该事件后再返回断点继续执行被“打断”的程序。图7-1所示为中断时CPU活动的轨迹。第第7 7章章 中断、中断、陷入和信号机构陷入和信号机构 图7-1中断示意图第第7 7章章 中断、中断、陷入和信号机构陷入和信号机构 1.中断源分类现代计算机都根据实际需要配备有不同类型的中断机构。有的较简单,有的则较复杂,下面介绍几种常见的中断源分类方法。1)按功能划分这种分类法类似于IBM/360、370系统的分类法,所有中断源分为五类:第第7 7章章 中断、中断、陷入和信号机构陷入和信号机构 (1)机器故障中断。(2)输入输出中断。(3)外部中断。(4)程序性中断。(5)访管中断。第第7 7章章 中断、中断、陷入和信号机构陷入和信号机构 2)按产生中断的方式划分(1)强迫中断。(2)自愿中断。中断进行分类,其主要分为两类:(1)中断。(2)异常(Exception)。第第7 7章章 中断、中断、陷入和信号机构陷入和信号机构 2.中断的一般处理过程对中断请求的整个处理过程是由硬件和软件结合起来而形成的一套中断机构实施的。一般分为由硬件实施的中断响应和主要由操作系统实施的中断处理两大步骤。发生中断时,CPU暂停执行当前的程序,而转去处理中断,这个由硬件对中断请求作出反应的过程,称为中断响应。一般来说,中断响应顺序执行下述三步动作:第第7 7章章 中断、中断、陷入和信号机构陷入和信号机构 (1)中止当前程序的运行;(2)保存原程序的断点信息(主要是程序计数器PC和程序状态寄存器PS的内容);(3)转到相应的处理程序。第第7 7章章 中断、中断、陷入和信号机构陷入和信号机构 通常CPU在执行完一条指令后,立即检查有无中断请求,如有,则立即作出响应。中断响应后,就由软件(中断处理程序)进行相应处理。中断处理过程大致分为四个阶段:保存被中断程序的现场、分析中断原因、转入相应处理程序进行处理、恢复被中断程序的现场(即中断返回)。中断处理的一般过程如图7-2所示。第第7 7章章 中断、中断、陷入和信号机构陷入和信号机构 图7-2中断处理的一般过程第第7 7章章 中断、中断、陷入和信号机构陷入和信号机构 1)保存现场保存被中断程序的现场的目的是为了在中断处理完之后,可以返回到原来被中断的地方,在原有的运行环境下继续正确地执行下去。对现场信息的保存方式是多样化的,常用方式有两种:一种是集中式保存。另一种是分散式保存。第第7 7章章 中断、中断、陷入和信号机构陷入和信号机构 2)分析中断原因对中断处理的主要工作是根据中断源确定中断原因,然后转入相应处理程序去执行。为此,应确定“中断源”或者查证中断发生,识别中断的类型(如时钟中断或者是盘中断)和中断的设备号(如哪个磁盘引起的中断)。系统接到中断后,就从机器那里得到一个中断号,它是检索中断向量表的位移。中断向量因机器而异,但通常包括相应中断处理程序入口地址和中断处理时处理机状态字。表7-1列出了示意性的中断向量表。如果是终端发出的中断,则核心从硬件那里得到的中断号是2。利用它去查中断向量表,得到终端中断处理程序ttyintr的地址。第第7 7章章 中断、中断、陷入和信号机构陷入和信号机构 表7-1中断向量表第第7 7章章 中断、中断、陷入和信号机构陷入和信号机构 3)处理中断核心调用中断处理程序对中断进行处理。4)恢复现场和退出中断执行完相应中断处理程序后,就要退出中断。退出中断的主要工作是:(1)选取可以立即执行的进程。(2)恢复工作现场。第第7 7章章 中断、中断、陷入和信号机构陷入和信号机构 7.1.2中断优先级和多重中断高级别中断打断低级别中断的处理层次可以深入多层,从而形成多重中断嵌套处理。此时,CPU的活动轨迹如图7-3所示。第第7 7章章 中断、中断、陷入和信号机构陷入和信号机构 图7-3多重中断嵌套处理第第7 7章章 中断、中断、陷入和信号机构陷入和信号机构 7.1.3中断屏蔽中断屏蔽是指在提出中断请求之后,CPU不予响应的状态。它常用来在处理某一中断时防止同级别中断的干扰或在处理一段不可分割的、必须连续执行的程序时防止意外事件把它打断。引入中断屏蔽和禁止的原因主要有以下三个方面:(1)延迟或禁止对某些中断的响应。(2)协调中断响应与中断处理的关系。(3)防止同类中断的相互干扰。第第7 7章章 中断、中断、陷入和信号机构陷入和信号机构 7.2 UNIX系统对中断和陷入的处理系统对中断和陷入的处理 7.2.1中断处理当发生中断时,系统作出响应,不管它们是来自硬件(如来自时钟或者外部设备)、程序性中断(执行指令导致“软件中断(SoftwareInterrupts)”),或者来自意外事件(如访问页面不在内存)。第第7 7章章 中断、中断、陷入和信号机构陷入和信号机构 核心对中断处理的顺序主要由以下动作完成:(1)保存正在运行进程的各寄存器的内容,把它们放入核心栈的新帧面中。表7-2中断向量表第第7 7章章 中断、中断、陷入和信号机构陷入和信号机构 (2)确定“中断源”或者查证中断发生,识别中断的类型(如时钟中断或者是盘中断)和中断的设备号(如哪个磁盘引起的中断)。系统接到中断后,就从机器那里得到一个中断号,它是检索中断向量表的位移。中断向量因机器而异,但通常都包括相应中断处理程序入口地址和中断处理时处理机的状态字。表7-2列出示意性的中断向量表。第第7 7章章 中断、中断、陷入和信号机构陷入和信号机构 (3)核心调用中断处理程序,对中断进行处理。(4)中断处理完成并返回。执行完中断处理程序,核心便执行与机器相关的特定指令序列,恢复中断时寄存器内容和执行核心栈退栈,进程回到用户态。第第7 7章章 中断、中断、陷入和信号机构陷入和信号机构 中断处理算法输入:无输出:无保存(进栈)当前断点现场;确定中断来源;寻找中断向量;调用中断处理程序;恢复(退栈)先前保存的现场;第第7 7章章 中断、中断、陷入和信号机构陷入和信号机构 图7-4示出一个多级中断的例子。进程在执行系统调用期间接到盘中断,而在执行盘中断处理子程序期间又接到时钟中断并对它进行相应处理。每次系统只接受一个中断(或一个系统调用),建立一个新的映像帧面,在其中保存前一个处理子程序的寄存器内容。第第7 7章章 中断、中断、陷入和信号机构陷入和信号机构 图7-4多级中断时核心栈层次第第7 7章章 中断、中断、陷入和信号机构陷入和信号机构 7.2.2陷入处理在UNIX系统中,对异常的处理称为陷入(Trap)。因为各种异常事件经过硬件处理,再统一进入陷入处理程序trap。引起陷入的事件可分为两组:一组是自愿进入陷入,称为自陷,如使用系统调用、断点跟踪;另一组是由于程序运行中出现软、硬件故障或错误而进入陷入,也称为捕俘,如转换无效、访问违章、非法指令等。第第7 7章章 中断、中断、陷入和信号机构陷入和信号机构 (1)请求系统管理人员干预。(2)按用户规定方式进行处理。(3)用户栈自动扩充。(4)系统调用处理。多数系统调用带有一个或几个参数。传递参数的方式一般有两种:通过通用寄存器(如r0,r1)的直接传送和在trap指令后自带参数。第第7 7章章 中断、中断、陷入和信号机构陷入和信号机构 系统调用入口表sysent的项数与系统调用编号一样多,通常为64。每项有三个部分:自带参数个数、标志位(如果执行setjmp函数,则置为0,否则置为1)和相应处理程序的入口地址。表7-3列出了sysent的结构形式。第第7 7章章 中断、中断、陷入和信号机构陷入和信号机构 表7-3系统调用入口表第第7 7章章 中断、中断、陷入和信号机构陷入和信号机构 系统调用算法输入:系统调用号码输出:系统调用执行结果根据系统调用号码从入口表中检索项;确定系统调用的参数个数;把参数从用户地址空间复制到user中;保存当前映像,以便失败时返回;调用核心的系统调用子程序进行处理;第第7 7章章 中断、中断、陷入和信号机构陷入和信号机构 if(在子程序执行期间有错)在保存用户现场的0号寄存器中置出错码;在保存用户现场的PS寄存器中置上进位位;else在保存用户现场的0号和1号寄存器中设置从系统调用返回的值;if(检测到信号)对信号作相应处理第第7 7章章 中断、中断、陷入和信号机构陷入和信号机构 7.3 系统调用的实施举例系统调用的实施举例 设进程A在运行中要向已打开的文件(fd)写一批数据。在用户的源程序中可使用系统调用语句:rw=write(fd,buf,count);第第7 7章章 中断、中断、陷入和信号机构陷入和信号机构 这条语句经编译以后形成汇编指令形式:trap4参数1参数2参数3k1:第第7 7章章 中断、中断、陷入和信号机构陷入和信号机构 其中,参数1、2、3分别对应文件描述字fd,用户信息所在始址buf及传送字节数count。这个系统调用的执行过程如下:(1)处理机执行到trap4指令时,产生陷入事件,硬件做出中断响应:保留进程A的PS和PC的值,取中断向量并放入寄存器(PS和PC)中,控制转向一段核心代码,将进程状态改为核心态,进一步保留现场信息(通用寄存器等),再进入统一的处理程序。第第7 7章章 中断、中断、陷入和信号机构陷入和信号机构 (2)转入文件系统管理,write调用rdwr程序。后者根据fd,经由用户打开文件表和系统打开文件表,找到活动I节点。(3)设原文件存储块的最后一块未放满信息,现在要扩充文件,所以第一次不是整块传送。第第7 7章章 中断、中断、陷入和信号机构陷入和信号机构 (4)由于进程A等待IO完成,进程调度程序(swtch)选中另一进程B运行,A睡眠。(5)磁盘驱动程序根据bp给出的传送要求,把信息从盘上读到缓冲区。(6)磁盘传送完一块信息,发出中断。(7)中断造成进程B的中止,硬件执行中断响应:保留进程B的PS和PC,取盘中断向量,控制转向磁盘中断处理程序入口。第第7 7章章 中断、中断、陷入和信号机构陷入和信号机构 (8)接着,控制转向盘中断处理程序,验证是否是磁盘发出的中断,如传输无错,则调用iodone(bp),唤醒因调用iowait而睡眠的进程A,并且继续启动IO队列中下一个传送请求。(9)设进程A比进程B更适于在CPU上运行,因而在唤醒进程A时设置了重调度标志(runrun)。(10)中断完成,核心发现runrun0,就调用swtch程序,选中优先级高的进程A投入运行。第第7 7章章 中断、中断、陷入和信号机构陷入和信号机构 (11)进程A接着运行核心程序:调用iomove程序,把信息从指定用户区传送到前面申请且使用的那个缓冲区中,直至填满,并且修改传送字节数等。(12)文件系统对有关信息项(如参数、节点信息)进行修改,然后判别是否传送完成。(13)下面进行成块传送,调用getblk,申请缓冲区,重复(11)(13)步。(14)写到最后一块,若是满块,则调用bawrite作异步写;若没有满块,则调用bdwrite,作延迟写。第第7 7章章 中断、中断、陷入和信号机构陷入和信号机构 (15)最后写文件完成,控制从文件系统的程序返回到陷入程序,后者进行退出系统调用的处理。进程状态回到用户态(设没有置上重调度标志),则核心恢复进程A的现场,继续执行A的用户程序。至此,系统调用write完成。上述简要过程示例如图7-5所示。第第7 7章章 中断、中断、陷入和信号机构陷入和信号机构 图7-5系统调用实现过程示例第第7 7章章 中断、中断、陷入和信号机构陷入和信号机构 7.4 UNIX信号机构信号机构 异步进程可以通过彼此发送信号来实现简单通信。系统预先规定若干个不同类型的信号(如UNIXS_5中设置19种信号),各表示发生了不同的事件。当运行进程遇到相应事件或出现特定要求时(如进程终止或运行中出现某些错误非法指令、地址越界等),就把一个信号写到相应进程的PCB信号项中。第第7 7章章 中断、中断、陷入和信号机构陷入和信号机构 接收信号的进程在运行过程中要检测自身是否收到了信号,如果已收到信号,则转去执行预先规定好的信号处理程序。处理完之后,再返回原先正在执行的程序。进程之间利用信号机制实现通信的过程如图7-6所示。第第7 7章章 中断、中断、陷入和信号机构陷入和信号机构 图7-6利用信号实现进程间通信第第7 7章章 中断、中断、陷入和信号机构陷入和信号机构 这种处理方式与硬件中断的处理方式有不少相似之处,大部分陷入都转入信号机构处理。但是,二者又是不同的,因为信号的设置、检测等都是由软件实现的,所以也称为软中断。信号处理机构是系统中围绕信号的产生、传送和处理而构成的一套机构。该机构通常包括三个部分:信号的分类、产生和传送;对各种信号预先规定处理方式;信号的检测和处理。第第7 7章章 中断、中断、陷入和信号机构陷入和信号机构 7.4.1信号分类在不同系统中,信号分类是有差别的,有多有少。在UNIXS_5中规定了19种信号,各对应不同的情况,如电话挂起(远地用户)、由键盘上按下“Delete”键、按下“Quit”键、非法指令、断点或跟踪指令、IOT指令、EMT指令、浮点溢出、要求终止该进程、总线超时、段违例、系统调用错、Pipe文件只有写者无读者、报警信号、软件终止信号、子进程消亡、电源失效以及用户定义的信号。表7-4列出了UNIXSystemVRelease2中所定义的19种信号及其含义。第第7 7章章 中断、中断、陷入和信号机构陷入和信号机构 表7-4UNIXSVR2的信号分类及其含义第第7 7章章 中断、中断、陷入和信号机构陷入和信号机构 7.4.2信号处理方式在进程user结构(进程的辅助控制结构)中有一个数组signal,信号的编号就对应数组下标,其元素值规定了该进程收到相应信号时所采用的相应动作。表7-5列出了各数组元素的值及约定的动作。第第7 7章章 中断、中断、陷入和信号机构陷入和信号机构 表7-5信号处理方式第第7 7章章 中断、中断、陷入和信号机构陷入和信号机构 信号的处理方式可在特定情况下进行修改,但是9号信号对应的零值不要重置。因为终止进程的信号(9号)不允许用户改变,所以进程一旦收到该信号后,总是终止自己。信号的处理方式可在以下五种情况下设置:第第7 7章章 中断、中断、陷入和信号机构陷入和信号机构 (1)执行fork系统调用时,子进程继承父进程signal数组的值。(2)执行exec系统调用时,进程将该数组中所有非零偶数值改为0。(3)用户可用ssig系统调用改变该数组的内容。(4)执行psig处理某些信号时,要将数组对应项清0。(5)执行rexit终止自己时,该数组中所有项均置成1。第第7 7章章 中断、中断、陷入和信号机构陷入和信号机构 7.4.3信号的检测和处理信号机构区别于中断的一个主要方面是,只在适当时机进程才检测它是否已接到信号。如果接到了,则按预定方式进行信号处理。检测信号的程序是issig。检测的时机是以下三种情况:第第7 7章章 中断、中断、陷入和信号机构陷入和信号机构 (1)在陷入处理子程序trap的末尾;(2)若用户程序遇到时钟中断(每秒一次),则时钟中断处理结束之前检测是否收到信号;(3)进程以低优先级请求睡眠时,系统要检查该进程是否收到了信号。第第7 7章章 中断、中断、陷入和信号机构陷入和信号机构 信号处理算法(psig)/*检测到信号后处理它们*/输入:无输出:无在进程表的p_sig中得到设置的信号号码;在进程表的p_sig中清除信号号码;if(用户已调用系统调用signal,用于忽略该信号)第第7 7章章 中断、中断、陷入和信号机构陷入和信号机构 return;/*完成处理*/if(用户定义了处理信号的函数)得到user中信号处理函数的用户虚拟地址;清除user中存放信号处理函数地址的字段;修改用户级环境:创建一个用户栈元,用来模仿调用信号处理函数;修改系统级环境:将信号处理函数的地址写到寄存器PC中;第第7 7章章 中断、中断、陷入和信号机构陷入和信号机构 return;if(信号属于要转储进程内存映像)在当前目录中建立名为“core”的文件;将用户级环境的内容写到“core”文件中;调用exit算法,终止进程;第第7 7章章 中断、中断、陷入和信号机构陷入和信号机构 习习 题题 1.解释下列概念:中断、异常、中断源、中断请求、断点、现场、中断向量。2.中断响应主要做哪些工作?中断处理的主要步骤是什么?3.说明中断发生时,CPU控制权的转换与主、子程序间调用转换的不同点。4.中断的屏蔽和禁止的差别是什么?为什么要对中断屏蔽(或禁止)?第第7 7章章 中断、中断、陷入和信号机构陷入和信号机构 5.说明在UNIX系统中对系统调用的主要处理过程。6.在UNIXS_5中,通常在中断或系统调用处理完毕,返回到用户态情况下,如发现有重调度标志,才做进程调度。你认为这样做的好处是什么。7.为什么说中断和系统调用是激活操作系统的动力?8.说明在UNIX系统中是怎样实现下列事件处理的:用户程序中使用系统调用,在其处理过程中接到盘中断,之后又接到时钟中断。第第7 7章章 中断、中断、陷入和信号机构陷入和信号机构 9.中断发生后,往往由硬件把PC和PS寄存器的值保留起来,能否改由软件去做?为什么?10.对陷入处理的方式有哪些?11.说明信号机构的工作原理。12.为什么信号处理要在用户空间进行?信号处理时,为了实现从核心空间转到用户空间,系统应对核心栈和用户栈做怎样的处理?第第7 7章章 中断、中断、陷入和信号机构陷入和信号机构 13.图7-7示出了本题与文件系统处理有关的部分数据结构。现在要执行系统调用n=write(3,A,1500),问:(1)执行此系统调用的主要过程是什么?(2)活动节点中i_size,i_addr(盘块索引表)以及超级块中空闲盘块表在上面系统调用执行后有何变化?试在图中标出这种变化。第第7 7章章 中断、中断、陷入和信号机构陷入和信号机构 图7-7与本题有关的部分数据结构