中断(转载)

基本概念
    中断是指计算机在执行期间,系统发生的任何非寻常或非预期的继续处理时间,使得CPU暂时中断当前正在执行的程序转而执行相应的事件处理程序,待处理完毕后又返回原来被中断处继续执行或调度新的进程执行的过程。
    引起中断的事件称为中断源;中断源向CPU发出的请求中断处理信号称为中断请求;CPU收到中断请求后转到的相应的事件处理程序称为中断响应。
    程序状态字(Program Status Word,PSW)是指一段被操作系统和潜在硬件使用的程序状态信息的内存或硬件区域。它经常包含一个指向下一条需要被执行的指令的指针。程序状态字还通常包含一个错误状态区域和关于中允许或禁止,超级或普通用户模式为的条件代码。
    在某些情况下,尽管产生了中断源和发出了中断请求,CPU内部状态字PSW的中断允许为已被清除,从而不允许CPU响应中断,这种情况称为禁止中断。CPU禁止中断后只有等到PSW的中断允许位被重新设置后台才能接收中断,也称为关中断和开中断。开中断和关中断是为了保证某段程序执行的原子性。
    中断屏蔽是指中断请求产生之后,系统有选择地封锁一部分中断而允许另一部分中断仍能得到响应。不过有些中断请不能被屏蔽甚至禁止(关),即这些中断请求是具有最高优先级,一旦发生,CPU必须立即响应。例如,电源掉电事件所引起的中断就是不可屏蔽和不可禁止的。

中断的分类
    广义的中断可分为同步中断和异步中断;同步中断指当指令执行时由CPU控制单元产生,只有在一条指令执行完后,CPU才会发出中断;异步中断由其他硬件设备依照CPU时钟信号随机产生,意味着中断能在指令执行期间发生。
    一般有处理其本身产生的同步中断称为异常(exception),异步中断称为中断(Interruption)(狭义的);中断可分为可屏蔽中断(maskable interrupt)和不可屏蔽中断(nonmaskable interrupt);异常可分为故障(fault)、陷阱(trap)和中止(abort)。
   中断总是返回到下一条指令;陷阱(有意的异常)总是返回到下一条指令;故障(潜在的可恢复的状态)返回到当前指令;终止(不可恢复的错误)不会返回。
   PS. 计算机的陷阱指令一般不提供给用户直接使用,而作为隐指令(即指令系统中不提供的指令),在出现意外故障时,由CPU自动产生并执行。

异常与中断(狭义的)的区别
    异常通常有处理器正在执行现行指令引起(包括程序运算引起的各种错误:如地址非法、检验错、页面失效、存取访问控制错、算术操作溢出、数据格式非法、除数为零 、用户程序执行特权指令以及用户态到核心态的切换)而中断则是由与现行指令无关的中断源引起的,异常处理程序提供的服务为当前进程所用,而中断处理程序提供的服务则不是为了当前进程。中断是由硬件引起的,异常是由软件引起的。各中断源的优先级在系统设计时设定,在系统运行时是固定的;而处理器的优先级则根据执行情况由系统程序动态设定。

软中断
    软中断的概念主要来源于UNIX系统,软中断是通信进程间通过模拟硬中断而实现的一种通信方式。中断源发出软中断信号后,CPU或接收进程在“适当的时机”进行中断处理或者完成软中断信号所对应的功能。“适当的时机”表示接收软中断信号的进程须等到该接收进程得到处理器之后才能进行。

中断处理过程
    1. CPU检查中断响应的条件是否满足:有来自中断源的中断请求;CPU允许中断。如果中断响应条件不满足,不执行中断处理过程;
    2. 如果CPU响应中断,则CPU关中断,使其进入不可再次响应中断的状态;
    3. 保存被中断的现场,为使中断处理结束后正确地返回中断点,必须保存当前PSW和PC(Program Counter)等中的值,一般保存在特定堆栈或硬件寄存器中;
    4. 分析中断原因,调用中断处理子程序,在多个中断请求同时发生时,处理优先级最高的中断源发出的中断请求。在系统中为处理方便,通常针对不同的中断源编制不同的中断处理子程序(或异常处理子程序),这些子程序的入口地址存放在内存的特定单元中。再者不同的中断源也对应着不同PSW。这些不同的PSW被放在内存的特定单元中与入口地址一起构成中断向量。如此一来,根据中断或异常的种类,系统可由中断向量表迅速地找到中断的优先级,中断处理子程序的入口地址和对应的PSW;
    5. 执行中断;
    6. 恢复现场;
    7. 开中断

中断处理程序(Linux)
    在Linux中,中断处理程序看起来是普普通通的C函数,只不过这些函数必须按照特定的类型声明,以便内核能够以标准的方式传递处理程序的信息。中断处理程序与其他内核函数的真正区别在于:中断处理程序是被内核调用来响应中断的,而它们运行在我们称之为中断上下文的特殊上下文中。
    中断可能随时发生,中断处理程序也就可能随时执行,所以要保证中断处理程序能够快速执行,这样才能保证尽可能快地恢复中断代码的执行,对硬件而言,尽快地对其中断进行服务很重要,但会系统其他部分而言,让中断处理程序尽快地完成运行也同样重要。
    即便是最简单的中断服务程序,也要与硬件交互,告诉该设备中断已经被接收,考虑网络设备的中断处理程序面临的挑战,它要完成对硬件的应答,要将硬件接受的网络数据包拷贝到内存,对其进行处理后再交给合适的协议栈或处理程序,然而这种工作量在如今的带宽中是相当大的。
    一般把中断处理程序切分为两个部分,上半部接收到一个中断,它就立即开始执行,但只做有严格时限的工作,例如,对接收的中断进行应答或复位硬件,在所有中断被禁止的情况下(关中断)执行;允许稍后完成的工作会推迟到下半部,此后,再合适的时机,下半部会被开中断执行。
    以网卡为例,当网卡接收流入的数据包时,立即发出中断,内核通过执行网卡已注册的中断处理程序来做出应答,应答硬件,拷贝最新的网络数据包到内存,然后读取网卡更多的数据包这些重要、紧迫由于硬件密切相关的工作在上半部执行;处理和操作数据包的其他工作在随后的下半部执行。

 

转载于:https://www.cnblogs.com/xhj-records/archive/2013/04/13/3017494.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值