中断和异常

    处理器的速度和外围硬件设备的速度往往不在一个数量级上, 因此, 如果Linux内核采取让处理器向硬件发出一个请求, 然后专门等待回应, 这种办法显然不好.

    硬件响应慢, 因此内核需要在这段时间内处理其他事务, 等到硬件真正完成了请求的操作之后, 内核再回来对它进行处理. 要实现这种功能, 有两种方法: 轮询和中断.

    轮询(polling)可以让内核定期对设备的状态进行查询, 然后做出相应的处理. 不过这种方法会让内核做很多无用功, 因为轮询总会周期性的重复执行, 而无论 硬件设备的当前是否忙碌. 更好的办法是一种让硬件在需要的时间再向内核发出信号(变内核主动为硬件主动), 这就是中断机制.

1. 中断的概念:

中断本质上是一种特殊的电信号, 由硬件设备生成, 并直接送入中断控制器的输入引脚上, 然后再由中断控制器向处理器发送响应的信号. 处理器接到中断后, 便中断自己当前的工作转而处理中断, 并会马上向操作系统反映此信号的到来, 然后由操作系统负责处理这些新到来的数据. 中断是硬件与处理器通信的手段. 当你敲击键盘的时候, 键盘控制器会发送一个中断, 通知操作系统有键被按下.

中断随时可以产生, 不与处理器的时钟同步.

 

2. 中断请求(IRQ):

不同设备对应的中断不同, 每个中断都有唯一的数字标识. 这使得操作系统能够对中断进行区分, 并知道哪个硬件设备产生了哪个中断.

这些中断值就是中断请求(IRQ)线. 通常IRQ都是一些数值量. 例如, 在PC上, IRQ0是时钟中断, 而IRQ1是键盘中断. 也有的中断号是动态分配的, 比如PCI总线上的设备.

 

3. 中断的分类:

中断有三种机制.

  • 由CPU外部产生, 比如键盘中断, 由键盘控制器产生信号发送给中断控制器, 再由中断控制器通知CPU, CPU通知操作系统进行中断处理. 这种中断是异步的.
  • 由CPU本身在执行的过程中产生. 比如DOS系统调用INT 21H, 这种中断是同步的. 又称为"陷入".
  • 由CPU执行到由于编程失误而导致的错误指令时, 或者在执行期间出现特殊情况, 必须靠内核来处理的时候, 处理器就会产生一个异常. 比如除0, 缺页, new的时候内存不足等. 这种中断是异步的, 又成为"异常".

但是不管是外部中断, 陷入或是异常, CPU的响应过程基本一致. 这就是: 在执行当前指令后, 或是执行指令的过程中, 就根据中断源所提供的"中断向量", 在内存中找到响应服务程序入口并调用服务程序. 因此把它们统称为"中断"

外部中断是服务程序是由软件或硬件设置好的;

"陷入"的向量是在"陷入"指令中发生的(INT N中的N);

各种异常的向量则是由CPU的硬件结构预先规定好的.

 

4. 系统调用:

系统调用由"陷入"方式实现, 即INT N, 因此也按照中断的方式来处理.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值