让硬件在需要的时候再向内核发出信号。这就是中断机制,先讨论中断,进而讨论内核如何使用所谓的中断处理函数处理对应的中断。

一、中断

  1)中断

    中断使得硬件得以发出通知给处理器。例如,在前几键盘的时候,键盘控制器会发出一个中断,通知操作系统有键按下。中断本质上时一种特殊的电信号,由硬件设备发向处理器。处理器收到中断后,会马上向操作系统反应此信号的到来,然后就由操作系统负责这些新到来的数据。硬件设备生产中断的时候并不考虑与处理器的时钟同步也就是说中断随时可以产生。因此,内核随时可能因为新到来的中断而被打断。

    当接收到一个中断后,中断控制器会给处理器发送一个电信号。处理器一经检测到此信号,便中断自己的当前工作转而处理中断。此后,处理器会通知操作系统一经产生中断,这样,操作系统就可以对这个中断进行适当的处理了。

    不同的设备对用不同的中断,每个中断通过一个唯一的数字标识。这些中断值通常称为中断请求(IRQ)。每个IRQ线都会被关联一个数值量。例如:IRQ 0是时钟中断,而IRQ 1是键盘中断。但并非所有的中断号都是这样严格定义的。对于链接在PCI总线上的设备而言,中断是动态分配的。而且其他费PC的体系结构也具有动态分配可用中断的特性。实际上,硬件发出中断就是为了引起内核的关注。

  2)异常

    异常与中断不同,它在产生时必须考虑与处理器时钟同步。实际上,异常页常常成为同步中断。比如在除数为0时,处理器就会产生一个异常。因为许多处理器体系结构处理异常与处理中断的方式类似。

二、中断处理程序

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

    中断处理程序与其他内核函数的真正区别在于,中断处理程序是被内核调用来响应中断的,而它们运行于我们称之为中断上下文的特殊上下文中。中断可能随时发生,因此中断处理程序也就随时可能执行。所以必须保证中断处理程序能够快速执行,这样才能保证尽可能快地恢复中断代码的执行。因此,尽管对硬件而言,操作系统能迅速对其中断进程服务非常重要;当然对系统的其他部分而言,让中断处理程序在尽可能短的时间内完成运行也同样重要。

三、上半部与下半部的对比

    又想中断处理程序运行得快,又想中断处理程序完成的工作量多,两者不能兼得。为了达到更好的目的,一般把中断处理切为两个部分,中断处理程序时上半部,接收到一个中断,它就立即开始执行,但只做有严格时限的工作,例如对接收的中断进行应答或复位硬件,这些工作都是在所有中断被禁止的情况下完成的。能够被允许稍后完成的工作会推迟到下半部去。

    例如,当网卡接收来自网络的数据包时,需要通知内核数据包到了。网卡需要立即完成这件事,从而优化网络的吞吐量和传输周期,以避免超时。因此,网卡立即发出中断。内核通过执行网卡已注册的中断处理程序来做出应答。

四、注册中断处理程序

五、编写中断处理程序

六、中断上下文

七、中断处理机制的实现

八、/proc/interruts

九、中断控制

linux内核--中断和中断处理(一)的更多相关文章

  1. Linux 内核中断内幕

    转自:http://www.ibm.com/developerworks/cn/linux/l-cn-linuxkernelint/index.html#resources Linux 内核中断内幕 ...

  2. Linux内核中断顶半部和底半部的理解

    文章目录 中断上半部.下半部的概念 实现中断下半部的三种方法 软中断 软中断模版 tasklet tasklet函数模版 工作队列 工作队列函数模版 进程上下文和中断上下文 软中断和硬中断的区别 硬中 ...

  3. Linux内核中断和异常分析(中)

    在linux内核中,每一个能够发出中断请求的硬件设备控制器都有一条名为IRQ的输出线.所有现在存在的IRQ线都与一个名为可编程中断控制器的硬件电路的输入引脚相连,上次讲到单片机的时候,我就讲到了单片机 ...

  4. Linux内核中断学习

    1.内核中断概述 (1)在OS环境下编写中断处理函数与之前在裸机中编写中断处理函数的方式是不一样的,在Linux内核中提供了一套用来管理硬件中断资源的软件体系架构. (2)在操作系统中,中断号与gpi ...

  5. linux内核--中断处理程序

    一个设备的中断处理程序是它设备驱动程序的一部分--设备驱动程序是用于对设备进行管理的内核代码.中断处理程序与其他内核函数的真正区别在于,中断处理程序是被内核调用来响应中断的,而它们运行于我们称之为中断 ...

  6. Linux内核中断和异常分析(上)

    中断,通常被定义为一个事件.打个比方,你烧热水,水沸腾了,这时候你要去关掉烧热水的电磁炉,然后再去办之前手中停不下来的事情.那么热水沸腾就是打断你正常工作的一个信号机制.当然,还有其它的情况,我们以后 ...

  7. Linux内核中断和异常分析(下)

    这节,我们继续上,中(以前的日志有)篇目进行分析,结合一个真实的驱动案例来描述linux内核中驱动的中断机制,首先我们先了解一下linux内核中提供的中断接口. 这个接口我们需要包含一个头文件:#in ...

  8. linux内核中断之看门狗

    一:内核中断 linux内核中的看门狗中断跟之前的裸板的中断差不多,在编写驱动之前,需要线把内核自带的watch dog模块裁剪掉,要不然会出现错误:在Device Drivers /Watchdog ...

  9. Linux 内核中断内幕【转】

    转自:http://www.ibm.com/developerworks/cn/linux/l-cn-linuxkernelint/ 本文对中断系统进行了全面的分析与探讨,主要包括中断控制器.中断分类 ...

随机推荐

  1. iOS--九宫格布局

    [self rankWithTotalColumns: andWithAppW: andWithAppH:]; //九宫格布局 - (void)rankWithTotalColumns:(int)to ...

  2. jquery中的属性和css

    jQuery中的属性用于获取或设置元素的属性 1.attr(),获取或设置所有相匹配的元素的属性值:removeAttr("attr"),移除所有相匹配的元素的属性 //html ...

  3. Nginx学习之六-nginx核心进程模型

    一.Nginx整体架构 正常执行中的nginx会有多个进程,最基本的有master process(监控进程,也叫做主进程)和woker process(工作进程),还可能有cache相关进程. 一个 ...

  4. boost::pool与内存池技术

      建议看这个链接的内容:http://cpp.winxgui.com/cn:mempool-example-boost-pool Pool分配是一种分配内存方法,用于快速分配同样大小的内存块,    ...

  5. 数据持久化之CoreData

    再次回归博客园, 已经实属不易了, 面临这近期忙忙碌碌的项目开发, 虽然并不是完全的没有闲暇时间, 但是怎么说呢, 也有着各种的无奈与曲折, 面临这产品需求的不断变化和页面的不断更新, 对于一个程序员 ...

  6. linux内存机制

    ~# free -m         total used  free shared buffers cachedMem: 16086 8579 7507    0      152      800 ...

  7. 把Nginx加入系统服务 service nginx (start | stop | restart | reload)

    vim /etc/init.d/nginx 1 #!/bin/bash  2 # nginx Startup script for the Nginx HTTP Server  3 # it is v ...

  8. Oracle 11g 完全卸载

    停止所有Oracle 11g相关的服务 1.打开"服务"窗口 键入命令:"services.msc",回车,如下图: 2.停止所有Oracle 11g相关的服务 ...

  9. getClass 与getSimpleName

    //首先定义一个借口 package com.test; public interface Fruit { } //定义一个实现类 package com.test; public class App ...

  10. 服务 远程服务 AIDL 进程间通讯 IPC

    Activity aidl接口文件 package com.bqt.aidlservice;  interface IBinderInterface {     /* 更改文件后缀为[.aidl]去掉 ...