第七章中断和信号结构几乎所有的计算机都使用到中断,中断是一种重要的传送控制方式。在操作系统中,当设备完成I/O操作后,要发中断。CPU启动外部设备后,继续执行自己的程序,不去查询外设的状态,当外设完成工作时,向CPU发出请求(称为中断请求),CPU接到请求后,暂时中止当前正在执行的程序,而执行另一段专用程序(称为中断服务程序或中断处理程序),完成数据交换,然后再返回到原来被中断的程序继续执行。注意的几点:CPU可以和外设并行工作;外设何时请求的随机性。7.1中断处理7.1.1中断的一般处理过程1.中断的概念是指:CPU对系统发生的某个事件作出的一种反应,暂停、保留现场、处理程序、返回断点继续。注:⑴中断最初是作为通道(或设备)与CPU之间进行通信的工具;后来其他部件也可以造成中断,如程序在CPU执行时出现运算溢出、取数时奇偶错、电源故障、时钟计数到时等。中断概念另一个发展是访管指令(系统调用),用户程序可以使用这些系统调用来得到系统内部服务。⑵中断源:引起中断的事件。中断请求:中断源向CPU提出进行处理的请求称为中断请求。断点:被打断程序的暂停点称为断点。2.中断的特点:程序切换(程序转移)和随机性。由当前正在执行的程序转到中断服务程序,处理完随机事件后再转回被中止的程序。能够处理复杂事件。指令计数器PC和一些寄存器的内容都会改变,断点和现场信息都需要保存,因而难于适应高速数据传送,一般用于处理中、低速I/O操作。不同于子程序调用。没有随机性,和程序的直接关联。3.中断方式的应用:⑴处理中、低速I/O操作,实现主机与外设的并行工作。对于键盘,往往主动向主机提出随机请求;对于打印机一类,由CPU在程序中有意调用。主机有意调用外设,外设请求随机,处理也是随机的。⑵处理故障。计算机什么时候出现故障是随机的,需要采用中断方式进行处理。程序运行过程中,一旦出现硬件或软件方面的故障,由故障源主动提出请求,CPU响应,转入事先编制好的故障处理程序进行处理。如掉电、校验错、运算错等常见硬件故障。访存地址越界,非法指令等⑶进行实时处理实时处理需要在某个事件出现的实际时间内及时地进行处理。通常可采用两种方式进行中断处理。一种是设置定时时钟,每隔一段时间便发出时钟中断请求;另一种是被控参数突然异常,直接提出中断请求。⑷使用软中断许多计算机都设置了软中断指令,其格式为INT中断号。①程序的调试。在程序的任何位置都可设置一条软中断指令,即设置程序断点。②系统功能调用。为了便于用户使用系统的一些功能,如打开文件,拷贝文件,显示,打印等,将这些系统功能编制成若干中断服务程序,用户通过执行软中断指令,可以调用这些程序模块。比上一种要复杂些。作为一般的子程序调用。⑸实现人机对话人机对话指用户与机器的交互操作,是用户干预系统运行的一种有效手段。⑹实现多机通信因此,中断方式不仅用于I/O传送的控制,还广泛地用来处理各种带随机性质的事件。4.中断的组织方式:不能在程序的预定位置处理,所以需采用模块化的思想,将现行程序(主程序)与中断处理程序(中断子程序)分开组织。主程序主要完成初始化中断接口、开中断、启动I/O操作等工作,以便在主程序的执行过程中能响应随机提出的中断请求。中断处理程序:针对系统中各中断源的情况事先编写,通过入口地址存于主存。对众多服务程序入口地址的有效组织和管理成为实现中断方式的关键。下面我们讨论如何获得服务程序的入口地址:⑴非向量中断:将各个中断服务程序的入口地址编写在一个查询程序中。⑵向量中断方式:将各个中断服务程序的入口地址(中断向量)组织在中断向量表中,当CPU响应中断时,由硬件直接产生对应于中断源的向量地址,按该地址访问向量表,取得服务程序的入口,转入相应的中断服务程序。①中断向量:一般指服务程序的入口地址②中断向量表:将各个中断服务程序的入口地址及其程序状态字集中存放一张一维表格中。③向量地址:访问中断向量表的存储器地址称为向量地址向量中断方式这一系列操作均由硬件逻辑快速完成,所以所有的计算机系统几乎都使用。中断类型号0#1#2#3#…255#向量地址00000H00004H00008H…003FCH0#1#2#3#4#….255#入口中断向量表5.中断接口:中断控制器接收各接口产生的中断请求信号,经过屏蔽和判优形成公共请求信号INT送往CPU。在收到CPU发来的中断响应信号INTA后,中断控制器又通过数据总线,向CPU送出获得响应的中断源的类型号。7.1.2系统调用的实施1.系统调用的接口⑴一般的函数调用序列并不能把进程的状态从用户态变为核心态,而系统调用却可以做到这一点。⑵UNIX系统的核心对外提供了多个系统调用,这些系统调用的外在使用形式与C语言的函数调用形式相同。实现他们的汇编代码形式通常以trap指令开头。⑶当处理机执行到trap指令时,处理机的状态就从用户态变为核心态。⑷trap过程:当处理机执行到trap指令时,陷入处理子程序对用户态下的trap指令引起的陷入事件进行处理,查询系统调用入口表(先进行参数传递,然后执行相应的系统调用程序)。第二次课⑸trap指令的格式:Trapxx参数1参数2………fork:2read:3write:4传递参数方式:r0、r1;在trap后自带参数。⑹系统调用入口表sysentsetjmp函数参数个数标志处理程序注释01nosys0=indir11rexit1=exit01fork2=fork30read3=read30write4=write30open5=open10close6=close…….………………2.系统调用实施过程:⑴操作系统是一个整体,各个部分相互关联、密切配合。⑵一条系统调用实现的全过程:系统调用对应到汇编指令trap执行到trap指令,处理机由用户态变为核心态查系统调用入口表,转去执行相应的处理程序如涉及到I/O操作,则经由文件系统处理后再转设备驱动I/O完成后,发中断信号,进行中断处理系统调用执行完,可调度原进程运行。用户进程A运行中,向已打开文件fd写一批数据rw=write(fd,buf,count)编译形成trap4指令①处理机执行trap4指令,硬件作出中断响应:保留进程A的PS和PC值。取中断向量放入寄存器(PS和PC)中。控制转向一段核心代码,将进程状态改变成核心态,进一步保留现场信息(各通用寄存器的值),再进入统一的处理程序。处理程序查表,得到相应处理子程序的入口地址。②转入文件管理,根据fd找到活动I节点,权限合法后,地址转换,申请和分配缓冲区,内存区的buf传递到缓冲区,进入设备驱动程序。③启动设备驱动程序(磁盘),将缓冲区信息写入盘块,A睡眠④处理机调度,就绪队列如B⑤写盘完成,I/O中断,硬件响应,转入磁盘中断处理程序。⑥处理程序处理中断,唤醒A⑦进行调度调度A,恢复现场,A继续执行。总结:利用中断和陷入防护司,处理机就由用户态转到核心态。系统初启是激活操作系统的原动力。7.2UNIX信号机构⑴异步进程可以通过彼此发送信号来实现简单通信。用不同信号表示不同事件,运行进程遇到相应事件或要求时,把该信号写入接收进程PCB中,接收进程在运行过程中检测自身信号,有,则转入信号处理程序。处理完回到原程序。⑵和中断的区别:信号的设置、检测等都由软件实现。信号处理机构:系统中围绕信号的产生、传送和处理而构成的一套机构。①信号的分类、产生和传送②对各种信号预先规定处理方式③信号的检测和处理。7.2.1信号分类⑴在UNIXS-5中规定了19种信号⑵0信号表示没有收到信号,大于规定不理睬⑶进程间可以用系统调用kill或shell中的命令kill来发送信号。7.2.2信号处理方式(user)在user中,有一个数组signal,信号的编号就对应数组下标,其元素值规定了该进程收到相应信号时所采用的动作。7.2.3信号的检测和处理只在适当的时机进程才检测它是否收到信号检测信号的程序是issig检测时机:⑴trap末尾;⑵时钟中断结束前⑶进程以低pri请求睡眠值信号的处理方式02n+12n终止忽略入口地址