ch2-2.2中断技术.ppt_第1页
ch2-2.2中断技术.ppt_第2页
ch2-2.2中断技术.ppt_第3页
ch2-2.2中断技术.ppt_第4页
ch2-2.2中断技术.ppt_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

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

文档简介

1、2.2中断技术,2.2.1 中断概念 2.2.2 中断源分类 2.2.3 中断和异常的响应及服务 2.2.4 中断事件处理 2.2.5 中断优先级和多重中断 2.2.6 Linux中断处理 2.2.7 Windows 2003中断处理,2.2.1中断的概念,请求系统服务, 实现并行工作, 处理突发事件, 满足实时要求, 都需要打断处理器正常的工作,为此,提出了中断概念。,中断的定义,中断是指程序执行过程中,遇到急需处理的事件时,暂时中止CPU上现行程序的运行,转去执行相应的事件处理程序,待处理完成后再返回原程序被中断处(断点)或调度其他程序执行的过程。,2.2.2中断源分类(1),从中断事件的

2、性质和激活的手段来说,可以分成两类: 强迫性中断事件强迫性中断事件不是正在运行的程序所期待的,而是由于某种事故或外部请求信息所引起的,分为: 机器故障中断事件。 程序性中断事件。 外部中断事件。 输入输出中断事件。 自愿性中断事件自愿性中断事件是正在运行的程序所期待的事件。是访管指令引起的。,中断源分类(2)按中断事件的性质和激活方式划分,中断源分类(3),硬中断,软中断,外中断(中断、异步中断),内中断(异常、同步中断),信号,软件中断,按事件来源和实现手段分类,中断源分类(4), 外中断(中断或异步中断)-指来自处理器之外的中断信号,包括时钟中断、键盘中断和设备中断等;外中断又分可屏蔽中断

3、和不可屏蔽中断,每个不同中断具有不同中断优先级,表示事件的紧急程度,在处理高一级中断时,往往会屏蔽部分或全部低级中断。 内中断(异常或同步中断)-指来自处理器内部,通常由于程序执行中,出现与当前指令关联的、不正常的、或是错误的事件。,中断和异常的区别, 中断是由与现行指令无关的中断信号触发的(异步的),且中断的发生与CPU处在用户模式或内核模式无关,在两条机器指令之间才可响应中断,一般来说,中断处理程序提供的服务不是为当前进程所需的; 异常是由处理器正在执行现行指令而引起的,一条指令执行期间允许响应异常,异常处理程序提供的服务是为当前进程所用的。异常包括很多方面,有出错(fault),也有陷入

4、(trap)等。,Linux异常, Linux为例,异常按错误报告方式分四种: 故障、 陷阱、 终止、 编程异常。 故障-发生时保存的返回指令地址指向触发异常的当前那条指令,故障处理后会重新执行。 编程异常和陷阱-由于执行访管指令引起的同步操作,异常返回时,回到触发异常的下一条指令。,硬中断与软中断,中断和异常要通过硬件设施来产生中断请求,是硬中断。 软中断是利用硬中断的概念,用软件方法对中断机制进行模拟,实现宏观上的异步执行效果。 软中断分:“信号”和“软件中断”。,中断的通常用法,“中断”(硬中断)用于外部设备对CPU的中断(中断的是正在运行的任何程序),转向中断处理程序执行; “异常”(

5、硬中断)因指令执行不正常而中断CPU(中断的是正在执行这条指令的程序),转向异常处理程序; “软件中断”(软中断)用于硬中断服务程序对内核的中断,在上半部分中发出软件中断(即标记下半部分),使得中断下半部分在适当时刻获得处理; “信号”(软中断)用于内核或进程对某个进程的中断,通知进程某个特定事件发生或迫使进程执行信号处理程序。,中断机制与信号机制进行类比,相同点:(1)概念上是一致的 ,(2)两者都是“异步”的 ,(3)实现上均采用“向量表”,(4)均具有“屏蔽”设施。 区别是:中断机制由硬件与软件相结合来实现,而信号机制由软件实现;中断向量表和中断处理程序(由系统提供)均在系统空间,而信号

6、向量表虽在系统空间,但信号处理程序由应用程序提供,并在用户空间执行。,硬中断与软中断BH进行类比,(1)数组bh_base 相当于硬件中断机制中的数组irq_desc ; (2)bh_active在概念上相当于硬件的“中断请求寄存器”,而bh_mask相当于硬件中的“中断屏蔽寄存器”; (3)执行一个BH函数时,就通过mark_bh( )将bh_active中的某位设成1,相当于中断源发出(软件)中断请求,所设置的具体标志位则类似于“中断向量”; (4)如果bh_mask中的相应位是l,就会在每次执行完do_IRQ()中的中断服务程序后,及每次系统调用结束后,在函数do_bottom_half

7、()中执行相应BH函数,而do_bottom_half(),则类似于do_IRQ( )。,硬中断或软中断处理延时问题,CPU接到和响应硬中断或异常后会立即调用中断或异常处理程序处理;对于接收到的信号或软件中断,此时由于进程未必占有处理器运行或内核正在执行敏感性操作,通常会有一定时间的延迟,在适当的时刻,内核或相关进程才能加以处理。 信号和软件中断虽然都由软件产生,并都由软件处理,但它们的中断来源、使用场合、实现手段并不相同。,中断/异常响应要做四件事,发现中断源: 保护现场: 转向处理中断/异常事件的处理程序: 恢复现场:,IBM中大型机中断响应过程,现行PSW,中断时保存现行PSW,中断时装

8、入 现行PSW,中断后恢复PSW,装配中断码,IBM PC机中断的响应过程,2.2.4 中断事件处理,1 中断和异常的一般处理过程 2 硬件故障中断 3 程序性中断 4 I/O中断 5 访管中断 6时钟中断,中断处理执行流程,1)设备发出中断请求,中断控制器根据IRQ号转换成中断向量号;CPU响应中断后,保存PSW等到核心栈,根据向量号查IDT,生成指向中断描述符表的指针,找到中断服务程序的地址,中断处理程序开始执行; 2)进入中断公共代码段common_interrupt处执行SAVE_ALL; 3)调用do_IRQ()函数,设置中断源状态等;为发出中断请求的设备提供服务,标记中断下半部分;

9、 5)检查softirq_active和softirq_mask是否有标记的下半部分,有就调用do_softirq( )执行之; 6)跳转到ret_from_intr退出,恢复中断前的现场。,异常处理执行流程,1)异常产生后,将硬件错误码和异常向量号存入当前进程PCB中; 2)判别异常产生于核心态还是用户态,对于前者,转向内核预定义服务程序处理,没有被处理的核心态异常是操作系统的致命错误; 3)对于用户态异常,终止当前进程运行,调用force_sig( )函数给当前进程发信号; 4)从ret_from_exception处返回用户空间时,检查进程是否有信号等待处理,如果有则根据信号类型调用相应

10、函数进行处理。,时钟中断(1),时钟是操作系统进行调度工作的重要工具,如让分时进程作时间片轮转、让实时进程定时发出或接收控制信号、系统定时唤醒或阻塞一个进程、对用户进程进行记账 时钟可分成绝对时钟和间隔时钟两种,时钟中断(2),1) 绝对时钟服务 提供以下功能的函数: update_clock( )更新当前时间; get_time( )返回当前时钟值; set_clock( )把当前时间设置为新值。,时钟中断(3),2) 间隔定时器 进程可被延迟、阻塞,直到被间隔定时器中断信号唤醒,应提供以下函数: delay(tdel)把调用进程阻塞由参数tdel指定的时间长度,进程保持阻塞直到本地时间到达

11、进程阻塞时的当前时间+tdel的时刻。 set_timer(tdel)硬件间隔定时器被设置为起始的递减值tdel,当该值达到0时,产生间隔时钟中断,调用timeout( )函数进行处理。,时钟中断(4),3) 逻辑定时器需要提供函数: tn=creat_ltime( ):创建逻辑定时器,tn中存放返回标识符。 destroy_ltime(tn):撤销tn标识的逻辑定时器。 set_ltime(tn,tv):把tv值装到逻辑定时器tn中,当该值为0时,产生时间到中断。,时钟中断(5)利用间隔定时器实现函数delay,delay(tdel) set_timer(tdel); /硬件间隔时钟设置为t

12、del P(delsem); /进程执行P操作而阻塞,等待中断 / delsem为二元信号量,初值为0 timeout( ) V(delsem); /中断产生,执行V操作释放进程 ;,时钟中断(6),(1) 使用带有绝对唤醒定时器的优先级队列,时钟中断(7)进程进入定时器延时队列的算法,步1 使用get_time( )函数利用计算机本地时钟来获得当前时间; 步2 wakeup=当前时间+tdel,用以确定新元素移入队列中的位置; 步3 如果新元素的唤醒值小于队列中第一个元素的wakeup值,则新元素移入队列头部,同时,使用set_timer(tn,tdel)将硬件间隔定时器设为新的延迟间隔td

13、el。 步4 否则,按新元素的唤醒值移入队列的适当位置。,时钟中断(8),(2) 使用带有时间差值的优先级队列,时钟中断(9) set_ltimer(tn,tdel),查找左、右两个元素,在它们之间插入新元素,这个工作是通过累加元素中的差值来完成的,从间隔时钟的当前值开始,直到达tdel值; 把右元素中当前存储的差值分为两部分:一部分被存在新元素中,并且代表左元素与新元素之间的差值,另一部分是存储在右元素中,代表新元素与右元素之间的差值。,其他中断,硬件故障中断:硬件故障造成的;中断处理程序保护现场,停止设备工作,停止处理器运行,提供故障信息报告;并对破环进行估计和恢复。 程序性中断:包括语法

14、错误、逻辑错误和程序运行产生的异常。 I/O中断:I/O正常结束、I/O操作故障、I/O操作异常、设备报到或设备结束 访管中断:执行操作系统的功能调用,访管指令包括操作码和访管参数,2.2.5 中断优先级和多重中断,1 中断的优先级 2 中断的屏蔽 3 多重中断事件的处理,计算机执行的每一瞬间,可能有几个中断事件同时发生,中断装置如何来响应同时发生的中断呢? 以不发生中断丢失为前提,把紧迫程度相当的中断源归在同一级,紧迫程度差别大的中断源归在不同级,级别高的有优先获得响应的权力,中断装置预定的这个响应顺序称为中断优先级. 中断响应方式包括: 硬件方式:硬件链式排队器 软件方式:查询程序 中断优

15、先级只是表示中断装置响应中断的次序,系统设计时确定并且不能被改变;操作系统在处理响应中断时有先后次序问题,响应顺序和处理顺序未必一样,先响应的可以后处理。,中断优先级(1),中断优先级(2),IBM系列机中,硬件排定中断优先级响应次序,由高到低:机器校验中断、自愿性中断、程序性中断、外部中断、I/O中断; Linux Intel x86机中,允许有256个中断或异常信号,并分五类,硬件排定中断和异常优先级响应次序,由高到低:异常、软件中断、非屏蔽中断和可屏蔽中断。 在Windows运行的Intel x86系统中,先把中断事件排定一个中断请求优先级称为处理器的IRQL,当内核线程运行时,可以提高

16、或降低处理器的IRQL,如果中断源的IRQL等于或低于当前的中断优先级,则该中断被屏蔽,直到内核降低IRQL。,中断的屏蔽,CPU通过指令来设置可编程中断控制器的屏蔽码 主机可允许或禁止某类中断的响应,如允许或禁止所有的I/O中断、外部中断、及某些程序性中断。 有些中断是不能被禁止的,例如,计算机中的自愿性访管中断就不能被禁止。,多重中断事件的处理,中断正在进行处理期间,CPU又响应新的中断事件,于是暂时停止正在运行的中断处理程序,转去执行新的中断处理程序,就叫多重中断(又称中断嵌套)。处理方法: (1) 串行处理, (2) 嵌套处理, (3) 即时处理。,2.2.6 Linux中断处理,1

17、Linux内核处理流程,快中断与慢中断, Linux中,区分快中断和慢中断两类中断事件。 处理慢中断前需保存所有寄存器的内容,而快中断处理仅要保存被常规C函数修改的寄存器;慢中断处理时,不屏蔽其他中断信号,而快中断处理时会屏蔽所有其他中断; 慢中断处理完毕后,通常不立即返回被中断的进程,而是进入调度程序重新调度,调度结果未必是被中断的进程运行(是抢先式调度)。而快中断处理完毕后,通常恢复现场返回被中断的进程继续执行(是非抢先式调度)。,下半部分处理概述,中断处理程序的特点 什么是下半部分处理? Top half Bottom half,中断处理程序特点,以异步方式运行,可能会打断关键代码的执行

18、,甚至打断其他中断处理程序的执行; 在屏蔽中断状态下运行,最坏的情况会禁止所有中断; 要对硬件进行操作,有很高的时限要求;它在中断上下文中运行,故不能被阻塞 。,Linux各种下半部分机制,bottom half、 task queue、 tasklet、 work queue、 Softirq。,下半部分(bottom half),实现原理 BH数组、函数入口指针 bh_base、函数安装标志bh_mask 、函数处理标志bh_active BH的缺点:1,数量限制 2,必须在全局范围内同步,bh-mask 31 0,任务队列(task queue),实现原理:引入任务队列,实现对各种任务的

19、延迟执行。 预定任务队列: 1) 定时器队列(TQ_TIMER): 2) 即时队列(TQ_IMMEDIATE): 3) 进程调度队列(TQ_SCHEDULE): 4) 磁盘队列(TQ_DISK): 任务队列的缺点:灵活性差,不能胜任网络等对性能要求较高的子系统,小任务(tasklet),tasklet能更好支持SMP,它基于软中断来实现,但比软中断接口简单,锁保护要求低;softirq保留给执行频率及时间要求特高的下半部分使用(如网络和SCSI),多数场合下可使用tasklet。 使用tasklet的步骤:声明 、编程、调度 。 BH全局串行处理,不适应SMP环境,而不同tasklet可同时运

20、行于不同CPU上,当然,系统保证相同tasklet不会同时在不同CPU上运行,在这种情形下,tasklet就不需要是可重入的。 在新版Linux中,tasklet是建议的异步任务延迟执行机制。,工作队列work queue,Linux 2.5内核引入-工作队列,它把一个任务延迟,并交给内核线程去完成,且该任务总是在进程上下文中执行,通过工作队列执行的代码能占尽进程上下文的优势,最重要的是工作队列允许重新调度及阻塞。 如果延迟执行的任务需要阻塞,需要获取信号量或需要获得大量主存时,那么,可选择工作队列,否则可使用tasklet或softirq。,软中断softirq (1),Linux沿用最早B

21、H思想,实现了庞大和复杂的软中断子系统-softirq,它是一种软中断机制,又是一个框架,包括tasklet,及为网络操作专门设计的软中断。 软中断结构: struct softirq_action void (*action)(struct softirq_action *); /待执行的函数 void *data; /传给函数的参数 ;,软中断softirq(2),最多注册32个软中断,目前预定义六个元素, enum HI_SOFTIRQ, /高优先级tasklet TIMER_SOFTIRQ /定时器下半部分 NET_TX_SOFTIRQ, /发送网络数据包 NET_RX_SOFTIRQ

22、, /接收网络数据包 SCSI_SOFTIRQ, /SCSI下半部分 TASKLET_SOFTIRQ, /公共tasklet ; 软中断使用步骤:声明 、注册 、触发 、处理 。,软中断softirq(3),软中断执行时机 : 从系统调用中返回(ret_from_sys_call)时、 从异常中返回(ret_from_exception)时、 调度程序中(schedule)、 处理完硬件中断之后(do_IRQ)。,2.2.7Windows 2003中断处理,Window2003中断类型 1.中断有I/O设备、处理器时钟或定时器等,可以启用或禁用。中断是异步事件,可能随时发生,与处理器正在执行的内

温馨提示

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

评论

0/150

提交评论