中断在操作系统中的应用

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

中断在操作系统中的应用(**大学电子信息学院,四川成都610065)摘要:计算机执行期间,系统内如果发生任何非寻常的或非预期的急需处理事件,使得CPU暂时中断当前正在执行的程序而转去执行相应的时间处理程序,待处理完毕后又会返回原来被中断处继续执行或调度新的进程执行的过程。这就是中断过程,文章主要讲述中断在操作系统中的应用,并从以下几方面进行讨论:中断实现的机制,系统调用与中断的关系,最后列举出3-5个硬件中断的例子,并详细的讨论其工作原理。关键词:中断;操作系统;实现机制;系统调用theapplicationofinterruptintheoperatingsystemLIUDi(ElectronicsandInformationEngineering,SichuanUniversity,Chengdu,610065,China)Abstract:duringcomputerexecutioniftherewassomeunusualorunexpectedeventswhatwasbadlyneededtodealwithinthesystem,theCPUinterruptedtemporarilytheprogramwhatwasexecutingandstartedtoexecutethetimehander,whenthebehindwasover,itwouldcontinuetheoriginalwork.Thiswasinterrupt,thearticlefocusedondescribingtheapplicationofinterruptintheoperatingsystem,andwoulddiscussfromthefollowingaspects:theimplementationmechanismofinterrupt,therelationshipbetweenthesystemcallandinterrupt,enumerateseveralexamplesabouthardwareinterrupts,anddiscussedtheirworkingprincipleindetail.Keywords:interrupt;operatingsystem;implementationmechanism;systemcall一、引言中断是CPU实时地处理内部或外部事件的一种内部机制。当某种内部或外部事件发生时,中断系统将迫使CPU暂停正在执行的程序,转而去进行中断事件的处理,中断处理完毕后,又返回被中断的程序处,继续执行下去。但中断技术发展到今天,中断已不再限于只能由外部设备产生,中断可以由程序预先安排,即所谓软件中断。中断是计算机中的一个十分重要的概念,在现代计算机中毫无例外地都要采用中断技术,随着计算机的发展,中断系统不仅能解决前述快速主机和慢速外设的矛盾,还能实现像分时操作、实时处理、故障处理等操作。但还有一类是由于CPU执行指令引起的中断,这种中断又叫异常。中断:由硬件电平引起,恢复后CPU执行下一条指令异常:由软件指令引起,恢复后CPU重新执行该条指令以下将从几个方面讨论中断在操作系统中的作用,并举例说明。二、中断实现的机制先是中断源,即引起中断的原因或发出中断申请的来源,它有以下几类:(1)外部设备请求中断(2)实时时钟请求中断(3)故障请求中断,三种中断原因具有随机性,是由外部事件引起的。再是中断处理过程,一个完整的中断处理过程应该包括中断请求、中断排队或称中断判优、中断响应、中断处理和中断返回等环节。(1)中断请求是由中断源像CPU发出中断请求信号,但条件是外部设备工作已经告一段落或系统允许该外设发出中断请求;(2)中断排队是预先安排一个优先级顺序,当多个中断源同时申请中断时,即按此优先级顺序进行排队,等候CPU处理,一般是把最紧迫和速度最高的设备排在最优先的位置上,排队即可采用硬件的方法也可用软件的方法,各有所长所短;(3)经中断排队后,CPU收到一个当前申请中断的中断源中优先级别最高的中断请求信号,如果满足条件,则中止执行现行程序,响应中断申请,条件是有中断请求信号,中断请求没有被屏蔽,CPU允许响应中断请求,CPU在现行指令执行结束,响应步骤:1、标志寄存器内容入栈2、IF清零3、保护断点,即当前CS、IP入栈4、寻找中断服务程序入口地址然后寻找中断服务程序入口地址的方法有软件查询方式,而在硬件方式中,目前大都采用矢量中断方式;(4)中断处理过程包括:①保护现场:保护中断服务程序中所要使用到的寄存器内容,用PUSH指令将所有在中断服务子程序中用到的寄存器压入堆栈。②进行与此次中断有关的服务处理③恢复现场:恢复中断前各寄存器的内容.在中断服务子程序结束前(IRET指令前)用POP指令把刚才压入堆栈的寄存器弹回④如果在中断服务程序中允许中断嵌套,还应将IF=1(即开中断)。(5)最后是中断返回,先是执行指令IRET,断点CS、IP出栈,标志寄存器FR出栈,然后被中断的程序就可以从断点处继续执行,于是CPU从中断服务程序又返回到被中断的主程序。三、系统调用与中断的关系在系统中真正被所有进程都使用的内核通信方式是系统调用。例如当进程请求内核服务时,就使用的是系统调用。一般情况下,进程是不能够存取系统内核的。它不能存取内核使用的内存段,也不能调用内核函数,CPU的硬件结构保证了这一点。只有系统调用是一个例外。进程使用寄存器中适当的值跳转到内核中事先定义好的代码中执行,(当然,这些代码是只读的)。在Intel结构的计算机中,这是由中断0x80实现的。系统调用,都是指操作系统的开发者,提供了许多系统的程序库,实现输入/输出等基本的功能,我们编写程序的时候就调用这些程序库,不必要自己到显示器上绘图和读取键盘端口。在UNIX操作系统下,系统调用主要是C语言格式调用的一些函数库。比如printf和scanf函数,我们写程序的时候直接可以用,编译系统把它转变为对操作系统函数库调用的代码,目标文件可以独立运行。在WINDOWS系统,系统调用主要是以一系列的DLL、EXE文件方式给出,比如USER32.DLL、NTDLL.DLL等,编写程序的时候可以直接调用里面的GETDC等函数库。在DOS系统下,操作系统不以函数库形式提供系统调用,而是把整个操作系统的所有代码都LOAD到内存里面,把相关系统调用功能安装到中断接口里面,我们写的程序需要调用的时候,调用相应的中断。比如打开文件等操作,就调用INT21。当CPU执行到中断指令“INT0x80”时,硬件就做出一系列响应,其动作与上述的中断响应相同。CPU穿过陷阱门,从用户空间进入系统空间。相应地,进程的上下文从用户堆栈切换到系统堆栈。接着运行内核函数system_call()。首先,进一步保存各寄存器的内容;接着调用syscall_trace(),以系统调用号为下标检索系统调用入口表sys_call_table,从中找到相应的函数;然后转去执行该函数,完成具体的服务。执行完服务程序,核心检查是否发生错误,并作相应处理。如果本进程收到信号,则对信号作相应处理。最后进程从系统空间返回到用户空间。这主要是Linux内核中系统调用与中断的联系。四、硬件中断举例例1使用外部中断0,当每次响应中断时,P1口依次输出高电平,使8个发光二极管依次循环熄灭闪烁。1)电路设计ORG0000HLJMPMAIN;转主程序ORG0003H;外部中断0入口地址LJMPEXTER;转中断程序ORG1000HMAIN:SETBIT0;外部中断0下降沿有效SETBEX0;外部中断0允许SETBEA;总中断允许LOOP:AJMPLOOP;等待中断ORG1050H;中断程序入口EXTER:MOVR2,#0FFH;置循环次数MOVA,#01H;灯亮初值FLASH:RRA;右移一位MOVR7,#0FFH;定时LOOP1:MOVR6,#0FFHLOOP2:NOPNOPDJNZR6,LOOP2DJNZR7,LOOP1MOVP1,A;控制灯的亮灭DJNZR2,FLASH;循环RETI;中断返回END例2定时器举例通过定时器1来产生中断,控制P1.0线上的脉冲输出,并经三极管驱动扬声器,发出音调信号。1)电路设计ORG0000HLJMPMAINORG001BH;中断入口地址CPLP1.0RETIORG1000HMAIN:MOVR1,#00HMOVR0,#23HMOVTMOD,#20H;定时器1工作方式2MOVIE,#88H;定时器1允许中断L1:MOVDPTR,#3FFFHMOVA,R0;取数INCR0;修改指针MOVCA,@A+PC;查表JZMAINMOVR1,A;计算计数初值MOVA,#0FFHCLRCSUBBA,R1RLAMOVTH1,A;置计数初值SETBTR1;开始计数L2:CLRCMOVA,DPL;延时SUBBA,#01HMOVDPL,AMOVA,DPHSUBBA,#00HMOVDPH,AORLA,DPLJNZL2CLRTR1SJMPL1ENDORG1031H;歌曲“送别”编码DB33H,33H,3DH,33H,26HDB26H,26H,26H,2DH,2DHDB26H,2DH,33H,33H,33HDB33H,33H,33H,4DH,45HDB45H,45H45H,45H,45HDB45H,45H,33H,33H,3DHDB33H,26H,26H,26H,28HDB2DH,2DH,26H,26H,33HDB33H,33H,33H,45H,3DH例3路标导向灯把8只LED发光二极管设计为依次发光,也就是在图9.3所示的16个显示状态之间轮流切换,并且在各个状态之间切换时,插入一个250ms的延时。例如,在“此路通向邮电学校”8个字后面安置8只背光灯。在电路工作时,按照“此→路→通→向→邮→电→学→校”的顺序依次被点亮,从而起到为行人引导指路的作用。在8只灯全部被点亮后,再同熄同亮闪烁3次。停歇片刻之后开始下一个轮回,并且周而复始。利用并行端口P1连接8只LED作为显示部件。各LED的阳极复接后连正电源,充分利用低电平驱动能力强的特点;各LED均串联有限流电阻,主要为的是对端口引脚内部输出级下拉管起保护作用。单片机的时钟振荡器的频率选定12MHz。利用片内的定时器/计数器T0模块和中断功能部件,让T0工作于定时器模式,并且在超时溢出时向CPU发送中断请求信号。1、软件算法设计在本例中,将T0模块当作定时器使用,并且利用了其溢出中断功能,来产生一个250ms的延时。把T0的溢出周期设定为50ms,再安排一个溢出次数计数器。T0每溢出一次,溢出次数计数器就加1。在5次溢出之后,使得总延时时间达到250ms。LED显示驱动码的获取采用了查表法,在表中预先存贮了设定好的编码。方式寄存器TMOD设置为01H。因为选定T0模块、由内部TR0控制启/停(GATE=0)、定时器模式(=0)、工作于方式1(M1M0=01)。计数器初值设置为216–50000=3CB0H。如果单片机的晶体频率(fOSC)选定12MHz,利用T0的方式1产生50ms(=50000μs=50000机器周期)的定时,则初值应该为3CB0H。2、程序清单;《路标导向灯》2004/4/9;程序文件名:INTEXP2.ASM;======用户自定义常数==========TH0BEQU3CH;定义TH0寄存器初始值TL0BEQU0B0H;定义TL0寄存器初始值;======用户变量定义==========COUNTEQU70H;定义查表偏移量,相当一个4位计数器;ORG000H;定义程序存放区域的起始地址JMPMAIN;3、跳转到主程序T0中断矢量和中断服务子程序ORG00BH;T0中断矢量,中断服务程序入口地址MOVTL0,#TL0B;重新装载初值MOVTH0,#TH0B;INCR2;溢出次数计数器加1RETI;中断返回;主程序MAIN:MOVSP,#2FH;堆栈指针初始化SETBEA;开放中断总允许位SETBET0;

1 / 5
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功