Interrupt in Linux(硬件篇)—— 硬件知识1

本文介绍了在APIC和PIC共存的系统中,操作系统如何管理不同中断模式。详细解析了三种模式:PIC模式、虚拟导线模式及对称I/O模式,并探讨了各自的特点及转换方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第三章 你应该知道的硬件知识

3.1 APICPIC共存下的系统

PIC彻底走进历史的日子已经不远,Windows已经开始叫嚣要放弃对PIC系统的支持,新的架构也彻底和PICbyebye(例如我们伟大的IA64^_^)。当然,PIC还会继续在单片机、嵌入式领域发挥余热,这就不是我们所能理会的了。但目前PICAPIC共存的情况还普遍存在,MP specPICAPIC共存的平台规定了三种模式:PIC modeVirtual Wire ModeSymmetric I/O Mode

笔者:Symmetric这个单词打着甚为麻烦,下文把Symmetric I/O Mode称为APIC mode

三种模式中,PIC modeVirtual Wire Mode互斥存在,所谓有你没它。APIC mode是所有MP平台最终进入的模式。Spec规定,为了PC/AT compatibility,系统在RESET后首先进入PIC mode或者Virtual Wire mode,操作系统(或BIOS)在适当时候切换入APIC mode

3.1.1 PIC mode

IMCRInterrupt Mode Configuration Register,中断模式配置寄存器,控制当前系统的中断模式——PIC?还是APIC?当系统RESET后,该寄存器清0,系统默认进入PIC模式。此时BSPBoot Startup Processor,多处理器系统中第一个启动的CPU)的NMIINTR脚为硬连线,直接从外部接入,不经过APIC。下图显示了这个结构:

3-1 PIC模式中断连接图

注意图中的虚线,PIC模式下,外部中断通过PIC直接到达BSPINTR脚,而NMI直接连接BSPNMI脚。

IMCR1,可将系统切换至APIC模式。此时外部中断直接通过APIC到达CPUNMI则连接LAPICLINT1脚。

题外话 —— IMCR的访问

MP spec规定,I/O端口22h23h用于支持IMCR寄存器。对22h端口写70h可选中IMCR,此时对23h端口读/写即可。此外,如果PIC mode没有实现,IMCR则可能没有实现。MP tableMP feature information字节的IMCRP bit报告平台是否有ICMR

笔者:IMCRPIC mode可能已被埋入了历史的黄土。笔者查阅了ICH9ICH即南桥)的spec,没有找到该寄存器的描述。Google了一下,除了mp spec其它地方都没提到它。窃以为,此物已死。

3.1.2 Virtual Wire Mode

顾名思义,该模式有一条虚导线。这条虚导线就是APIC——LAPICIOAPIC。除此之外,该模式和PIC模式没有大的区别。

IOAPIC用作虚导线情况如下:

3-2 Virtual Wire Mode —— IOAPIC

如图虚线,外部中断通过PIC连接的IOAPIC管脚,最终到达BSP。当然,连接PIC的这个管脚需要被配置成ExtINT模式。

笔者:specIOAPIC用作Virtual Wire的描述只有寥寥数语。根据前面介绍IOAPIC的内容,我们来猜测一下IOAPIC是什么样的。首先,IOAPICPRT表已经配置好了,不然无法向LAPIC发中断消息。其次由于外部中断即连接PIC又连接IOAPIC,为了避免出现中断复接的情况,IOAPIC中除了连接PIC的管脚,其它的都应该被mask。连接PIC的管脚delivery mode配置成ExtINT。再来猜猜PIC是什么样的。图中没有话出,但PICINTA脚肯定是连到了BSP的,因为对于配置成ExtINT的中断消息,CPU要通过INTA脚应答PIC,并接收中断的vector …… 以上纯属个人猜测

LAPIC用作Virtual Wire的情况:

3-3 Virtual Wire Mode —— LAPIC

还是看图中虚线,这次PIC接的是BSPLINT0脚,当然,该管脚也要配置成ExtINT模式。

笔者:MP spec没说如何从Virtual Wire Mode切换到APIC模式。我们再猜测一下,重新配置模式为ExtINTLAPICIOAPIC)的管脚,将PIC的所有管脚mask掉?

3.1.3 APIC mode

没什么好说的,直接看图:

3-4 APIC mode

一个要求,进入APIC模式后要将PIC的所有管脚mask掉。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值