中断在操作系统中的应用.ppt

上传人:小飞机 文档编号:5909767 上传时间:2023-09-02 格式:PPT 页数:27 大小:1.97MB
返回 下载 相关 举报
中断在操作系统中的应用.ppt_第1页
第1页 / 共27页
中断在操作系统中的应用.ppt_第2页
第2页 / 共27页
中断在操作系统中的应用.ppt_第3页
第3页 / 共27页
中断在操作系统中的应用.ppt_第4页
第4页 / 共27页
中断在操作系统中的应用.ppt_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《中断在操作系统中的应用.ppt》由会员分享,可在线阅读,更多相关《中断在操作系统中的应用.ppt(27页珍藏版)》请在三一办公上搜索。

1、,中断在操作系统中的应用,中 断 实 现 的 机 制,系 统 调 用 与 中 断的 关 系,硬 件 中 断 的 例 子 及 其 工 作 原 理,一、,二、,三、,中断的定义:,在CPU执行程序的过程中,出现了某种紧急或异常的事件(中断请求),CPU需暂停正在执行的程序,转去处理该事件(执行中断服务程序),并在处理完毕后返回断点处继续执行被暂停的程序,这一过程称为中断。断点处是指返回主程序时执行的第一条指令的地址。,中断源:指能够引起中断的原因或发出中断申请的来源。主要有以下几类:,(1)外部设备请求中断。一般的外部设备如键盘、磁盘驱动器、磁带机、打印机等在工作告一段落后发出中断请求,要求CPU

2、为它服务。(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个外设的中断请求组合起来作为一个端口(中断寄存器),并将各个外设的中断请求信号相或,产生一个总的INT信号。

6、,软件查询法的硬件电路,软件查询方式的流程图,2)硬件排队电路 采用硬件排队电路法,各个外设的优先级与其接口在排队电路中的位置有关。常用的硬件优先权排队电路有链式优先权排队电路、硬件优先级编码加比较器的排队电路等。下图给出了一个链式优先级排队电路。图中,当响应信号沿链式电路进行传递时,最靠近CPU并发出中断请求的接口将首先拦截住响应信号,CPU进入相应外设的中断处理程序,在服务完成后,该外设撤消其中断请求,解除对下一级外设的封锁。,3中断嵌套 CPU在执行低级别中断服务程序时,又收到较高级别的中断请求,CPU暂停执行低级别中断服务程序,转去处理这个高级别的中断,处理完后再返回低级别中断服务程序

7、,这个过程称为中断嵌套,如图所示。,一般CPU响应中断请求后,在进入中断服务程序前,硬件会自动实现关中断,这样,CPU在执行中断服务程序时将不能再响应其他中断请求。为了实现中断嵌套,应在低级别中断服务程序的开始处加一条开中断指令STI。能够实现中断嵌套的中断系统,其软、硬件设计都非常复杂,如果采用了可编程中断控制器,就会方便很多。,中断响应:经中断排队后,CPU收到一个当前申请中断的中断源中优先级别最高的中断请求信号,如果满足条件,则中止执行现行程序,响应中断申请。,中断响应的条件:有中断请求信号 中断请求没有被屏蔽 CPU允许响应中断请求 CPU在现行指令执行结束时响应中断,响应步骤1.标志

8、寄存器内容入栈2.IF清零3.保护断点,即当前CS、IP入栈4.寻找中断服务程序入口地址,中断处理:中断处理的过程实际就是CPU执行中断服务程序的过程。用户编写的用于CPU为中断源进行中断处理的程序称为中断服务程序。由于不同中断源在系统中的作用不同,所要完成的功能不同,因此,不同中断源的中断服务程序内容也各不相同。例如,对于图7.11所示的输入设备,其中断服务程序的主要任务是用输入指令(IN)从接口中的数据端口向CPU输入数据。,中断返回:执行完中断服务程序,返回到原先被中断的程序,此过程称为中断返回。为了能正确返回到原来程序的断点处,在中断服务程序的最后应专门放置一条中断返回指令(如8086

9、/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.DLL等,编写程序的时候可以直接调用里面的GETDC等函数库。在DOS系统下,操

12、作系统不以函数库形式提供系统调用,而是把整个操作系统的所有代码都LOAD到内存里面,把相关系统调用功能安装到中断接口里面,我们写的程序需要调用的时候,调用相应的中断。比如打开文件等操作,就调用INT 21,中 断 实 现 的 机 制,系 统 调 用 与 中 断的 关 系,硬 件 中 断 的 例 子 及 其 工 作 原 理,一、,二、,三、,1.设计一个中断处理程序。要求中断请求信号以跳变方式由IR2引入(可为任一定时脉冲信号),当CPU响应IR2请求时,输出字符串“8259A INTERRUPT!”,中断10次,程序退出(设8259A的端口地址为20H和21H,中断类型号为40H)。,中断处理

13、程序如下:DATASEGMENTMESSDB8259A?INTERRUPT!,0AH,0DH,$COUNT DB 10;计数值为10DATAENDSSTACK SEGMENTSTACKSTA DB100H DUP(?)TOP EQULENGTHSTA;数据块长度为100H的符号名STACK ENDSCODE SEGMENTASSUMECS:CODE,DS:DATA,SS:STACKMAIN:CLI;令IF=0关闭中断MOV AX,DATAMOV DS,AX;初始化DSMOV AX,STACKMOV SS,AX;初始化SSMOV SP,TOPMOV AL,13H;8259A初始化,ICW1的内容

14、,OUT 20H,AL;单片,边沿触发MOV AL,40H;中断类型号40HOUT 21H,AL;写入ICW2的口地址A=1MOV AL,01H;非自动结束OUT 21H,AL MOV AX,SEG INT-P;设置中断向量MOV DS,AX;中断服务子程序入口段基址送DSMOV DX,OFFSET INT-P;中断服务子程序入口偏移地址送DXMOV AL,42H;IR2的中断类型号42H送ALMOV AH,25H;25H功能调用INT 21HINAL,21H;读IMR(中断屏蔽寄存器)AND AL,0FBH;允许IR2请求中断OUT 21H,AL;写中断屏蔽字OCW1WAIT1:STI;开中

15、断(令IF=1开中断)CMP COUNT,0;判断10次中断是否结束JNZ WAIT1;未结束,等待MOV AX,4C00H;结束,返回DOSINT 21HINT-P PROC;中断服务子程序PUSH DS;保护现场PUSH AXPUSH DX,STI;开中断MOV DS,AXMOV DX,OFFSET MESSMOV AH,09HINT 21HDEC COUNT;控制10次循环-1JNZ NEXTIN AL,21H;读IMROR AL,04H;屏蔽IR2请求OUT 21H,ALNEXT:CLI;关中断MOV AL,20H;写OCW2,送中断结束命令EOIOUT 20H,ALPOP DX;恢复

16、现场POP AX POP DSIRET;中断返回INT-P ENDPCODEENDSEND 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!=0 xf0)/正常运行时主函数P33=0;while(pd=0)|(pd1=0)if(pd=1)/修改密码时主函数while(pd1=1),void Time0(void)interrupt 0 usi

17、ng 0/修改密码中断,优先级高uchar Key_Value;P1=0 xf0;if(P1!=0 xf0)Delay_1ms(20);if(P1!=0 xf0)Delay_1ms(20);if(P1!=0 xf0)Key_Value=Keyscan();id=tableKey_Value;void Time1(void)interrupt 2 using 0/正常运行中断,优先级低,3.基于MSP430单片机的AD中断程序,void ADC12_Sampling_SequenceChannelsSingleConvert(void)/设置转换模式/ADC12控制寄存器设置ADC12CTL0=

18、ADC12ON+REFON+REF2_5V+SHT0_2;/CONSEQ_1表示当前模式为序列通道单次转换,起始地址为ADC12MCTL0,结束地址ADC12MCTL2ADC12CTL1=ADC12SSEL_0+SHP+CONSEQ_1+CSTARTADD_0;/转换通道设置ADC12MCTL0=SREF_0+INCH_0;/参考电压:V+=Vref+,V-=AVss ADC通道:A0ADC12MCTL1=SREF_0+INCH_1;/参考电压:V+=Vref+,V-=AVss ADC通道:A1ADC12MCTL2=SREF_0+INCH_2+EOS;/参考电压:V+=Vref+,V-=AVs

19、s 通道A2,并且其作为最后一个通道,EOS应当置位,否则转换时间会很长/启动转换ADC12IE=0 x0004;/设置P6.2口中断允许_EINT();/开全局中断,与51中EA=1类似ADC12CTL0|=ENC+ADC12SC;/转换使能开始转换,#pragma vector=ADC_VECTOR_interrupt void ADC()_NOP();/处理 result_0i=ADC12MEM0;/将转换结果放在result中,返回供使用 result_1i=ADC12MEM1;result_2i=ADC12MEM2;/在转换中,即使没有用到最后一个转换位,ADCMEM6的值,也要将其

20、读出来,才能将中断标号复位,/从而保证其正常工作void main()/Stop watchdog timer to prevent time out reset WDTCTL=WDTPW+WDTHOLD;sys_ClockInit();USART_Init();P1DIR/开全局中断,while(1)/P1中断服务子程序#pragma vector=PORT1_VECTOR_interrupt void P1_IRQ(void)switch(P1IFG)/根据中断标志位进行不同工作 case 0 x01:func+;if(func=2)func=0;break;/引脚0 case 0 x02:if(func1=0)func1=1;else func1=0;break;/引脚1 case 0 x04:if(func=0)func2+;if(func2=3)func2=0;break;/引脚2 case 0 x08:if(func=0)/清除P1口中断请求,Thank You!,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号