谁初始化IDT,内核或处理器?

时间:2011-02-26 17:47:13

标签: x86 interrupt interrupt-handling

这是来自维基百科...

  

中断描述符表(IDT)   是x86使用的数据结构   实现中断的体系结构   矢量表。 IDT用于   处理器确定正确   响应中断和   例外...在8086处理器中,IDT驻留在内存中从地址0x0000到0x03ff的固定位置...

这是http://www.linuxjournal.com/article/4048?page=0,1

  

当start_kernel(找到   /usr/src/linux/init/main.c)被调用,   它调用trap_init(在   /usr/src/linux/kernel/traps.c)。   trap_init通过设置IDT   宏set_trap_gate(找到   /usr/include/asm/system.h)和   初始化中断描述符   表格如“偏移量”中所示   Descriptionis“table。

我很困惑,因为这两个描述看起来形成对比......第一个说IDT与处理器有关并且独立于内核(事实上它甚至不在内核中)。第二个说Linux内核初始化IDT并实现ISR的代码,ISR的所有代码都在内核中。

此外,当设备向CPU产生中断时,无论是内核还是负责执行中断例程的处理器? 请向我解释一下......提前谢谢你

3 个答案:

答案 0 :(得分:2)

我猜它的内核是谁加载&初始化IDT。[Source]

请记住,在内核启用中断之前,它必须将IDT表的初始地址加载到idtr寄存器中并初始化该表的所有条目。在初始化系统时完成此活动。

  

IDT初始化并由   计算机仍在BIOS程序   以实模式运行。一旦Linux   然而,接管了IDT   到RAM的另一个区域并初始化   第二次,因为Linux没有   使用任何BIOS例程。

查看以下链接:

答案 1 :(得分:2)

BIOS设置初始IDT,由BIOS和引导加载程序使用。它也可以被16位操作系统使用,因为它标准化了硬件接口,例如处理某些视频输出的INT 10h指令。当32或64位内核启动时,它必须指定自己的IDT才能切换到保护模式。

答案 2 :(得分:0)

IDT包含许多内存位置的中断函数地址。

系统启动时,BIOS会设置默认IDT。

当内核启动时,它通常会设置自己的内核。