• Linux实现中断处理

内核是怎么知道应用程序要调用系统调用的呢?或者说应用程序怎么通知系统内核自己需要执行一个系统调用,这是通过软中断实现的,通过引发一个异常来促使系统切换到内核态去执行异常处理程序

PS:什么时候会从用户态切换到内核态呢?1.中断;2.陷阱;3.系统调用

中断分为两种,硬中断和软中断;

在许多处理器体系结构处理异常和处理中断的方式类似,为了助于理解,可以把异常想象成软中断,我们通常说的中断是硬中断,硬中断是由硬件引起而不是软件引起的

每一种中断都有一个对应的中断处理程序,如果一种中断设备可以产生多种中断,那这个中断设备就有多个中断处理程序对应,而一个中断处理程序就是该设备对应的设备驱动程序中的一部分

我们想让中断处理程序运行的快,还想让中断处理程序多干活,显然是有冲突的,所以我们把中断程序分为两个部分,中断处理程序是上半部分,能够被允许稍后完成的工作会推迟到下半部去(注意!在执行中断上半部分的时候,是不允许产生其他中断的,所以设置标志位IRQF_DISABLED

举个栗子:拿我们可爱的网卡来说事情吧,例如网卡从网上收集了很多数据包,于是我们的朋友网卡君就通知内核,嘿,我这来了一批新货,要看看么,于是内核屁颠屁颠的去处理了(调用中断处理程序)中断开始执行,通知硬件开始拷贝数据(从网卡到内存),这件事是很紧迫的,因为网卡有一定的缓存,超过缓存这家伙就不干活了(丢弃数据包),为了压榨网卡(让他好好干活),内核必须尽快处理这件事情,而且这件事情是硬件相关的(就是和网卡脱不了干系),没了网卡干不了,不能延后,拷贝完这些数据包之后的事情就可以放到下部分了,于是内核忙完了,又去处理刚才被中断的进程了

  • 中断处理程序标志

IRQF_DISABLED——在执行当前中断处理程序的时候,禁止所有其他的中断(野蛮!!尽量给想要尽快运行的轻量级中断使用)

IRQF_SAMPLE_RANDOM——表明这个设备的中断对内核熵池有贡献

  PS:内核熵池负责提供从各种随机事件导出真正的随机数,就是说中断啥时候来(随机的),有个中断产生速率(自然也随机了),就拿去扔池      子里产生随机数用了。。。和中断关系似乎不是很大

IRQF_TIMER——专门为系统定时器的中断处理而准备的

IRQF_SHARED——共享中断线,中断线可以理解为中断单独对着的一个号,同时一个号可以对应多个终端

  • 中断和锁之间不得不说的那些事儿

这里简单的把锁分为两类,自旋锁和睡眠锁(当然对应着很多具体的锁),分为两类是因为,自旋锁是可以用于中断(争用该锁会导致忙循环)的,但是拥有睡眠性质的锁是不能用于中断(争用该锁会导致睡眠),只能用于进程。我们之前说了,中断处理程序的上半部分是很紧迫的,这么紧迫的事情你怎么可以去睡眠偷懒呢?!哪怕现在轮不到你,你也得给我等着!

为什么不能让中断睡眠?因为睡眠是为了进程调度存在的,但是中断处理程序一旦睡眠不仅没有时间可以唤醒中断处理程序,而且无法调度,因为进程有个进程号,但是中断没有,一旦当前的中断处理睡眠了,没有其他的东西会获得处理器,而且中断处理永远不会被唤醒,那么系统就会瘫痪

一定要在获取锁之前,禁止本地中断!!!为啥呢?见下图

欲知下半部分如何,且听下回分解

Linux内核实现中断和中断处理(一)的更多相关文章

  1. Linux内核实现中断和中断处理(二)

    第一部分移步传送门召唤!!:http://www.cnblogs.com/lenomirei/p/5562086.html 上回说了Linux内核实现中断会把中断分为两部分进行处理,上回讲了上部分,这 ...

  2. 再思linux内核在中断路径内不能睡眠/调度的原因(2010)【转】

    转自:http://blog.csdn.net/maray/article/details/5770889 Linux内核中断路径中不能睡眠,为什么? 这里就行了很深入的讨论,值得一看:http:// ...

  3. 深入理解Linux内核-中断和异常

    Linux内核代码查看 http://androidxref.com/ 中断:被定义位一个事件,它能改变处理器执行指令的顺序.它对应硬件(CPU.其他硬件设备)电路产生的电信号. 同步中断:指令执行时 ...

  4. Linux内核分析-分析system_call中断处理过程

    姓名:江军 ID:fuchen1994 分析system_call中断处理过程 使用gdb跟踪分析一个系统调用内核函数(您上周选择那一个系统调用),系统调用列表参见http://codelab.shi ...

  5. 理解Linux内核之中断控制

    乍一看下边的Linux内核代码,貌似L3389有bug,于是我就绕有兴趣地阅读了一下local_irq_save/local_irq_restore的源代码. /* linux-4.14.12/mm/ ...

  6. Linux 内核PCI 中断

    对于中断, PCI 是容易处理的. 在 Linux 启动时, 计算机的固件已经分配一个唯一的中 断号给设备, 并且驱动只需要使用它. 中断号被存储于配置寄存器 60 (PCI_INTERRUPT_LI ...

  7. Linux内核分析——分析system_call中断处理过程

    万子惠 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 我选择的是get ...

  8. linux内核对中断的处理方式

    中断取代了轮询的通知方式,DMA取代了轮询的读写数据方式. 分类软件指令造成的中断(又叫异常,同步中断).    svc, und, abt硬件通过中断请求信号造成的中断(异步中断).  irq,fi ...

  9. Linux 内核中断内幕

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

随机推荐

  1. ImageLoader介绍2

    Universal Image Loader 是一个开源的UI组件程序,该项目的目的是提供一个可重复使用的仪器为异步图像加载,缓存和显示.所以,如果你的程序里需要这个功能的话,那么不妨试试它.他本来是 ...

  2. Flex中设置Camera的视频清晰质量的最佳配合

    今天需要设置Flex中的Camera组件的一些属性,后来发现清晰度不是很高,于是捣鼓了上午半天,设置了很多的参数,竟然发现手册上就是有现成的一些设置方法,郁闷!不过我还是专门设置了几个有用和必要的属性 ...

  3. AS3下如何来判断XML属性的是否存在

    在as3中判断xml节点是否存在可用XMLList中的方法:hasOwnProperty(p:String):Boolean. 但是判断xml节点是否存在某一属性,对象中好像没有该方法,只能用unde ...

  4. rpm包形式安装MySQL

    1.下载Mysql安装所需的rpm包 http://cdn.mysql.com/Downloads/MySQL-5.6/MySQL-server-5.6.21-1.linux_glibc2.5.x86 ...

  5. Sublime Text对Python代码加注释的快捷键

    一直在Coursera上补基础课,发现很多课程都用Python作为教学语言,学了一下感觉果然好,简直是用英语在写代码.(我建Python目录的时候发现去年学过一点点Python,居然一点都不记得了= ...

  6. 对SSH三大框架的理解

    SSH框架一般指的是Struts.Spring.Hibernate,后来Struts2代替了Struts.最近5年,Struts2已经被Spring MVC代替,而Hibernate基本也被iBati ...

  7. Android Studio JNI/NDK 编程(二) Windows 下环境搭建 demo 开发

    环境 windows 8  (注:其实 Linux 开发可能更方便) Android Studio 2.1; 一 . 下载 安装android-ndk开发包 地址:链接:http://pan.baid ...

  8. 2016-08-15: C++ traits

    #include <stdio.h> template <typename T> struct TraitsHelper { static const bool isPoint ...

  9. js分辨浏览器类别和版本

    function BrowserInfo() { var ua = navigator.userAgent.toLowerCase(); var Sys = {}; var s; (s = ua.ma ...

  10. pgadmin中的备份功能消失的原因和找回方法

    pgadmin在正常情况下,在左侧的[对象浏览器]中选中数据库.模式或者表时,右键会出现[备份]和[恢复]的选项(除早期不支持该功能的版本外). 如: 当然,有时候有人会发现,当你想要用这些备份还原功 ...