gpt4 book ai didi

linux - 硬件定时器中断在哪里?

转载 作者:IT王子 更新时间:2023-10-29 00:27:34 28 4
gpt4 key购买 nike

这是异常和中断表(我理解为 IDT)摘自《英特尔架构软件开发人员手册》

Exceptions and Interrupts

使上下文切换成为可能的定时器中断在哪里?(用于多任务处理)

如果这是一个愚蠢的问题,请修正我的理解。提前谢谢你

最佳答案

嗯,是的,如果我们谈论的是传统的 8254 PIT 定时器,它位于 IRQ0,即向量 32。但在现代机器上的 Linux 操作系统中,它通常不用作定时器。 [请注意,32 的向量分配确实非常随意。它是在对 8259 (PIC) 或 APIC 进行编程时设置的——但这不是一个糟糕的选择,因为 32 是保留向量之后的第一个向量。它肯定比混合硬件中断和异常向量要好,就像 DOS 那样——所以没有办法从 INTR 5(也是向量 13,因为 INT0 被映射)中分辨出一般保护错误(上表中的向量 13)向量 8,和 5 + 8 = 13)。从内存中看,INTR5 并没有被特别好地使用——比如 LPT2:(第二个并行端口)。但是不要将它们重叠仍然是一个好主意......因此,向量 20 到 31 的“保留”。

实际控制系统时序的 IRQ 很可能是本地 APIC 定时器,它的向量并不像原始 PC 那样固定在硬件中。

此外,随着“消息信号中断”的出现,完全有可能拥有(很多)超过 256 个中断向量。

我不同意“vector 0-19 are non-maskable interrupts”的说法。除了 NMI(向量 2)之外,它们都是异常(又名陷阱或故障)——也就是说,由系统中的某些错误条件驱动的事件——向量零是整数除以零的结果,向量 1 是一个“单步”指令中断[和其他一些“调试”陷阱,例如“写入与启用的调试寄存器匹配的任何地址”],向量 3 是“int3”指令(操作码 0xcc)的结果,向量 4 是执行“INTO”的结果(在溢出中是“o”,而不是在零中的 0)。当访问未标记为存在于页表中的一 block 内存时,使用向量 14。它们确实是“不可屏蔽的”,但除了少数异常(exception),它们是当时执行的指令的直接结果 - 因此它们与程序本身同步。

异常是“双重故障”异常和“机器检查故障”。

双重故障是处理器在处理另一个异常期间检测到故障 - 通常是因为操作系统做了一些愚蠢的事情,比如将堆栈设置为无效的地方,从而出现页面错误,尝试使用堆栈存储页面错误返回地址,但由于堆栈不可访问而失败。因此,双重故障处理程序往往被设置为“任务切换中断”,并加载一个新堆栈以确保双重故障可以继续。如果双重故障处理程序无法正常运行,处理器将出现“三次故障”。这通常意味着在 PC 平台上“重新启动”。双重故障通常是不可恢复的——处理程序将(尝试)提供一些关于发生了什么的信息,以及它是如何进入这种状态的,但是一旦完成,系统要么重新启动,要么等待有人来按下重置按钮。

机器检查故障是处理器检测到不可恢复的错误——例如不可恢复的内存错误或缓存奇偶校验错误等。这些通常也是不可恢复的,但不直接与正在执行的指令耦合,但更多的是不同事件的组合(内存内容变坏的地址的内存读取,或类似的)。

关于linux - 硬件定时器中断在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14481032/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com