- 1、本文档共41页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
LINUX 操作系统 第6章 中断和中断处理程序
第6章 中断和中断处理程序 6.1 中断、陷阱和异常 中断(interrupt):设备发出的中断,此类中断的发生是无法预测的,它是被动的。用户空间和系统空间都可能发生中断。 陷阱(trap):由软件产生的中断,它是由专设的指令,如X86的“int n”在程序中有意设置的,他是主动的。陷阱只发生在用户空间。 异常(exception):由于违规操作产生的,如除法操作DIV的除数为0。多半是不小心, 而不是故意的,也是被动的。 系统调用,通过int 0x80实现,同“陷阱”。 中断、陷阱和异常 共同点:CPU对它们的响应过程基本一致。即:在执行完当前指令后,或者在执行当前指令的中途,就根据中断源所提供的“中断向量”,在内存中找到相应的服务程序的入口地址,并调用该服务程序。 “中断”的向量是由软件或硬件设置好了的;陷阱的向量是在“自陷”指令中发出的(int n中的n);而各种异常的向量则是CPU的硬件结构中预先规定好的。 因此,在实践中常常将它们作为统一的模式加以考虑和实现,而且常常统称为“中断”。 中断 中断使硬件得以与处理器进行通信。 中断随时可能发生,因此内核随时可能因为新到来的中断而被打断。 不同的设备对应的中断不同,每个中断都通过一个唯一的数字标识,从而使得操作系统能够对中断进行区分。 这些中断值通常被称为中断请求(IRQ)线,通常IRQ都是一些数值量。 6.2 中断处理程序 在响应一个特定中断的时候,内核会执行一个函数——中断处理程序(或叫中断服务例程)。 一个设备的中断处理程序是它的设备驱动程序的一部分。 中断处理程序与其他内核函数的真正区别:中断处理程序是被内核调用来响应中断的,它们运行于中断上下文中。 中断随时可能发生,因此中断处理程序也就随时可能执行。所以必须保证中断处理程序能够快速执行,这样才能保证尽可能快地恢复中断代码的执行。 因此,尽管对硬件而言,迅速对其中断进行服务非常重要;但对系统的其它部分而言,让中断处理程序在尽可能短的时间内完成运行也同样重要。 上半部与下半部 对中断处理程序而言,既想它运行得快,又想它完成的工作量多,鉴于这两个目的之间的矛盾,一般把中断处理分为两个部分: 上半部:中断处理程序,接收到一个中断,它就立即开始执行,但只做有严格时限的工作。这些工作都是在所有中断被禁止的情况下完成的。 下半部:能够被允许稍后执行的工作推迟到下半部执行。下半部在开中断的情况下执行。 上半部和下半部分开的例子 例:网卡接收数据包 应在上半部完成的工作:应答硬件,拷贝最新的网络数据包到内存,读取网卡上更多的数据包。 可以在下半部完成的工作:处理和操作数据包。 6.3 注册中断处理程序 中断处理程序是驱动程序的组成部分。 驱动程序通过以下函数注册并激活一个中断处理程序。 request_irq( )的参数 第1个参数irq:要分配的中断号。 第2个参数handler:一个指针,指向处理这个中断的实际中断处理程序。 第3个参数irqflags:可以为0,也可以是SA_INTERRUPT, SA_SAMPLE_ RANDOM, SA_SHIRQ其中的一个或多个标志的位掩码。 第4个参数devname:与中断相关的设备的ASCII文本表示法。 第5个参数dev_id:主要用于共享中断线。 request_irq( )的返回值 若成功执行,返回0;如果返回非0值,表示有错误发生,在这种情况下,指定的中断处理程序不会被注册。 使用request_irq( )函数 释放中断处理程序 卸载驱动程序时,需要注销相应的中断处理程序,并释放中断线。 可以调用void free_irq (unsigned int irq, void *dev_id)来释放中断线。 如果指定的中断线不是共享的,那么,该函数删除处理程序的同时将禁用这条中断线。如果中断线是共享的,则仅删除dev_id所对应的处理程序,而这条中断线本身只有在删除了最后一个处理程序时才会被禁用。 6.4 编写中断处理程序 典型的中断处理程序声明: 在include/linux/interrupt.h中有如下几行,定义了中断处理程序的返回值: 典型中断处理程序的参数说明 irq:是这个处理程序要响应的中断的中断线号。现在,该参数已没有太大用处。 dev_id:一个通用指针,它与传递给request_irq( )的参数dev_id必须一致。如果该值有唯一确定性,那么它就相当于一个cookie,可以用来区分共享同一中断处理程序的多个设备。 regs:一个指向结构的指针,该结构包含处理中断之前处理器的寄存器和状态。除了调试,很少用到它。 中断处理程序和重入 当一个给定的中断处理程序正在执行时,相应的中断线在所有处理器上都会被屏蔽掉,以防止在同一中断线上接收到另一个新的中断。因此
您可能关注的文档
最近下载
- 字节跳动项目经理岗面试题库参考答案和答题要点.docx VIP
- 泸州老窖“浓香文酿杯”企业文化知识竞赛考试题库大全-下(多选、填空题汇总).docx VIP
- 泸州老窖“浓香文酿杯”企业文化知识竞赛考试题库大全-中(判断题汇总).docx VIP
- 屋面钢网架专项施工方案.docx VIP
- 泸州老窖“浓香文酿杯”企业文化知识竞赛考试题库大全-上(单选题汇总).docx VIP
- 2020年江苏省苏州市昆山市普通高中自主招生物理试卷(含解析).doc VIP
- 幼儿教师选调进城考试试题题库含答案.pdf VIP
- 四川省安全员C证证考试题库及答案.docx VIP
- 《抗美援朝》课件优秀课件.pptx VIP
- 标准图集-20S515-钢筋混凝土及砖砌排水检查井.pdf VIP
文档评论(0)