设为首页 收藏本站
查看: 1168|回复: 0

[经验分享] linux中断

[复制链接]

尚未签到

发表于 2018-5-23 10:06:13 | 显示全部楼层 |阅读模式
  文章主要是本人的认识,介绍也不全面,则重于流程,用词方面也不讲究,很多观点也比较粗糙,有错误的地方,请多多指正。
  文章主要参考《深入分析linux内核源码》关于中断的章节:http://oss.org.cn/kernel-book/
  

  中断是计算机系统的一种机制,主要有两种作用:

  •   实现异步。
  •   紧急处理某一过程。
  

  由于CPU与外设的运行速率相差较大,且CPU资源比较重要,如果采用同步的方式让CPU与外设进行通信,则当外设在工作时,CPU就要等待外设完成工作并返回结果时,CPU才能断续运行,这段时间就会让CPU资源白白浪费。为了能够释放CPU资源,外设与CPU之间就要采用异步的通信方式。CPU可以每隔一段时间去访问设备来检测设备是否已完成工作,但这样的方式也会有一些问题,如CPU响应外设不及时,轮询浪费CPU资源,轮询未得到结果后要再次轮询等。为了更好地利用CPU资源,需要采取一种设备完成工作后能通知CPU,CPU能尽快响应通知的机制。而这种机制就是中断了。
  

  中断可以分为硬中断和软中断。
  硬中断是指由硬件产生的中断,如硬盘数据与准备就绪请求读入内存,或进程时间片用完产生中断等。
  软件中断是指由程序(软件)产生的中断,或是由中断指令产生的中断,如出现除0等。
  

  中断又可以分为可屏蔽中断和不可屏蔽中断,顾名思义,可屏蔽中断是可以被屏蔽,而不可屏蔽中断是不可屏蔽的,如电源掉电。
  

  程序的指令中会设有中断检查点,当执行至中断检查点时,CPU就会去检查是否有中断到来,如果有中断到来,并且程序没有屏蔽此中断或是此中断不可屏蔽时,系统进会进行中断处理。
  

  中断处理过程粗略可分为三个过程:保护现场,执行中断例程,恢复现场
  而更详细的过程则如下
  ----------------------------------
  关中断

  保存断点,保护现场
  判断中断源,转中断服务程序
  开中断
  执行中断处理程序
  关中断
  恢复现场,恢复断点
  开中断
  ----------------------------------
  其中有两个关中断开中断的过程,是因为这两个过程内的操作是不允许被中断的,如果被中断,就有可能导致中断恢复失败。
  

  中断号:0-255(中断和异常)

  中断号上是用来标识不同的中断,不同的中断号对应不同的中断处理程序。那么如何通过中断号去查找中断程序的入口,那就要需要一个表,而这个表计算机组成原理中称之为中断向量,是保存中断服务程序入口的数组。而在linux中,关于这些名称可能会有所不同。linux中把中断号叫做中断向量,把中断服务程序入口地址表称之为中断描述符表(IDT)。下面采用的是linux的叫法。
  在linux系统启动的时候,最初是运行在实模式下,这时系统就会进行第一遍初始化IDT,但IDT中每个中断程序的入口都是一个空的中断程序。而当系统完成启用分页后,就会再一次初始化IDT,此时就会在IDT中填入真正的中断程序入口。IDT中不仅包含了中断程序的入口,而且还包含了一些中断的相关描述,如这个中断是中断门、陷阱门或是系统门。其中 0-19 号和 0x80 号这21个中断号是系统使用的,IDT中这些中断都被系统初始化,而其他的中断号则是另外的初始化,在初始化这些IDT项时,就需要填入中断程序的地址。而这些中断程序的地址,来自于一个中断程序入口的数组。
  

  

  

  

  

  

  

  

  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-480200-1-1.html 上篇帖子: Linux glances基本使用 下篇帖子: linux 上操作mysql
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表