linux中断核心机制,操作系统中断机制

什么是中断

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

轮询(polling) 让内核定期对设备的状态进行查询,然后做出相应的处理;

中断(interrupt) 让硬件在需要的时候向内核发出信号(变内核主动为硬件主动)。

第一种方案会让内核做不少的无用功,因为轮询总会周期性的重复执行,大量地耗用 CPU 时间,因此效率及其低下,所以一般都是采用第二种方案 。

从物理学的角度看,中断是一种电信号,由硬件设备产生,并直接送入中断控制器(如 8259A)的输入引脚上,然后再由中断控制器向处理器发送相应的信号。处理器一经检测到该信号,便中断自己当前正在处理的工作,转而去处理中断。此后,处理器会通知 OS 已经产生中断。这样,OS 就可以对这个中断进行适当的处理,不同的设备对应的中断不同。【引自Linux 内核中断内幕】。

中断分类

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

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

异步中断是指由其他硬件设备依照 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 内核中断内幕】

什么条件下回触发中断

1.如上所述,由外部设备控制器主动发起的中断信号,用于向操作系统通知某个事件发生。

2.进程同步使用硬件资源时(如声卡、网卡、键盘、磁盘等),由于阻塞或响应耗时,为了CPU更高效的被使用也会触发中断机制,切换当前执行的进程。

3.操作系统在做进程调度时,进程要按优先级轮流使用CPU时间片,切换进程时会触发软中断机制。

中断的流程

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值