您好、欢迎来到现金彩票网!
当前位置:2019欢乐棋牌 > 执行例程 >

第7章中断处理程序

发布时间:2019-06-28 08:49 来源:未知 编辑:admin

  在响应一个特定中断的时候,内核会执行一个函数,该函数叫做中断处理程序或中断服务例程。产生中断的每个设备都有一个相应的中断处理程序。例如,由一个函数专门处理来自系统时钟的中断,而另外一个函数专门处理由键盘产生的中断。一个设备的中断处理程序是它设备驱动程序的一部分——设备驱动程序是用于对设备进行管理的内核代码。

  在Linux中,中断处理程序是普通的C函数。只不过这些函数必须按照特定的类型声明,以便内核能够以标准的方式传递处理程序的信息,在其他方面,它们与一般的函数没有差别。中断处理程序与其他内核函数的真正区别在于,中断处理程序是被内核调用来响应中断的,而它们运行于称之为中断上下文的特殊上下文中。需要指出的是,中断上下文偶尔也称为原子上下文,该上下文中的执行代码不可阻塞。

  中断可能随时发生,因此中断处理程序随时可能执行。所以必须保证中断处理程序能够快速执行,才能保证尽可能快地恢复中断代码的执行。因此,尽管对硬件而言,操作系统能迅速对其中断进行服务非常重要;当然对系统的其他部分而言,让中断处理程序在尽可能短的时间内完成运行也同样重要。

  最起码,中断处理程序要负责通知硬件设备中断已被接收,但是中断处理程序还要完成大量其他的工具。例如,可以考虑一下网络设备的中断处理程序面临的挑战。该处理程序除了要对硬件应答,还要把来自硬件的网络数据包拷贝到内存,对其进行处理后再交给合适的协议栈或应用程序。

  又想中断处理程序运行得快,又想中断处理程序完成的工作量多,这两个目的显然有所抵触。鉴于两个目的之间存在此消彼长的矛盾关系,一般把中断处理切为两个部分或两半。中断处理程序是上半部——接收到一个中断,它就立即开始执行,但只做有严格时限的工作,例如对接收的中断进行应答或复位硬件,这些工作都是在所有中断被禁止的情况下完成的。能够被允许稍后完成的工作会推迟到下半部去。在合适的时机,下半部会被开中断执行。Linux提供了实现下半部的各种机制。

  考察一下上半部和下半部分割的例子,以网卡作为实例。当网卡接收来自网络的数据包时,需要通知内核数据包到了。网卡需要立即完成这件事,从而优化网络的吞吐量和传输周期,以避免超时。因此,网卡立即发出中断,有最新数据包了。内核通过执行网卡已注册的中断处理程序来做出应答。

  中断开始执行,通知硬件,拷贝最新的网络数据包到内存,然后读取网卡更多的数据包。这些都是重要、紧迫而又与硬件相关的工作。内核通常需要快速的拷贝网络数据包到系统内存,因为网卡上接收网络数据包的缓存大小固定,而且相比系统内存也要小得多。所以上述拷贝动作一旦被延迟,必然造成缓存溢出——进入的网络包占满了网卡的缓存,后续的入包只能被丢弃。当网络数据包被拷贝到系统内存后,中断的任务算是完成了,这时它将控制权交还给系统被中断前原先运行的程序。处理和操作数据包的其他工作在随后的下半部中进行。

  中断处理程序是管理硬件的驱动程序的组成部分。每一设备都有相关的驱动程序,如果设备使用中断,那么相应的驱动程序就注册一个中断处理程序。

  驱动程序可以通过request_irq()函数注册一个中断处理程序,声明在文件linux/interrupt.h中,并且激活给定的中断线,以处理中断:

  第一个参数irq表示要分配的中断号。对某些设备,如传统PC设备上的系统时钟或键盘,这个值通常是预先确定的。而对于大多数其他设备来说,这个值要么是可以通过探测获取,要么可以通过编程动态确定。

  第二个参数handler是一个指针,指向处理这个中断的实际中断处理程序。只要操作系统一接收到中断,该函数就被调用。

  注意handler函数的原型,它接受两个参数,并有一个类型为irqreturn_t 的返回值。

  第三个参数flags可以为0,也可能是下列一个或多个标志的位掩码。其定义在文件linux/interrupt.h。在这些标志中最重要的是:

  IRQF_DISABLED——该标志被设置后,意味着内核在处理中断处理程序本身期间,要禁止所有的其他中断。如果不设置,中断处理程序可以与除本身外的其他任何中断同时运行。多数中断处理程序是不会去设置该位的,因为禁止所有中断是一种野蛮行为。这种用法留给希望快速执行的轻量级中断。这一标志是SA_INTERRUPT标志的当前表现形式,在过去的中断用以区分快速和慢速中断。

  IRQF_SHARED——此标志标明可以在多个中断处理程序之间共享中断线。在同一个给定线上注册的每个处理程序必须指定这个标志;否则,在每条线上只能有一个处理程序。

  第四个参数name是与中断相关的设备的ASCII文本表示。例如,PC机上键盘中断对应的这个值为“keyboard”。这些名字会被/proc/irq和/proc/interrupts文件使用,以便与用户通信。

  第五个参数dev用于共享中断线。当一个中断处理程序需要释放时,dev将提供唯一的标志信息,以便从共享中断线的诸多中断处理程序中删除指定的那一个。如果没有这个参数,那么内核不可能知道在给定的中断线上到底要删除哪一个处理程序。如果无须共享中断线,那么将该参数赋值为NULL就可以了,但是,如果中断线是被共享的,那么就必须传递唯一的信息。另外,内核每次调用中断处理程序时,都会把这个指针传递给它。实践中会通过它传递驱动程序的设备结构:这个指针是唯一的,而且有可能在中断处理程序内被用到。

  request_irq()成功执行会返回0。如果返回非0值,表示有错误发生,在这种情况下,指定的中断处理程序不会被注册。最常见的错误是-EBUSY,它表示给定的中断线已经在使用。

  注意:request_irq()函数可能会睡眠,因此,不能在中断上下文或其他不允许阻塞的代码中调用该函数。在睡眠不安全的上下文中调用request_irq()函数,是一种常见错误。造成这种错误的部分原因是为什么request_irq()会引起阻塞。在注册的过程中,内核需要在/proc/irq文件中创建一个与中断对应的项。函数proc_mkdir()就是用来创建这个新的procfs项的。proc_mkdir()通过调用函数proc_create()对这个新的procfs项进行设置,而proc_create()会调用函数kmalloc()来请求分配内存。备注:函数kmalloc()是可以睡眠的。

  在一个驱动程序中请求一个中断线,并在通过request_irq()注册中断处理程序:

  在这个例子中,irqn是请求的中断号;my_interrupt是中断处理程序;通过标志设置中断号可以共享;设备命名为“my_device”;最后是传递my_dev变量给dev形参。如果请求失败,那么这段代码将打印出一个错误并返回。如果调用返回0,则说明中断处理程序已经成功注册。此后,处理程序就会在响应该中断时被调用。有一点很重要,初始化硬件和注册中断处理程序的顺序必须正确,以防止中断处理程序在设备初始化完成之前就开始执行。

  卸载驱动程序时,需要注销相应的中断处理程序,并释放中断号。上述动作需要调用:

  如果指定的中断号不是共享的,那么,该函数删除处理程序的同时将禁用这个中断号。如果中断号是共享的,则仅删除dev所对应的处理程序,而这个中断号本身只有在删除了最后一个处理程序时才会被禁用。可以看出为什么唯一的dev如此重要。对于共享的中断号,需要一个唯一的信息来区分其上面的多个处理程序,并让free_irq()仅仅删除指定的处理程序。不管在哪种情况下,如果dev非空,它都必须与需要删除的处理程序相匹配。必须从进程上下文中调用free_irq()。

  来源:什么是中断?就是打断当前要做的事,转而去执行别的事情。比如小七我现在正在电脑前写帖子,突然老妈叫我帮她下楼拿点东西,于是我就收...博文来自:ckkyjtqlt的专栏

  定义    在计算机科学中,中断指计算机CPU获知某些事,暂停正在执行的程序,转而去执行处理该事件的程序,当这段程序执行完毕后再继续执行之前的程序。整个过程称为中断处理,简称中断,而引起这一过程的事件...博文来自:程序人生

  在嵌入式系统的设计中,与外设交互,基本是两种模式:轮询和中断。考虑到CPU与外设之间的速度差,如果涉及到与外设通信,一般采用中断的方式:只有当外设完成了数据发送或者接收,才中断CPU,获得处理,这样可...博文来自:ronhu的博客

  中断概念CPU在工作的过程中,经常需要与外设进行交互,交互的方式包括”轮询方式”,”中断方式”。1.轮询方式:CPU不断地查询设备的状态。该方式实现比较简单,但CPU利用率很低,不适合多任务的系统。2...博文来自:csdn1126274345的博客

  在linux中,中断处理程序看起来就是普通的C函数,只不过这些函数必须按照特定的类型声明,以便内核能够以标准的方式传递处理程序的信息,在其他方面,他们与一般的函数看起来别无不同。那么终端处理程序与其他...博文来自:道亦无名

  转自:中断还是中断,我讲了很多次的中断了,今天还是要讲中断,为啥呢?因为...博文来自:wlf_go的博客

  处理器的速度跟外围硬件设备的速度往往不在一个数量级上,因此,如果内核采取让处理器向硬件发出一个请求,然后专门等待回应的方法,显然差强人意;轮询虽然能够解决这个问题,但会周期性地重复执行。更好的办法是让...博文来自:lsn946803746的专栏

  CPU运行过程中,如何知道各类外设发生了某些不预期的事件,比如串口接收到了新数据、USB接口中插入了设备、按下某个按键等。主要有以下两个方法:  查询方式:程序循环地查询各设备的状态并作出相应反应。它...博文来自:Gino的专栏

  中断的响应时间就是中断的响应过程的时间,中断的响应过程是当有事件产生,进入中断之前必须先记住当前正在做的事情,然后去处理发生的事情,处理这个过程的时间,叫做中断响应时间。计算机中也是采用的这种方法...博文来自:小米mm修仙路

  (From:中断及中断处理过程1.中断和异常的概念区别  Intel的官方文档...博文来自:zmmycsdn的博客

  今天在写一个java小游戏的遇到了一些问题,就是和中断程序有关,结果去网上搜索有许多的错误方法,而且不是很规范,然后我就自己总结了以下方法,并且归好了类,希望能帮到你。(亲测可用)(1)System....博文来自:小危仔

  主要内容:缺失值、重复值、字符串操作和其他分析数据转换的工具7.1处理缺失值pandas对象的所有描述性统计信息默认情况下是排除缺失值的 pandas使用浮点值NaN(notanumber)表示缺失值...博文来自:lurong66的博客

  有效的决策一、个人见解和决策的关系决策是一种判断,是若干项方案中的选择。所谓选择,通常不是“是”与“非”间的选择,最多只是“大概是对的”与“也许是错的”之间的选择。而绝大多数的选择,都是任何一种方案均...博文来自:weixin_33693070的博客

  并发控制时间片轮转法,高有限级优先调度,枪占调度...博文来自:hrdzkj的专栏

  中断时计算机科学中最基本、也是十分重要的一个概念,可以说没有中断概念的引入和应用就不会有今天的计算机,至少不会有搞效率的计算机。一、基本概念二、BIOS中断服务三、DOS中断服务四、中断处理技术五、中...博文来自:似水流年

  第五章 中断和中断服务程序一,处理器与外围设备进行通信有两种方式:   1,轮询(效率低下)   2,中断二,中断原理   当我们在敲击键盘的时候,键盘控制器会发送一个中断给处理器,告诉OS有中断产生...博文来自:arm-linux

  最近学习51单片机,算是古董级的单片机。51单片机非常经典,好比C语言之于编程语言,而且由于价格便宜而应用非常广泛,资料可以说是最多最全的,对于初学者来说,学习成本非常低,想学习单片机的同学可以了解一...博文来自:sinat_39416814的博客

  我们首先需要了解什么是中断?中断是指cpu在执行某一过程中由于外界原因必须暂停现在的事情,处理别的事情,处理完了再回去执行暂停的事情。中断的优点?1.分时操作。2.实时响应3.可靠性高中断中用到的寄存...博文来自:陈娟的博客

  6.7中断控制Linux内核提供了一组接口用于操作机器上的中断状态。这些接口为我们提供了能够禁止当前处理器的中断系统,或屏蔽掉整个机器的一条中断线的能力,这些例程都是与体系结构相关的,可以在和中找到。...博文来自:lsn946803746的专栏

  由于断电,无法更新由此想到程序数据交换中的切换在一条线路上运行的不管是何种物质或者概念,即便是分支水管集中在一条水管中其水流的大小依然是由管道的直径来确定,假如说把水管极限压缩即只能通过最小的一单位物...博文来自:编程视觉

  中断的基本概念程序中断通常简称中断,是指CPU在正常运行程序的过程中,由于预选安排或发生了各种随机的内部或外部事件,使CPU中断正在运行的程序,而转到为相应的服务程序去处理,这个过程称为程序中断。二、...博文来自:Amao_come_on 的专栏

  原文地址:内核新手区本文通过一个简单的中断程序来描述一般中断程序的基本框架。完整代码在这里。中断程序一般会包含在某个设备的驱动程序中,因此,接...博文来自:liuzq的专栏

  笔者认为,《疯狂Java讲义(第4版)》这本书的前6章是Java语言的核心,前4章是结构化程序设计的核心,第5章和第6章是Java面向对象的核心。从第七章开始,都是在这些核心基础知识上的扩展了,很多内...博文来自:ccnuacmhdu的博客

  7-1.字典方法。哪个字典方法可以用来把两个字典合并到一起updata()方法可以用来将一个字典的内容添加到另一个字典中,实现字典的合并dict1={host:123,port:322...博文来自:的博客

  前段时间用STM32F103VBT6写了一个中断的函数,借此机会想了解下STM32的中断机制,用过之后发现STM32的中断配置相当灵活,稳定行很高,测试发现几乎没出过什么差错。我在程序里开了三个中断,...博文来自:zsn的博客

  进入一个中断的中断处理程序时为什么要先关此中断,不关行吗? 请大家指教论坛

  操作系统18———IO系统之中断机构和设备驱动程序一.目录操作系统18———IO系统之中断机构和设备驱动程序一.目录二.中断简介1.中断和陷入2.中断限量表和中断优先级3.对多中断源的处理方式三.中断...博文来自:冰炭不投day的博客

  中断程序设计实验目的:1.掌握中断概念,掌握中断程序设计方法2.掌握中断程序调试方法实验步骤:1.编辑利用编辑器(记事本,也可采用其它编辑器)建立一个名为ASM3.ASM的文本文件,内容如下:ASSU...博文来自:我的梦

  流失客户分类模型1数据预处理如果动手做过的人可能面临的第一个问题就是,这数据读进pandas怎么弄编码结果都是错的。如果你存在这样的问题,那么我建议你使用NotePad++载入文件以后,改成无BOM的...博文来自:望月怀古

  7.18.1强口令检测写一个函数,它使用正则表达式,确保传入的口令字符串是强口令。强口令的定义是:长度不少于8个字符,同时包含大写和小写字符,至少有一位数字。你可能需要用多个正则表达式来测试该字符串,...博文来自:weixin_42562662的博客

  1.什么是中断简单来说中断就是硬件设备与处理器的一种交流方式,比如当我按下一个键时,只有当处理器知道我按下了这个键并且做出相应的处理时,按键这个操作才是有效的。我们知道处理器的速度远远高于外围设备的速...博文来自:hello_yang_123的博客

  什么是中断?中断实际上是对信号做出的一种反应,即CPU对I/O设备发来的中断信号的一种反应。是由外部设备引起的。俗称外中断。在此插一嘴什么是陷入?陷入是特殊的中断,因为陷入是由CPU内部事件引起的中断...博文来自:Helloirbd的博客

  7.1-1这个如果理解了这节内容的线)当数组的所有元素相同的线操作,在循环结束后i=r-1,返回的是r(2)只需要在循环内部加上相等判断,间断的让i...博文来自:sscout的博客

  关于Ajax原理本地file浏览不要用webkit核心浏览器,要用firefox。否则就要搭建服务器后通过http访问。今天学习了Ajax从本地文件获取文本。遇到了些问题,在网络上都找到了解决办法。...博文来自:where_slr的博客

  相信学习编程的同学,或多或少都接触到算法的时间复杂度和空间复杂度了,那我来讲讲怎么计算。        常用的算法的时间复杂度和空间复杂度 一,求解算法的时间复杂度,其具体步骤是: ⑴ 找出算法...博文来自:杨威的博客

  本帖只谈技术实现,首先我们自己来编译一个比特币客户端吧, 技术讨论,欢迎大家入伙(注明:csdn)。...博文来自:开心乐源的专栏

  帐号相关流程注册范围 企业 政府 媒体 其他组织换句话讲就是不让个人开发者注册。 :)填写企业信息不能使用和之前的公众号账户相同的邮箱,也就是说小程序是和微信公众号一个层级的。填写公司机构信息,对公账...博文来自:小雨同学的技术博客

  最近在做一个每天定点从FTP自动下载节目.xml并更新到数据库的功能。首先想到用 FileSystemWatcher来监控下载到某个目录中的文件是否发生改变,如果改变就执行相应的操作,然后用timer...博文来自:kongwei521的专栏

  扫二维码关注,获取更多技术分享 本文承接之前发布的博客《 微信支付V3微信公众号支付PHP教程/thinkPHP5公众号支付》必须阅读上篇文章后才可以阅读这篇文章。由于最近一段时间工作比较忙,...博文来自:Marswill

  本篇文章是根据我的上篇博客,给出的改进版,由于时间有限,仅做了一个简单的优化。相关文章:将excel导入数据库2018年4月1日,新增下载地址链接:点击打开源码下载地址十分抱歉,这个链接地址没有在这篇...博文来自:Lynn_Blog

  mybatis简单小巧易于上手,方便浏览修改sql语句博文来自:努力+坚持,而且还很年轻

  jquery/js实现一个网页同时调用多个倒计时(最新的) 最近需要网页添加多个倒计时. 查阅网络,基本上都是千遍一律的不好用. 自己按需写了个.希望对大家有用. 有用请赞一个哦! //js ...博文来自:Websites

  Java 中的堆是 JVM 所管理的最大的一块内存空间,主要用于存放各种类的实例对象。   在 Java 中,堆被划分成两个不同的区域:新生代 ( Young )、老年代 ( Old )。新生代 (...博文来自:朱小厮的博客

  我们在做项目的时候有时候需要给图片添加水印,水寒今天就遇到了这样的问题,所以搞了一个工具类,贴出来大家直接调用就行。/** * 图片工具类 * @author 水寒 * 欢迎访问水寒的个人博客:...博文来自:水寒

  强连通分量: 简言之 就是找环(每条边只走一次,两两可达) 孤立的一个点也是一个连通分量   使用tarjan算法 在嵌套的多个环中优先得到最大环( 最小环就是每个孤立点)   定义: int Ti...博文来自:九野的博客

  1. 规则引擎面临的问题:业务规则的实现大部分是由开发人员来实现的 业务规则需要业务分析人员能够阅读和理解 业务规则的可读性和用户的友好性都不太好2. DSL领域特殊语言DSL == Domain...博文来自:哎幽的成长

  nginx 是个轻量级的Web服务器,比Apache不差博文来自:老徐2014

  若是研究区在中国,则在地理空间数据云有中国区合成好的数据,直接下载用即可。数据格式为TIF。坐标为WGS84,不用再转换投影。下载网址为:博文来自:hengcall的博客

  :做寻找和输出的那个算法时,为什么可以找到多条路径呀?因为这个“visited[xi][yi]=0”吗?可是为什么呀,不理解。。。

http://nicolashsiung.com/zhixinglicheng/155.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有