操作系统中断机制

2018-10-18  本文已影响0人  明阳似海

什么是中断

操作系统需要对连接到计算机上的所有硬件设备进行管理,要管理这些设备,首先得和它们互相通信才行,一般有两种方案可实现这种功能:

中断分类

中断可分为同步(synchronous)中断和异步(asynchronous)中断:

  1. 同步中断是当指令执行时由 CPU 控制单元产生,之所以称为同步,是因为只有在一条指令执行完毕后 CPU 才会发出中断,而不是发生在代码指令执行期间,比如系统调用。

  2. 异步中断是指由其他硬件设备依照 CPU 时钟信号随机产生,即意味着中断能够在指令之间发生,例如键盘中断。

根据 Intel 官方资料,同步中断称为异常(exception),异步中断被称为中断(interrupt)。

中断可分为可屏蔽中断(Maskable interrupt)和非屏蔽中断(Nomaskable interrupt)。异常可分为故障(fault)、陷阱(trap)、终止(abort)三类。
从广义上讲,中断可分为四类:中断、故障、陷阱、终止。

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

Linux中断处理简介

中断描述符表(Interrupt Descriptor Table,IDT)是一个系统表,它与每一个中断或异常向量相联系,每一个向量在表中存放的是相应的中断或异常处理程序的入口地址。内核在允许中断发生前,也就是在系统初始化时,必须把 IDT 表的初始化地址装载到 idtr 寄存器中,初始化表中的每一项。
当处于实模式下时,IDT 被初始化并由 BIOS 程序所使用。然而,一旦 Linux 开始接管,IDT 就被移到 ARM 的另一个区域,并进行第二次初始化,因为 Linux 不使用任何 BIOS 程序,而使用自己专门的中断服务程序(例程)(interrupt service routine,ISR)。
外设要向Linux内核注册中断处理程序,当中断发生时,通过中断描述符表 IDT 获取中断服务程序入口地址,从而执行中断处理程序。【引自Linux 内核中断内幕

什么条件下回触发中断

中断的流程

中断信号由外部设备发起,准确来说是由外部设备的控制器发起,比如网卡设备,网络数据包到达网卡,网卡控制器就向IO APIC(Advanced Programmable Interrupt Controller)发送中断信号,IO APIC把信号发送给本地APIC,本地APIC把信号传送给CPU,CPU根据当时的情况判断是否要处理这个终端,如果处理,就保存当时的运行上下文,切换到中断上下文中,根据IDT(Interrupt Descriptor Table)查找对应的处理函数进行处理。处理完成后,需要恢复中断之前的状态。【参考详解操作系统中断

上一篇下一篇

猜你喜欢

热点阅读