这是来自维基百科...
中断描述符表(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产生中断时,无论是内核还是负责执行中断例程的处理器? 请向我解释一下......提前谢谢你
答案 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。
当内核启动时,它通常会设置自己的内核。