自定义中断描述符表混淆

时间:2011-07-25 22:55:06

标签: assembly linux-kernel osdev interrupt-handling

我正在编写一个在保护模式下运行的小型操作系统。我想要加载自定义中断描述符表,我不知道从哪里开始。我在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.问题是,如果我正在加载自定义中断表,那么我是否必须为所有这些中断提供条目?

此外,维基表示BIOS将IRQ0-7映射到中断8-15。如果是这种情况,IRQ中断不会与保留中断发生冲突吗?

我有没有得到的东西?在一个单独的表或其他什么中断0-31?有人请指出我正确的方向,并清理一切。

2 个答案:

答案 0 :(得分:2)

当它显示don't use those [interrupts 0-31] for APIs or IRQs时,表示您不应将它们用于除保留的例外之外的功能。您确实需要为这些中断定义处理程序,以便在发生异常时对其进行处理。有关具有中断号和描述的异常列表,请参阅OSDev's exception page

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

答案 1 :(得分:0)

  

CPU保留并使用前32个(0-31)中断作为例外,因此不要将这些中断用于API或IRQ。

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