- 1、本文档共45页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
linux内核中断
1.1中断的由来及实质
Linux内核要管理计算机上的硬件设备,首先要和他们通信。而处理器的速度跟外围硬件设备的速度往往不在一个数量级上,因此,如果内核采取让处理器向硬件发出一个请求,然后专门等待回应的办法,显然差强人意。既然硬件的响应这么慢,那么内核就应该在此期间处理其他事务,等到硬件真正完成了请求的操作之后,再回过头来对它进行处理。想要实现这种功能,轮询(polling)可能会是一种解决办法。可以让内核定期对设备的状态进行查询,然后做出相应的处理。不过这种方法很可能会让内核做不少无用功,因为无论硬件设备是正在忙碌着完成任务还是已经大功告成,轮询总会周期性地重复执行。更好的办法是由我们来提供一种机制,让硬件在需要的时候再向内核发出信号(变内核主动为硬件主动)。这就是中断机制。
由中断或异常处理程序执行的代码不是一个进程,它是一个内核控制路径,代表中断发生时正在运行的进程执行,内核控制路径比一个进程要“轻“。
1.2异常和中断
中断(interrupt)通常被定为一个事件,该事件改变处理器执行的指令顺序。
中断通常分为同步中断和异步中断:
l 同步中断是当指令执行时由CPU控制单元产生的,称为同步,是因为只有在一条指令执行完成后CPU 才会发生中断。
l 异步中断是由其他硬件设备依照CPU始终信号随机产生的。
同步中断又称为异常,异常是由程序的错误产生的(例如除0),或者是由内核必须处理的异常条件(例如缺页)产生的。前一种情况下,必须通知应用程序出现了异常,内核通过发送一个每个Unix程序员熟悉的信号来处理异常,后一种必须借助于内核才能修复,内核执行恢复异常需要的所有步骤。
异常和异步中断的相同点:如果CPU当前不处于核心态,则发起从用户态到内核态的转变,接下来。内核中执行一个专门的中断服务例程(ISR interrupt service routine)。
异常和异步中断的不同点:产生源的区别,产生原因的区别,及发生时间的区别。还有一方面,许多中断可以禁用,但有些不行。此后本文所说中断默认指的都是异步中断。
(注意,这里是Intel划分的,并不是Linux,Linux有自己的划分方法)更进一步,Intel文档中又把中断和异常继续进行了细分:
l 中断:
可屏蔽中断: I/O设备发出的所有的中断请求(IRQ)都产生可屏蔽中断。可屏蔽中断产生两种状态:屏蔽的(masked)或非屏蔽的(unmasked);当中断被屏蔽,则CPU控制单元就忽略它。
非可屏蔽中断:总是由CPU辨认。只有几个危急事件引起非屏蔽中断。
l 异常:
1.处理器探测到得异常:
1)故障(fault)
通常可以纠正;一旦纠正,程序可以在不失连贯性的情况下重新开始。 保存在eip中的值是引起故障的指令地址。因此,当异常处理程序停止时,那条指令会重新执行
2)陷阱(trap)在陷阱指令执行后立即报告;内核把控制权返回给程序后就可以继续它的执行而不失连贯性。保存在 eip中的值是一个随后要执行的指令地址。只有当没有必要重新执行已中止的指令时,才触发陷阱。陷阱的主要用途是为了调试程序。
3)异常终止(abort)发生一个严重错误;CPU控制单元出了问题,不能在eip寄存器中保存引起异常指令所在的确切位置。这个异常中止处理程序除了强制中止受影响的进程中止外,没有别的选择。
2.编程异常(programmed exception)
在编程者发出请求时发生。是由int或int3指令触发的。控制单元把编程异常作为陷阱来处理。编程异常也叫软中断。用途:执行系统调用及给调试程序通报一个特定的事件。
综上所述,从广义上讲,中断可分为四类:中断、故障、陷阱、终止。这些类别之间的同点请参看表 1。
表 1 中断的类别(此表摘自《深入理解计算机系统》)
类别 原因 异步/同步 返回行为 中断 来自 I/O设备的信号 异步 总是返回到下一条指令 陷阱 有意的异常 同步 总是返回到下一条指令 故障 潜在可恢复的错误 同步 返回到当前指令 终止 不可恢复的错误 同步 不会返回 在可能的情况下,内核试图避免禁用中断,因为禁用会损害系统性能(比如禁用键盘,就交互不友好了),但有些场合禁用中断是必要的,在处理第一个中断时,如果发生第二个中断,内核会发生严重的问题。如果内核在禁用中断的情况下,花费过多时间处理一个ISR(中断服务例程),会丢失一些系统正确运作不可必要的中断。并且因为中断随时可能发生,即中断处理程序随时可能执行,必须保证中断处理程序快速执行,这样才能保证尽可能快的恢复中断代码的执行,中断处理很重要,但对系统其它部分而言,中断处理程序尽可能短时间内处理完同样重要。为了解决这些问题,一般把中断处理且为两个部分。中断处理程序是上半部,接收到中断立即开始执行,但只做有严格时限的工作
您可能关注的文档
最近下载
- 2025款比亚迪宋PLUS EV豪华尊贵旗舰型_用户手册驾驶指南车主车辆说明书电子版.pdf VIP
- 第1课《初三,我来了》课件北师大版心理健康教育九年级全一册.ppt
- 2023全域用户经营白皮书:STAR模型,从用户运营到生意增长.doc VIP
- NBT 35042-2014 水力发电厂通信设计规范.pdf
- 《小学英语单元整体作业设计的实践研究》开题报告.docx VIP
- “三个聚焦”内容个人自查报告.docx VIP
- 2024年充电宝市场现状分析:充电宝全球市场销售额达到224亿元.docx
- 各种烟气焓温、密度、比热计算表.xls VIP
- 考试妇科试题.docx VIP
- 德国科技创新与产业趋势.pptx VIP
文档评论(0)