7 中断及中断处理.ppt

  1. 1、本文档共23页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
7 中断和中断处理 * 问题:内核如何对外围硬件设备有效管理 1处理器向硬件发送一个请求,处理器的速度比外围硬件设备快,处理器需等待回应 2 轮询(polling)方法,让内核定期对设备的状态进行查询,但容易做无用功,设备可能忙碌或空闲 3 硬件在需要时候向内核发送信号,即中断机制 * 7.1 中断 中断使硬件发出通知给处理器,中断本质是一种特殊的电信号,由硬件设备发向处理器。处理器收到中断后,会马上向操作系统反映此信号的到来,然后就由操作系统负责处理这些新到来的数据,中断随时产生,内核随时可能因为新到来的中断而打断。 不同的设备对应的中断不同,每个中断由唯一的数字标识。从而,操作系统对中断进行区分,为不同的中断提供不同的中断处理程序 * 中断值通常被称为中断请求(IRQ)线,IRQ都是一些数值量 例如:PC机上,IRQ0是时钟中断,IRQ1为键盘中断。对于某些连接在PCI总线上的设备而言,中断是动态分配的。特定的中断总是与特定的设备相关联,内核需知道些信息。 * 异常: 同步中断,它在产生时必须考虑与处理时钟同步。在处 理器执行到由于编程失误而导致的错误指令(例如被0除) 的时候,或者是在执行期间出现特殊情况(例如缺页),必须 靠内核来处理的时候,处理器就会产生一个异常。因为许多 处理器体系结构处理异常与处理中断的方式类似。因此,内 核对它们的处理也很类似。 * 7.2 中断处理程序 在响应一个特定中断的时候,内核会执行一个函数,该函数叫做中断处理程序(interupt handle)或中断服务例程(interrupt service routine, ISR)。 产生中断的每个设备都有一个相应的中断处理程序。中断处理程序是设备驱动程序的一部分。 与C函数的区别: 必须按照特定的类型声明; 被内核调用来 响应中断的,运行于中断上下文的特殊上下文中。 一个设备的中断处理程序是设备驱动程序的一部分-设备驱动程序是用于对设备进行管理的内核代码。 中断处理程序要求:快速执行,保证尽可能地恢复中断代码的执行。 * 7.3 上半部与下半部的对比 上半部(top half)—接收到一个中断,立即开始执行,只做有严格时限的工作。例如对接收的中断进行应答或复位硬件。 下半部(bottom half)—完成上半部未完成的处理工作,通常情况下,下半部会在中断处理程序返回时立即执行。 实例:网卡,接收到数据包,立即发出中断,内核通过执行 网卡已注册的中断处理程序来做出应答。中断开始执 行,通知硬件,拷贝最新的网络数据包到内存,然后 读取网卡更多的数据包。中断任务完成后,将控制权 交还给系统被中断前原先运行的程序。 * 7.4 注册中断处理程序 中断处理程序是管理硬件的驱动程序的组成部分。每一个设备都有相关的驱 动程序,如果设备使用中断,那么相应的驱动程序就注册一个中断处理程序。 驱动程序可以通过request_irq()函数注册一个中断处理程序(声明在 linux/ interrupt.h),并且激活给定的中断线,以处理中断 /* request_irq: 分配一条给定的中断线 */ int request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags, const char *name, void *dev) 其中,参数irq要分配的中断号,传统PC设备上的系统时钟和键盘,此值通常预 先确定。对于大多数设备,此值可通过探测获得或通过编程动态确定。 参数handler是一个指针,指向处理这个中断的实际中断处理程序,只要操作系 统一接收到中断,该函数就被调用 * 中断处理程序标志 参数flags可以为0,也可以为下列一个或多个标志的位掩码 (定义在linux/interrupt.h): IRQF_DISABLED:内核在处理中断处理程序期间,禁止所有的其他中断 IRQF_SAMPLE_RANDOM:表明这个设备产生的中断对内核熵池有贡献 IRQF_TIMER:系统定时器的中断处理 IRQF_SHARED:在多个中断处理程序之间共享中断线 参数name是与中断相关的设备的ASCII文本表示法。例如, PC机上的键盘中断对应的值为”keyboard”。 参数dev主要用于共享中断线。 函数request_irq()成功执行会返回0,失败返回非0值。 * 实例 请求一个中断线,并在驱动程序中安装中断处理程序 if

文档评论(0)

kehan123 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档