图解中断 | 中断从产生到消失的一生

开发 架构
中断处理,伴随着软硬件的协同,伴随着外设与CPU的传递,伴随着内核栈和用户栈的切换,下面我们就看一下中断短暂而充实的一生。

[[415956]]

本文转载自微信公众号「虚机」,作者cloud3 。转载本文请联系虚机公众号。

中断系统是现代PC的基础架构之一。中断处理在操作系统也具有举足轻重的作用 。

中断处理,伴随着软硬件的协同,伴随着外设与CPU的传递,伴随着内核栈和用户栈的切换,下面我们就看一下中断短暂而充实的一生。

以上是从设备触发到中断处理函数处理完毕的整个流程,为了看到中断处理的全貌,我们隐藏了一些实现细节,具体的细节以后再单独描述。

下面对每个调节进行简单的描述。

从设备到APIC

外部中断的发起者是设备,设备通过电平触发IRQ信号线产生一个中断。

检测到中断信号后,IOAPIC使用写内存的方式把中断信息发送到系统总线上。

LAPIC接收到中断信息后把中断能否发送给CPU处理。

CPU内部

CPU感知到中断线后,从LAPIC上接收中断号。

切换到内核栈。保存当前进程栈,例如在X86上会保存SS, ESP, EFLAGS, CS, EIP以及错误码。

然后通过IDTR寄存器和中断号找到中断服务程序的入口。

中断处理程序

一般把中断处理分为两个半部:中断处理程序是上半部(top half)和下半部(bottom half)。

上半部立会即执行,只做有严格时限的工作,例如对接收的中断进行应答或复位硬件,这些工作都是在所有中断被禁止的情况下完成的。

能够被允许稍后完成的工作会推迟到下半部(bottom half)去做。

从中断处理返回到CPU

恢复之前保存的flag和寄存器状态,恢复之前运行的进程。

再到中断处理程序

运行中断处理程序的下半部,把中断任务执行完成。

 

上面为了看到中断处理的全貌,我们隐藏了一些实现细节,具体的细节后面会在单独描述。

 

责任编辑:武晓燕 来源: 虚机
相关推荐

2020-07-09 17:37:47

Linux网络包中断

2015-04-23 08:51:53

2021-01-11 12:53:28

线程Java管理

2015-08-03 09:33:21

PH程序员一生

2016-08-24 11:13:30

2023-01-10 08:20:55

RocketMQ消息源码

2021-03-09 08:01:27

CPUarm64寄存器

2021-12-08 08:41:31

Linux 中断子系统Linux 系统

2021-12-10 08:45:45

Linux GIC Linux 系统

2018-11-29 09:13:47

CPU中断控制器

2021-11-30 07:02:10

虚拟化Linux 中断

2021-10-11 09:55:58

Facebook业务中断网络安全

2021-12-14 08:51:23

Linux 中断子系统Linux 系统

2009-06-02 23:03:35

2022-08-11 14:19:40

云计算云中断安全

2018-01-18 09:05:05

存储数据包分层

2022-05-24 10:19:15

网络中断网络

2009-04-23 09:07:03

JAVA终端线程

2021-12-11 19:00:54

Java中断机制

2024-05-21 14:10:41

点赞
收藏

51CTO技术栈公众号