这是从“英特尔架构软件开发人员手册”异常和中断表(我理解为IDT)
其中是定时器中断,这使得历境切换可能吗? (多任务)
如果这是一个愚蠢的问题,请修复我的理解。 先感谢您
这是从“英特尔架构软件开发人员手册”异常和中断表(我理解为IDT)
其中是定时器中断,这使得历境切换可能吗? (多任务)
如果这是一个愚蠢的问题,请修复我的理解。 先感谢您
嗯,是的,如果我们谈论的是传统的8254 PIT定时器,它在IRQ0,这是矢量32但这并不是通常用作现代计算机上的Linux操作系统的定时器。 [注意32的矢量分配确实是很随意的。 编程8259(PIC)或APIC当设置 - 但它不是一个坏的选择,因为32是保留那些后的第一载体。 这肯定比混合硬件更好地与异常向量中断,因为DOS会做 - 那么,有没有办法从INTR 5(也向量13,作为INT0被映射告诉一般性保护错误(向量13上表)转矢量8,和5 + 8 = 13)。 从存储器,INTR5没有特别好使用 - 像LPT2:(第二并行端口)。 但它仍然是一个好主意,不重叠,他们... HENC的“保留”为载体20至31。
实际控制该系统的定时的IRQ是最有可能是本地APIC计时器,它的载体是不以同样的方式与原PC硬件决定。
另外,与“消息信号中断”的出现,这是完全可能具有(多)超过256中断向量。
我不措辞“载体0-19是不可屏蔽中断”同意。 除了NMI(向量2),它们是所有异常(又名TRAPS或故障) - 即,通过一些错误条件在系统驱动的事件 - 矢量零是零的整数除法的结果,向量1是“单步”指令中断[和其他一些‘调试’陷阱,如‘写入到匹配使能调试寄存器中的任何地址’],矢量3是的结果‘INT3’指令(操作码的0xCC),矢量4是执行“变成”的结果(这是“O”,如溢出,而不是0
作为零)。 当访问一个片的未标记为存在于所述页表存储器,矢量14被使用。 他们确实是“非屏蔽”,但他们是,除少数例外,当时执行指令寻址的直接后果 - 使两者同步程序本身。
唯一的例外是“双误”异常和“机器检查故障”。
双故障是当处理器另一个异常的处理过程中检测到故障 - 通常是因为操作系统已经做了一些愚蠢的,像设置堆栈到某处无效的,从而得到一个页面出错,尝试使用堆栈来存储页面出错返回地址和失败,因为堆栈是不可访问。 双故障处理程序,因此,往往被设置为“任务切换中断”,并加载一个新的堆栈,以确保双发失误可以继续。 如果双故障处理程序不能正常运行,处理器将“三错”。 这通常意味着PC平台上的“重启”。 双重故障通常不recoveriable - 该处理程序将(尝试)提供关于它的一些信息,以及它如何进入这种状态,但一旦这样做了,系统或者重新启动或等待有人来推复位按钮。
机器检查故障是其中处理器检测到一个不可恢复的错误 - 诸如不可恢复的错误的存储器或高速缓存奇偶校验错误等,这些通常也不可恢复,但不直接与正在执行的指令,但更多的不同的组合事件(存储器读取其中存储内容已经坏了,或者类似的地址)。
对于硬件计时器interupt中断向量是IRQ 0 = INT 32,因为它是一个外部中断。
0-19是不可屏蔽中断,20-31应该由英特尔保留,32到127是外部中断(IRQ)。 硬件时间需要被连接为IRQ 0,所以向量数目应为32这里。
Bit Disable IRQ Function
7 IRQ7 Parallel Port
6 IRQ6 Floppy Disk Controller
5 IRQ5 Reserved/Sound Card
4 IRQ4 Serial Port
3 IRQ3 Serial Port
2 IRQ2 PIC2
1 IRQ1 Keyboard
0 IRQ0 System Timer
阅读硬件中断阅读更多关于这一点。