《中断在操作系统中的应用课件》由会员分享,可在线阅读,更多相关《中断在操作系统中的应用课件(27页珍藏版)》请在金锄头文库上搜索。
1、,中断在操作系统中的应用,中 断 实 现 的 机 制,系 统 调 用 与 中 断 的 关 系,硬 件 中 断 的 例 子 及 其 工 作 原 理,一、,二、,三、,中断的定义:,在CPU执行程序的过程中,出现了某种紧急或异常的事件(中断请求),CPU需暂停正在执行的程序,转去处理该事件(执行中断服务程序),并在处理完毕后返回断点处继续执行被暂停的程序,这一过程称为中断。断点处是指返回主程序时执行的第一条指令的地址。,中断源:指能够引起中断的原因或发出中断申请的来源。主要有以下几类:,(1)外部设备请求中断。一般的外部设备如键盘、磁盘驱动器、磁带机、打印机等在工作告一段落后发出中断请求,要求CP
2、U为它服务。 (2)实时时钟请求中断。如定时/计数器,先有CPU发出指令,让时钟电路开始计时工作,待规定的时间到,时钟电路发出中断申请,CPU转入中断服务程序进行中断处理。 (3)故障请求中断。当出现电源掉电、存储出错或溢出故障时,发出中断请求,CPU转去执行故障处理程序,如启动备用电源、报警等。 (4)异常。由于CPU执行指令引起的中断,中断的分类: 1.按中断的性质来划分,则系统中的中断可分为:可屏蔽中断和不可屏蔽中断。对不可屏蔽中断,程序员不能控制它,系统肯定会立即响应的,而对于可屏蔽中断,汇编语言程序员可以通过指令CLI和STI来控制对它们的响应。 2.按中断源来划分,则系统中的中断又
3、可分为:硬件中断和软件中断。对于硬件中断,程序员不能控制它,它们基本上是随机产生的,而对于软件中断,汇编语言程序员可通过指令INT和INTO来有目的安排它们的。,中断请求,中断排队,中断响应,中断处理,中断返回,中断处理过程,中断请求是由中断源向CPU发出中断请求信号。软件中断源是在CPU内部由中断指令或程序出错直接引发中断;硬件中断源必须通过专门的电路将中断请求信号传送给CPU,CPU也有专门的引脚接收中断请求信号。例如,8086/8088 CPU用INTR引脚(可屏蔽中断请求)和NMI引脚(非屏蔽中断请求)接收硬件中断请求信号。一般外设发出的都是可屏蔽中断请求,中断排队:通常,系统中有多个
4、中断源,当有多个中断源同时发出中断请求时,要求计算机能确定哪个中断更紧迫,以便首先响应。为此,计算机给每个中断源规定了优先级别,称为优先权。这样,当多个中断源同时发出中断请求时,优先权高的中断能先被响应,只有优先权高的中断处理结束后才能响应优先权低的中断。计算机按中断源优先权高低逐次响应的过程称优先权排队,这个过程可通过硬件电路来实现,亦可通过软件查询来实现。,1中断优先级 中断请求是随机发生的,当系统具有多个中断源时,有时会同时出现多个中断请求,CPU只能按一定的次序予以响应和处理,这个响应的次序称为中断优先级。对于不同级别的中断请求,一般的处理原则是: (1) 不同优先级的多个中断源同时发
5、出中断请求,按优先级由高到低依次处理。 (2) 低优先级中断正在处理,出现高优先级请求,应转去处理高优先级请求,服务结束后再 返回原优先级较低的中断服务程序继续执行。 (3) 高优先级中断正在处理,出现低优先级请求,可暂不响应。 (4) 中断处理时,出现同级别请求,应在当前中断处理结束以后再处理新的请求。,2中断优先级的确定 在微机系统中通常用三种方法来确定中断源的优先级别,即软件查询法、硬件排队电路法和专用中断控制芯片法。,1) 软件查询法 软件查询法需要简单的硬件电路支持。以8个中断源为例,其硬件电路如图所示,将8个外设的中断请求组合起来作为一个端口(中断寄存器),并将各个外设的中断请求信
6、号相或,产生一个总的INT信号。,软件查询法的硬件电路,软件查询方式的流程图,2) 硬件排队电路 采用硬件排队电路法,各个外设的优先级与其接口在排队电路中的位置有关。常用的硬件优先权排队电路有链式优先权排队电路、硬件优先级编码加比较器的排队电路等。下图给出了一个链式优先级排队电路。图中,当响应信号沿链式电路进行传递时,最靠近CPU并发出中断请求的接口将首先拦截住响应信号,CPU进入相应外设的中断处理程序,在服务完成后,该外设撤消其中断请求,解除对下一级外设的封锁。,3中断嵌套 CPU在执行低级别中断服务程序时,又收到较高级别的中断请求,CPU暂停执行低级别中断服务程序,转去处理这个高级别的中断
7、,处理完后再返回低级别中断服务程序,这个过程称为中断嵌套,如图所示。,一般CPU响应中断请求后,在进入中断服务程序前,硬件会自动实现关中断,这样,CPU在执行中断服务程序时将不能再响应其他中断请求。 为了实现中断嵌套,应在低级别中断服务程序的开始处加一条开中断指令STI。能够实现中断嵌套的中断系统,其软、硬件设计都非常复杂,如果采用了可编程中断控制器,就会方便很多。,中断响应:经中断排队后, CPU收到一个当前申请中断的中断源中优先级别最高的中断请求信号,如果满足条件, 则中止执行现行程序, 响应 中断申请。,中断响应的条件: 有中断请求信号 中断请求没有被屏蔽 CPU允许响应中断请求 CPU
8、在现行指令执行结束时响应中断,响应步骤 1.标志寄存器内容入栈 2.IF清零 3.保护断点,即当前CS、IP入栈 4.寻找中断服务程序入口地址,中断处理: 中断处理的过程实际就是CPU执行中断服务程序的过程。用户编写的用于CPU为中断源进行中断处理的程序称为中断服务程序。由于不同中断源在系统中的作用不同,所要完成的功能不同,因此,不同中断源的中断服务程序内容也各不相同。例如,对于图7.11所示的输入设备,其中断服务程序的主要任务是用输入指令(IN)从接口中的数据端口向CPU输入数据。,中断返回: 执行完中断服务程序,返回到原先被中断的程序,此过程称为中断返回。为了能正确返回到原来程序的断点处,
9、在中断服务程序的最后应专门放置一条中断返回指令(如8086/8088的IRET指令)。中断返回指令的作用实际上是恢复断点,也就是保护断点的逆过程。,中 断 实 现 的 机 制,系 统 调 用 与 中 断 的 关 系,硬 件 中 断 的 例 子 及 其 工 作 原 理,一、,二、,三、,前面已经讲过中断的定义,那什么是系统调用呢?,所谓系统调用,就是内核提供的、功能十分强大的一系列的函数。这些系统调用是在内核中实现的,再通过一定的方式把系统调用给用户,一般都通过门(gate)陷入(trap)实现。系统调用是用户程序和内核交互的接口。 操作系统的主要功能是为应用程序的运行创建良好的环境,为了达到这
10、个目的,内核提供一系列具备预定功能的多内核函数,通过一组称为系统调用的(system call)的接口呈现给用户。系统调用把应用程序的请求传给内核,调用相应的的内核函数完成所需的处理,将处理结果返回给应用程序,如果没有系统调用和内核函数,用户将不能编写大型应用程序。,整个系统调用的过程可以总结如下: 1 执行用户程序(如:fork) 2 根据glibc中的函数实现,取得系统调用号并执行int $0 x80产生中断。 3 进行地址空间的转换和堆栈的切换,执行SAVE_ALL。(进行内核模式) 4 进行中断处理,根据系统调用表调用内核函数。 5 执行内核函数。 6 执行RESTORE_ALL并返回
11、用户模式,系统调用和中断调用有什么联系和区别呢?,首先它们都是操作系统概念。中断调用是DOS操作系统中,系统调用的特殊形式而已。 系统调用,都是指操作系统的开发者,提供了许多系统的程序库,实现输入/输出等基本的功能,我们编写程序的时候就调用这些程序库,不必要自己到显示器上绘图和读取键盘端口。 在UNIX操作系统下,系统调用主要是C语言格式调用的一些函数库。比如printf和scanf函数,我们写程序的时候直接可以用,编译系统把它转变为对操作系统函数库调用的代码,目标文件可以独立运行。 在WINDOWS系统,系统调用主要是以一系列的DLL、EXE文件方式给出,比如USER32.DLL、NTDLL
12、.DLL等,编写程序的时候可以直接调用里面的GETDC等函数库。 在DOS系统下,操作系统不以函数库形式提供系统调用,而是把整个操作系统的所有代码都LOAD到内存里面,把相关系统调用功能安装到中断接口里面,我们写的程序需要调用的时候,调用相应的中断。比如打开文件等操作,就调用INT 21,中 断 实 现 的 机 制,系 统 调 用 与 中 断 的 关 系,硬 件 中 断 的 例 子 及 其 工 作 原 理,一、,二、,三、,1.设计一个中断处理程序。要求中断请求信号以跳变方式由IR2引入(可为任一定时脉冲信号),当CPU响应IR2请求时,输出字符串“8259A INTERRUPT!”,中断10
13、次,程序退出(设8259A的端口地址为20H和21H,中断类型号为40H)。,中断处理程序如下: DATASEGMENT MESSDB8259A? INTERRUPT!, 0AH, 0DH, $ COUNT DB 10; 计数值为10 DATAENDS STACK SEGMENTSTACK STA DB100H DUP(?) TOP EQULENGTHSTA ;数据块长度为100H的符号名STACK ENDS CODE SEGMENT ASSUMECS:CODE, DS:DATA, SS:STACK MAIN: CLI ;令IF=0关闭中断 MOV AX,DATA MOV DS, AX ;初始
14、化DS MOV AX, STACK MOV SS, AX ;初始化SS MOV SP, TOP MOV AL, 13H ; 8259A初始化,ICW1的内容,OUT 20H, AL ; 单片, 边沿触发 MOV AL, 40H ; 中断类型号40H OUT 21H, AL ;写入ICW2的口地址A=1 MOV AL, 01H ; 非自动结束 OUT 21H, AL MOV AX, SEG INT-P ; 设置中断向量 MOV DS, AX ; 中断服务子程序入口段基址送DS MOV DX, OFFSET INT-P ;中断服务子程序入口偏移地址送DX MOV AL, 42H ; IR2的中断类
15、型号42H送AL MOV AH, 25H ; 25H功能调用 INT 21H INAL, 21H ; 读IMR(中断屏蔽寄存器) AND AL, 0FBH; 允许IR2请求中断 OUT 21H, AL ; 写中断屏蔽字OCW1 WAIT1:STI ; 开中断(令IF=1开中断) CMP COUNT,0 ; 判断10次中断是否结束 JNZ WAIT1 ; 未结束, 等待 MOV AX, 4C00H ; 结束, 返回DOS INT 21H INT-P PROC ; 中断服务子程序 PUSH DS ; 保护现场 PUSH AX PUSH DX,STI ; 开中断 MOV DS, AX MOV DX,
16、 OFFSET MESS MOV AH, 09H INT 21H DEC COUNT ; 控制10次循环 -1 JNZ NEXT IN AL, 21H ; 读IMR OR AL, 04H ; 屏蔽IR2请求 OUT 21H, AL NEXT: CLI ; 关中断 MOV AL, 20H ; 写OCW2, 送中断结束命令EOI OUT 20H, AL POP DX ; 恢复现场 POP AX POP DS IRET ; 中断返回 INT-P ENDP CODEENDS END MAIN,2.基于51单片机的密码锁中断程序,void main() while(1) EA=1; /全局中断允许位 EX0=1; /外部中断0允许位 EX1=1; /外部中断1允许位 IT0=0; /外部中断0触发方式为跳变沿触发 IT1=0; /外部中断0触发方式为跳变沿触发 pd=0; pd1=0; pd2=1; if(P1!