- 1、本文档共26页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
嵌入式Linux操作系统第7章 中断与系统调用 第1章 嵌入式Linux操作系统简介 第2章 Linux操作系统使用与系统配置 第3章 嵌入式Linux编程环境 第4章 存储管理 第5章 操作系统进程 第6章 进程间通信 第7章 中断与系统调用 第8章 文件管理 第9章 设备管理 第10章 嵌入式Linux的构建 课程安排: * 第7章 中断与系统调用 7.1 什么是中断 7.2 嵌入式平台硬件中断特点 7.3 Linux内核中断机制概述 7.4 编写中断处理程序ISR 7.5 tasklet机制 7.6 上半部和下半部 7.7 工作队列workqueues 7.8 系统调用 思考题 本章课程: * 7.1 什么是中断 当一个设备发出中段请求时,CPU停止正在执行的指令,转而跳到包括中断处理代码或者包括指向中断处理代码的转移指令所在的内存区域。当中断处理完毕以后,CPU将恢复到以前的状态,继续执行中断处理前正在执行的指令。 * 7.2 嵌入式平台硬件中断特点 申请IRQ(Interrupt Requirement)的过程,分为3步: 1.将所有的中断线探测一遍,看看哪些中断还没有被占用。从这些还没有被占用的中断中选一个作为该设备的IRQ。 2.通过中断申请函数申请选定的IRQ,这是要指定申请的方式是独占还是共享。 3.根据中断申请函数的返回值决定是否重新申请或者放弃申请并返回错误。 * 7.3 Linux内核中断机制概述 Linux系统的中断就是通常意义上的“中断处理程序”,它是直接处理由硬件发过来的中断信号。当Linux内核收到中断请求后,它首先判断中断源,然后调用相应的设备驱动程序, 驱动程序会去设备上查看其状态寄存器以了解发生了什么事情,并进行相应的操作。 Linux内核与中断相关的部分包括:硬件中断,下半部任务和内核线程 1、硬中断任务 硬中断是指那些由处理器以外的外设产生的中断,这些中断被处理器接收后交给内核中的中断处理程序处理。要注意的是:第一,硬中断是异步产生的,中断发生后立刻得到处理,也就是说中断操作可以抢占内核中正在运行的代码。这点非常重要。第二,中断操作是发生在中断上下文中的(所谓中断上下文指的是和任何进程无关的上下文环境)。中断上下文中不可以使用进程相关的资源,也不能够进行调度或睡眠。因为调度会引起睡眠,但睡眠必须针对进程而言(睡眠其实是标记进程状态,然后把当前进程推入睡眠列队),而异步发生的中断处理程序根本不知道当前进程的任何信息,也不关心当前哪个进程在运行,它完全是个过客。 * 7.3 Linux内核中断机制概述 2、下半部任务 下半部任务的由来完全出自上面提到的硬中断的影响。硬件中断任务(处理程序)是一个快速、异步、简单地对硬件做出迅速响应并在最短时间内完成必要操作的中断处理程序。硬中断处理程序可以抢占内核任务并且执行时还会屏蔽同级中断或其它中断,因此中断处理必须要快、不能阻塞。这样一来对于一些要求处理过程比较复杂的任务就不合适在中断任务中一次处理。例如在网卡接收数据的过程中,首先网卡发送中断信号通知CPU获取数据,然后系统从网卡中读取数据存入系统缓冲区中,再下来解析数据然后送入应用层。这些如果都让中断处理程序来处理显然过程太长,造成新来的中断丢失。因此Linux将这种任务分割为两个部分,中断处理程序,短平快地处理与硬件相关的操作(如从网卡读数据到系统缓存);而把对时间要求相对宽松的任务(如解析数据的工作)放在另一个部分执行,这个部分就是下半部任务。下半部任务是一种推后执行任务,它将某些不那么紧迫的任务推迟到系统更方便的时刻运行。内核中实现下半部的手段经过不断演化,目前已经从最原始的BH(bottom thalf) 衍生出tasklet,软中断softirq,BH,工作队列(work queues)。 * 7.3 Linux内核中断机制概述 3、软中断操作 软中断softirq不象硬中断那样是由硬件中断信号触发执行的,所以也不同于硬件中断那样时随时都能够被执行。总的来讲,软中断会在内核处理任务完毕后返回用户级程序前得到处理机会。具体的讲,有三个时刻它将被执行do_softirq函数。硬件中断操作完成后,系统调用返回时,内核调度程序中。从中可以看出软中断会紧随硬中断处理,所以抢占内核任务至少在时钟中断后总有机会运行一次。还要记得软中断可以在不同处理器上并发执行。 使用时先open_softirq,需要出发此软中断时使用raise_softirq或cpu_raise_softirq。 软中断的执行也处于中断上下文中,所以中断上下文对它的限制是和硬中断一样的,一样不能进入阻塞状态。 * 7.3 Linux内核中断机制概述 tasklet和bottom half
文档评论(0)