linux 学习笔记 - 中断

linux 学习笔记 - 中断

ID:33686081

大小:223.00 KB

页数:8页

时间:2019-02-28

linux 学习笔记 - 中断_第1页
linux 学习笔记 - 中断_第2页
linux 学习笔记 - 中断_第3页
linux 学习笔记 - 中断_第4页
linux 学习笔记 - 中断_第5页
资源描述:

《linux 学习笔记 - 中断》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、Linux中断1介绍我们知道,处理器的处理速度比硬件来说要快上N个数量级,那么由处理器向硬件发出请求并等待回应的办法显然是不可取的,在这期间处理器浪费了大量的时间。这些时间应该被用来处理其他的事务。轮询可能是解决办法之一,但显然这样的办法也会让处理器做大量的无用功。最好的办法,就是让硬件在需要的时候才向内核发出信号,然后处理器去响应硬件的请求。这就是中断机制。1.1什么是中断当硬件需要和处理器通信时,会产生一个电信号(即中断信号),并发往处理器,处理器收到后,会告诉OS,然后由OS进行后续处理。每一种硬件设备都有其专门的中

2、断值,OS得以通过这个来进行区分,到底是哪个设备发生了中断。这些中断值又被称为中断请求(IRQ)当然有的IRQ是动态分配的。其实OS关注的并不是某个设备一定要产生某个特定的IRQ,而是一个特定的IRQ要和一个特定的设备有映射的关系,而且OS需要知道这种关系。这就表明,即便是IRQ在多个设备之间进行共享也是可以的,只要OS能够知道这些映射关系,并且能够有办法区分某一个时刻产生中断的设备是哪一个即可。1.2中断处理程序中断处理程序,顾名思义,自然就是发生中断时,需要调用的处理函数。特点:1、不是每设备一个处理程序,而是每中断一

3、个处理程序一个设备可以有多个中断处理程序。2、运行于特殊的上下文中:中断上下文3、一般的中断处理程序,都会关中断,考虑到中断随时都有可能发生,处理程序应当尽可能的高效4、一般中断处理程序都是要和硬件打交道的1.3中断上下文1.3.1回忆进程上下文1、对内核而言,处于进程上下文表明内核处于这样一种模式:进程在执行(系统调用或者运行内核线程)2、可以通过current宏关联当前进程2010-07-07Page8,Total8第8页,共8页1、进程以进程上下文的形式关联内核,使得在进程上下文中可以睡眠,也可以调用调度程序。1.1

4、.1中断上下文中断上下文,则和进程上下文几乎完全相反:和进程无关、和current宏无关à不能睡眠、不能调用会导致睡眠的函数。另外,处于中断上下文的代码,应当迅速、简洁,尽量把工作放到下半部中去完成。关于中断使用的堆栈:2.6的内核之前,中断没有自己的堆栈,而是与被中断的内核线程共享该线程的堆栈(2页)。2.6之后,内核增加了一个选项:每个内核线程只提供一页内存,这减轻了内存的压力,也同时促使中断被分离了出来:每处理器一页,称为中断栈1.2中断的实现机制Linux中,中断的处理机制是依赖于体系结构的(处理器、中断控制器、体

5、系结构的设计、机器本身)。下图是中断的路由1.3关于中断的下半部我们为什么需要下半部?因为我们要把中断处理中需要做的工作区分开来:中断处理程序中,只处理那些有严格时间限制的工作,比如复位硬件,对中断进行应答等。而那些可以拖到后面做的,或者说有可能睡眠的处理,都应当放到下半部去处理这样做的目的很显然,就是让中断处理程序尽可能的简洁明快在适当的时机,下半部会开中断执行2中断控制为什么要控制中断?控制中断的原因,说到底还是为了要进行同步。通过禁止中断,可以确保该中断不会抢占当前运行的代码。禁止中断还可以禁止内核抢占。需要注意的是

6、,中断都是对每处理器而言(中断堆栈),也就是说,2010-07-07Page8,Total8第8页,共8页禁止中断并不能够保证自己使用的数据不会被其他处理器的并发进程所访问到。因此如果在使用某些全局的数据时,需要考虑对其进行加锁保护。即:锁提供机制,防止来自其他处理器(当然也可以是本处理器)的并发访问,中断提供机制,防止来自其他中断处理程序的并发访问。1.1禁止和激活中断这里需要注意的是,内核提供两类接口:禁止/激活中断,保存/恢复中断状态。前者比较傻瓜,会无条件的禁止/激活中断,这需要使用者对当前的中断状态十分确定。而后

7、者则相对更容易使用,免去了判断另外关于cli()与sti():在2.5版本之前的内核,提供“禁止所有处理器上的中断”这样的功能,现在已经去掉了,需要开发人员用锁来避免并发。这么做的好处是,是的代码更加流线化,不会簇拥成团。而且使用粒度更细的锁,会比全局锁要效率高。1.2禁止指定中断线我们当然不用禁止全局的中断,有时候禁止某一条中断线就可以了,这是指:凡是在该中断线上产生的中断,都将不会报告给处理器。一般对于有多个中断处理程序共享的中断线,并不建议使用这个功能,因为这会导致这条线上的其他的设备无法传递中断。1.3中断系统的状

8、态有时候我们需要判断代码所处的状态:是否在中断上下文中。因为有些操作是只有在进程上下文中才能够进行的,比如睡眠。系统提供接口,来判断中断是否被禁止、是否处于中断上下文、是否正在执行中断处理程序。2下半部一般的中断处理都会分为两个部分,前面讲到的中断处理程序只是所谓的上半部,这是系统处理中断不可或缺的一部

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。