中断 异常

在这里插入图片描述

分类1

中断通常分为同步中断和异步中断:

同步中断是当指令执行时由CPU控制单元产生的,之所以称为同步,是因为只有在一条指令终止执行后CPU才会发出中断。
◎ 把同步中断称为异常(exception)

异步中断是由其他硬件设备依照CPU时钟信号随机产生的。
◎ 把异步中断称为中断(interrupt)

分类2

(1) 硬中断

由与系统相连的外设(比如网卡、硬盘)自动产生的。主要是用来通知操作系统系统外设状态的变化。比如当网卡收到数据包的时候,就会发出一个中断。我们通常所说的中断指的是硬中断(hardirq)。

(2) 软中断

为了满足实时系统的要求,中断处理应该是越快越好。linux为了实现这个特点,当中断发生的时候,硬中断处理那些短时间就可以完成的工作,而将那些处理事件比较长的工作,放到中断之后来完成,也就是软中断(softirq)来完成。

(注:也就是bottom-half)

硬中断和软中断的区别

  • 软中断是执行中断指令产生的,而硬中断是由外设引发的。

  • 硬中断的中断号是由中断控制器提供的,软中断的中断号由指令直接指出,无需使用中断控制器。

  • 硬中断是可屏蔽的,软中断不可屏蔽。

  • 硬中断处理程序要确保它能快速地完成任务,这样程序执行时才不会等待较长时间,称为上半部。

  • 软中断处理硬中断未完成的工作,是一种推后执行的机制,属于下半部。

  • Linux下硬中断是可以嵌套的,但是没有优先级的概念,也就是说任何一个新的中断都可以打断正在执行的中断,但同种中断除外。软中断不能嵌套,但相同类型的软中断可以在不同CPU上并行执行。

中断控制器运作

每个能够发出中断请求的硬件设备控制器都有这么一条名为IRQ的输出线。所有现有的IRQ线都会与这个中断控制器(PIC)的硬件电路的输入引脚相连。下面来看看这种中断控制器执行下列动作:

    1)    监视IRQ线,检查产生的信号 。如果有一条或两条以上的IRQ线上产生信号,就选择引脚编号较小的IRQ线。

    2)    如果一个引发信号出现在IRQ线上:

            a)    把接收到的引发信号转换成对应的向量(索引)。

            b)    把这个向量存放在中断控器的一个I/O端口,从而允许CPU通过数据总线读取此向量。

            c)    把引发信号发送到处理器的INTR引脚,即产生一个中断。

            d)    等待,直到CPU通过把这个中断信号写进可编程中断控制器的一个I/O端口来确认它;当这种情况发生时,清INTR线。

    3)    返回到第一步。

中断技术上的实现有两方面:

    1)    汇编语言代码:与处理器高度相关,用于处理特定平台上相关的底层细节;

    2)    抽象接口:是设备驱动程序及其他内核代码安装和管理IRQ处理程序所需的。
发布了452 篇原创文章 · 获赞 271 · 访问量 73万+

猜你喜欢

转载自blog.csdn.net/qq_35608277/article/details/105081596