中断的相关知识

中断的人类定义

第一个概念是把同步和异步中断分别称为异常(exception)和中断(interrupt);
第二个概念是进一步的,对于中断和异常,Intel又再细分了很多类,将中断分为可屏蔽中断和不可屏蔽中断;将异常分为故障、陷阱、异常中止和编程异常。

中断:又称为异步中断,是其他硬件依照CPU时钟信号随机产生的。中断又被分为可屏蔽硬件中断和不可屏蔽中断。在微机原理课程中,处理器中有两个引脚NMI和INTR负责接受中断信号,还有高级可编程中断控制器(APIC),如8259A管理中断信号。则可屏蔽硬件中断:任何通过INTR或着局部APIC传递到处理器的中断信号都被称为可屏蔽硬件中断,由IO设备产生的IRQ(Interrupt ReQuest)也是可屏蔽硬件中断。但是通过INTR引脚传递的可屏蔽硬件中断可使用Intel架构定义的中断向量(0-255),而局部的APIC传递的部分只能使用16-255号向量。若中断信号从NMI引脚传递过来,则发生的是一个不可屏蔽中断。

异常:又称为同步中断,是当指令执行时CPU控制单元产生的,之所以称为同步,是因为只有在一条指令终止执行后CPU才会发出中断。在不失进程执行连续性的同时,按引起的异常的指令是否能重新执行,且依据它们被报告的方式,异常分为错误,陷阱,和终止三种情况。

错误:错误是一种通常可以能够被修正的异常,一旦修正,程序能够不失去连续性地接着执行。当报告错误发生时,处理器将机器状态恢复到执行错误之前的状态。错误处理例程的返回地址指向产生错误的指令,而不是错误指令之后的的那条指令。如页错误。

陷阱:当引起陷阱的指令发生时,马上产生该异常。陷阱允许程序不失去连续性的继续执行。陷阱处理例程的返回地址指向引起陷阱的指令的下一条指令(与错误本质上的区别)。如溢出。

终止:它并不总是报告产生异常的指令的确定位置,也不允许引起终止的进程或任务重新执行。如总线错误导致异常终止。

中断的类型

从不同的角度来说,中断可以有三种分类方法。
中断可以分为同步中断(synchronous)和异步中断(asynchronous)。
中断可分为硬中断和软中断。
中断可分为可屏蔽中断(Maskable interrupt)和非屏蔽中断(Nomaskable interrupt)。

• 硬中断
○ 硬中断由硬件产生。每个设备或者设备集都有自己的IRQ(中断请求)。

  • 硬件中断又可以分为内中断和外中断。
    ○ 处理中断的驱动是需要运行在CPU上的。在多核处理机上,一个中断只能中断一颗CPU。
    ○ 硬中断可以直接中断CPU。硬中断可以中断软中断。
    ○ 对于时钟中断,内核调度代码会将当前正在运行的进程挂起,从而让其他的进程运行。他的存在是为了让调度器可以调度多任务。
    • 软中断
    ○ 软中断是当前进程产生的。
    ○ 通常,软中断是一些对IO的请求。
    ○ 软中断仅与内核联系。
    软中断不会直接中断CPU。

中断类别及其行为

类别 原因 异步/同步 返回行为

中断 来自I/O设备的信号 异步 总是返回到下一条指令
陷阱 有意的异常 同步 总是返回到下一条指令
故障 潜在可恢复的错误 同步 返回到当前指令
终止 不可恢复的错误 同步 不会返回

中断向量

一个无符号整数

往往中断向量都只是一个存储单元,不足以放用户自己的响应程序段(与中断向量表进行链接),因此这个向量(地址)中往往放的只是一个跳转指令,以指引程序跳转到我的响应程序那里去执行。

Intel x86共支持256中向量中断,Intel给每种中断源编号,从0-255,并把这个无符号整数叫做一个中断向量。不可屏蔽中断的向量和异常的向量是固定的,而可屏蔽的硬件中断可以通过对中断控制器编程来改变。
Linux中的中断向量:
0-19的中断向量对应于异常和非屏蔽中断。
20-31Intel保留
32-127可屏蔽硬件中断
128用于系统调用的可编程异常
129-238可屏蔽硬件中断
239本地APIC时钟中断
240本地APIC高温中断
241-250由Linux留作将来使用
251-253处理器间中断
254本地APIC错误中断
255本地APIC伪中断(CPU屏蔽某个中断时产生的)

中断向量表

中断向量表即中断描述符表(叫法不同):中断描述符表(Interrupt Descriptor Table,IDT)是一个系统表,它与每一个中断或异常向量相关,每一个向量在表中有相应的中断或异常处理程序的入口地址。内核在允许中断发生前,必须适当地初始化IDT,用lidt汇编指令初始化idtr。

当系统发生中断时,芯片的程序会自动跳转到一个特定的位置,一般是程序开始处,去执行那里的代码。不同的中断,芯片会自动计算在中断向量表中的偏移量。而那里的代码其实是一个跳转地址,会跳转到中断处理函数的位置进行中断处理。中断向量表,其实是一连串的跳转地址。向量也有指引跳转的意思。

中断的优点与缺点

中断与计算机病毒 计算机操作系统是开放的,用户可以修改扩充操作系统,在计算机上实现新的功能。
修改操作系统的主要方式之一是扩充中断功能。计算机提供很多中断,合理合法地修改中断会给计算机增加非常有用的新功能。如 INT 10H是屏幕显示中断,原只能显示西文,而在各种汉字系统中都可以通过修改INT 10H使计算机能够显示中文。另一方面,计算机病毒则篡改中断为其达到传染、激发等目 的服务,与病毒有关的重要中断有: INT 08H和INT 1CH定时中断,每秒调用18.2次,有些病毒利用它们的记时判断 激发条件。 INT 09H键盘输入中断,病毒用于监视用户击键情况。 INT 10H屏幕输入输出中断,一些病毒用于在屏幕上显示字符图形表现自己。 INT 13H磁盘输入输出中断,引导型病毒用于传染病毒和格式化磁盘。 INT 21H DOS功能调用,包含了DOS的大部分功能,已发现的绝大多数文件型病毒 修改INT 21H中断,因此也成为防病毒的重点监视部位。 INT 24H DOS的严重错误处理中断,文件型病毒常进行修改,以防止传染写保护磁 盘时被发现。
中断子程序的入口地址存放在计算机内存的最低端,病毒窃取和修改中断的人口地 址获得中断的控制权,在中断服务过程中插入病毒的“私货”。

总之,中断可以被用户程序所修改,从而使得中断服务程序被用户指定的程序所替代。这样虽然大大地方便了用户,但也给计算机病毒制造者以可乘之机。病毒正是通过修 改中断以使该中断指向病毒自身来进行发作和传染的。

中断处理

中断处理一般分为两个部分,中断处理程序是上半部:接收到一个中断就立即执行,但只做有严格时限的工作,这些工作都是在所有中断被禁止的情况下完成的。能够被允许稍后完成的工作被推迟到下半部去。通常情况下,下半部会在中断处理程序返回时立即执行。

更深层次的中断处理过程就要深入至驱动,硬件电路了。由于驱动涉及的利益,旁人是看不到代码与设计架构的,只能分析,因此就不做讨论

中断一直重新触发怎么办?

内核不会立即处理重新触发的软中断,当大量软中断出现的时候,内核会唤醒一组内核线程来处理。

这些线程的优先级最低(nice值为19),这能避免它们跟其它重要的任务抢夺资源。

但它们最终肯定会被执行,所以这个折中的方案能够保证在软中断很多时用户程序不会因为得不到处理时间而处于饥饿状态,同时也保证过量的软中断最终会得到处理。

每个处理器都有一个这样的线程,名字为ksoftirqd/n,n为处理器的编号。

posted @ 2020-03-22 19:21  AmosAlbert  阅读(155)  评论(0编辑  收藏  举报