中断在操作系统中的应用.doc_第1页
中断在操作系统中的应用.doc_第2页
中断在操作系统中的应用.doc_第3页
中断在操作系统中的应用.doc_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

中断在操作系统中的应用 (*大学 电子信息学院, 四川 成都 610065)摘要: 计算机执行期间,系统内如果发生任何非寻常的或非预期的急需处理事件,使得CPU暂时中断当前正在执行的程序而转去执行相应的时间处理程序,待处理完毕后又会返回原来被中断处继续执行或调度新的进程执行的过程。这就是中断过程,文章主要讲述中断在操作系统中的应用,并从以下几方面进行讨论:中断实现的机制,系统调用与中断的关系,最后列举出3-5个硬件中断的例子,并详细的讨论其工作原理。关键词:中断;操作系统;实现机制;系统调用 the application of interrupt in the operating system LIU Di (Electronics and Information Engineering, Sichuan University, Chengdu, 610065, China)Abstract: during computer execution if there was some unusual or unexpected events what was badly needed to deal with in the system, the CPU interrupted temporarily the program what was executing and started to execute the time hander,when the behind was over, it would continue the original work.This was interrupt,the article focused on describing the application of interrupt in the operating system, and would discuss from the following aspects: the implementation mechanism of interrupt, the relationship between the system call and interrupt, enumerate several examples about hardware interrupts ,and discussed their working principle in detail.Key words: interrupt;operating system;implementation mechanism;system call 1、 引言中断是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从中断服务程序又返回到被中断的主程序。3、 系统调用与中断的关系在系统中真正被所有进程都使用的内核通信方式是系统调用。例如当进程请求内核服务时,就使用的是系统调用。一般情况下,进程是不能够存取系统内核的。它不能存取内核使用的内存段,也不能调用内核函数,CPU的硬件结构保证了这一点。只有系统调用是一个例外。进程使用寄存器中适当的值跳转到内核中事先定义好的代码中执行,(当然,这些代码是只读的)。在Intel结构的计算机中,这是由中断0x80实现的。系统调用,都是指操作系统的开发者,提供了许多系统的程序库,实现输入/输出等基本的功能,我们编写程序的时候就调用这些程序库,不必要自己到显示器上绘图和读取键盘端口。在UNIX操作系统下,系统调用主要是C语言格式调用的一些函数库。比如printf和scanf函数,我们写程序的时候直接可以用,编译系统把它转变为对操作系统函数库调用的代码,目标文件可以独立运行。在WINDOWS系统,系统调用主要是以一系列的DLL、EXE文件方式给出,比如USER32.DLL、NTDLL.DLL等,编写程序的时候可以直接调用里面的GETDC等函数库。在DOS系统下,操作系统不以函数库形式提供系统调用,而是把整个操作系统的所有代码都LOAD到内存里面,把相关系统调用功能安装到中断接口里面,我们写的程序需要调用的时候,调用相应的中断。比如打开文件等操作,就调用INT 21。当CPU执行到中断指令“INT 0x80”时,硬件就做出一系列响应,其动作与上述的中断响应相同。CPU穿过陷阱门,从用户空间进入系统空间。相应地,进程的上下文从用户堆栈切换到系统堆栈。接着运行内核函数system_call()。首先,进一步保存各寄存器的内容;接着调用syscall_trace( ),以系统调用号为下标检索系统调用入口表sys_call_table,从中找到相应的函数;然后转去执行该函数,完成具体的服务。执行完服务程序,核心检查是否发生错误,并作相应处理。如果本进程收到信号,则对信号作相应处理。最后进程从系统空间返回到用户空间。这主要是Linux内核中系统调用与中断的联系。4、 硬件中断举例 例1 使用外部中断0,当每次响应中断时,P1口依次输出高电平,使8个发光二极管依次循环熄灭闪烁。1) 电路设计 ORG 0000H LJMP MAIN ;转主程序 ORG 0003H ;外部中断0入口地址 LJMP EXTER ;转中断程序 ORG 1000H MAIN: SETB IT0 ;外部中断0下降沿有效 SETB EX0 ;外部中断0允许 SETB EA ;总中断允许LOOP: AJMP LOOP ;等待中断 ORG 1050H ;中断程序入口EXTER: MOV R2, #0FFH ;置循环次数 MOV A, #01H ;灯亮初值FLASH: RR A ;右移一位 MOV R7, #0FFH ;定时LOOP1: MOV R6, #0FFH LOOP2: NOP NOP DJNZ R6, LOOP2 DJNZ R7, LOOP1 MOV P1, A ;控制灯的亮灭 DJNZ R2, FLASH ;循环 RETI ;中断返回 END例2 定时器举例 通过定时器1来产生中断,控制P1.0线上的脉冲输出,并经三极管驱动扬声器,发出音调信号。1) 电路设计 ORG 0000H LJMP MAIN ORG 001BH ;中断入口地址 CPL P1.0 RETI ORG 1000H MAIN: MOV R1, #00H MOV R0, #23H MOV TMOD, #20H ;定时器1工作方式2 MOV IE, #88H ;定时器1允许中断L1: MOV DPTR, #3FFFH MOV A, R0 ;取数 INC R0 ;修改指针 MOVC A, A+PC ;查表 JZ MAIN MOV R1, A ;计算计数初值 MOV A, #0FFH CLR C SUBB A, R1 RL A MOV TH1, A ;置计数初值 SETB TR1 ;开始计数L2: CLR C MOV A, DPL ;延时 SUBB A, #01H MOV DPL, A MOV A, DPH SUBB A, #00H MOV DPH, A ORL A, DPL JNZ L2 CLR TR1 SJMP L1 END ORG 1031H ;歌曲“送别”编码DB 33H,33H,3DH,33H,26HDB 26H, 26H, 26H,2DH,2DHDB 26H,2DH,33H,33H,33HDB 33H, 33H,33H,4DH,45HDB 45H, 45H45H, 45H, 45HDB 45H, 45H,33H,33H,3DHDB 33H,26H,26H,26H, 28HDB 2DH, 2DH, 26H,26H,33HDB 33H,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(= 50000s = 50000机器周期)的定时,则初值应该为3CB0H。 2、 程序清单;路标导向灯2004/4/9 ;程序文件名:INTEXP2.ASM ;=用户自定义常数= TH0B EQU 3CH ;定义TH0寄存器初始值 TL0B EQU 0B0H ;定义TL0寄存器初始值;=用户变量定义 = COUNT EQU 70H ;定义查表偏移量,相当一个4位计数器 ; ORG 000H ;定义程序存放区域的起始地址 JMP MAIN ;3、 跳转到主程序 T0中断矢量和中断服务子程序 ORG 00BH ;T0中断矢量,中断服务程序入口地址 MOV TL0,#TL0B ;重新装载初值 MOV TH0,#TH0B ;INC R2;溢出次数计数器加1 RETI ;中断返回; 主程序 MAIN: MOV SP,#2FH ;堆栈指针初始化 SETB EA ;开放中断总允许位 SETB ET0 ;开放T0中断允许位 MOV TMOD,#01H ;方式字送入方式寄存器 MOV TL0,#TL0B ;T0初始化 MOV TH0,#TH0B ;SETB TR0 ;开启T0 MOV COUNT,#0 ;清零查表偏移量LOOP: MOV A,COUNT ;COUNT作为查表地址偏移量送入A MOV DPTR,#TABLE ;设置表头地址 MOVC A,A+DPTR ;查表操作 MOV P1,A ;将查表得到的驱动码送INC COUNT ;查表偏移量加1 ANL COUNT, #0FH ;屏蔽掉高4位,以免超出表格范围 MOV R2,#00H ;溢出次数计数器置入初始值 LOOP2: CJNE R2,#5,LOOP2 ;原地踏步,等待中断源JMP LOOP ;跳转回去;常数表格(显示信息) TABLE: DB 11111110B ;显示信息码,下同 DB 11111100B ; DB 11111000B ; DB 11110000B ; DB 11100000B ; DB 11000000B ; DB 10000000B ; DB 00000000B ; DB

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论