【问题标题】:Custom Interrupt Descriptor Table Confusion自定义中断描述符表混淆
【发布时间】:2011-10-12 23:54:42
【问题描述】:

我正在编写一个在保护模式下运行的小型操作系统。我到了要加载自定义中断描述符表的地步,但我不知道从哪里开始。我在the OS Dev wiki 上阅读了一些资料,但有几个问题需要回答。

在 OS Dev wiki 上,它说 the first 32 (0-31) interrupts are reserved and used by the CPU, as exceptions, so don't use those for APIs or IRQs. 问题是,如果我正在加载我的自定义中断表,我不需要为所有这些中断提供条目吗?

此外,wiki 声明 BIOS 将 IRQ0-7 映射到中断 8-15。如果是这样的话,IRQ中断不会和保留中断冲突吗?

有什么我没有得到的吗?中断 0-31 是在单独的表中还是什么?有人请指点我正确的方向并把事情弄清楚。

【问题讨论】:

    标签: assembly linux-kernel osdev interrupt-handling


    【解决方案1】:

    当它说don't use those [interrupts 0-31] for APIs or IRQs 时,这意味着您不应该将它们用于除了它们保留的异常之外的功能。您确实需要为这些中断定义处理程序,以便在发生异常时处理它们。请参阅OSDev's exception page 获取异常列表及其中断号和描述。

    当处理器启动时,它处于实模式。在这种模式下,异常较少,因此保留较少的中断来处理它们。只要处理器处于实模式,就可以安全地将中断 8-15 用于 IRQ。在保护模式下启用中断之前,您需要将 IRQ 重新映射到不同的中断。有关如何执行此操作的信息,请参阅OSDev's PIC(可编程中断控制器)页面的Initialization section

    【讨论】:

      【解决方案2】:

      前 32 个 (0-31) 中断被 CPU 保留并用作异常,因此不要将它们用于 API 或 IRQ。

      这是关于谁可以发出中断。 0-31 用于 CPU 本身的事件(内部,例如页面错误,除以零......),其他用于外部事件(硬件启动,例如键盘按下,pci 中断等)。 这与 IDT 无关。您应该在表格中提供所有中断。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-08-05
        • 1970-01-01
        • 2013-04-03
        • 2015-04-07
        • 2018-01-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多