diff --git a/KernelStructures/idt.md b/KernelStructures/idt.md index 1f6edf7..f39de0d 100644 --- a/KernelStructures/idt.md +++ b/KernelStructures/idt.md @@ -1,4 +1,4 @@ - 中断描述符表 (IDT) + 中断描述符 (IDT) ================================================================================ 三个常见的中断和异常来源: @@ -13,11 +13,11 @@ * 陷阱 - 在指令导致异常`之后`会被准确地报告。`%rip`保存的指针同样指向故障的指令; * 终止 - 是不明确的异常。 因为它们不能被明确,中止通常不允许程序可靠地再次启动。 -只有当RFLAGS.IF = 1时,`可屏蔽`中断才触发中断处理程序。 除非RFLAGS.IF位清零,否则它们将持续处于等待处理状态。 +只有当RFLAGS.IF = 1时,`可屏蔽`中断触发才中断处理程序。 除非RFLAGS.IF位清零,否则它们将持续处于等待处理状态。 -`不可屏蔽`中断(NMI)不受RFLAGS.IF位的影响。 无论怎样一个NMI的发生都会进一步屏蔽之后的其他NMI,直到执行IRET(中断返回)指令。 +`不可屏蔽`中断(NMI)不受rFLAGS.IF位的影响。 无论怎样一个NMI的发生都会进一步屏蔽之后的其他NMI,直到执行IRET(中断返回)指令。 -具体的异常和中断来源被分配了固定的向量标识号(也称“中断向量”或简称“向量”)。中断处理程序使用中断向量来定位异常或中断,从而分配相应的系统软件服务处理程序。有至多256个特殊的中断向量可用。前32个是保留的,用于预定义的异常和中断条件。请参考[arch/x86/include/asm/traps.h](http://lxr.free-electrons.com/source/arch/x86/include/asm/traps.h#L121)头文件中对他们的定义: +具体的异常和中断来源被分配了固定的向量标识号(也称“中断向量”或简称“向量”)。中断处理程序使用中断向量来定位异常或中断,从而分配相应的系统软件服务处理程序。有至多256个特殊的中断向量可用。前32个是保留的,用于预定义的异常和中断条件。请参考[arch / x86 / include / asm / traps.h](http://lxr.free-electrons.com/source/arch/x86/include/asm/traps.h#L121)头文件中对他们的定义: ``` @@ -55,7 +55,7 @@ enum { * 多数异常错误报告格式; * 页错误格式。 -选择器错误代码的格式如下: +选择子错误代码的格式如下: ``` 31 16 15 3 2 1 0 @@ -69,9 +69,9 @@ enum { 说明如下: * `EXT` - 如果该位设置为1,则异常源在处理器外部。 如果设置为0,则异常源位于处理器的内部; -* `IDT` - 如果该位设置为1,则错误代码选择器索引字段引用位于“中断描述符表”中的门描述符。 如果设置为0,则选择器索引字段引用“全局描述符表”或本地描述符表“LDT”中的描述符,由“TI”位所指示; -* `TI` - 如果该位设置为1,则错误代码选择器索引字段引用“LDT”中的描述符。 如果清除为0,则选择器索引字段引用“GDT”中的描述符; -* `Selector Index` - 选择器索引字段指定索引为“GDT‘,“LDT”或“IDT”,它是由“IDT”和“TI”位指定的。 +* `IDT` - 如果该位设置为1,则错误代码选择子索引字段引用位于“中断描述符表”中的门描述符。 如果设置为0,则选择子索引字段引用“全局描述符表”或本地描述符表“LDT”中的描述符,由“TI”位所指示; +* `TI` - 如果该位设置为1,则错误代码选择子索引字段引用“LDT”中的描述符。 如果清除为0,则选择子索引字段引用“GDT”中的描述符; +* `Selector Index` - 选择子索引字段指定索引为“GDT‘,“LDT”或“IDT”,它是由“IDT”和“TI”位指定的。 页错误代码格式如下: @@ -97,9 +97,9 @@ enum { IDT可以包含三种门描述符中的任何一种: -* `Task Gate(任务门)` - 包含用于异常与或中断处理程序任务的TSS的段选择器; -* `Interrupt Gate(中断门)` - 包含处理器用于将程序从执行转移到中断处理程序的段选择器和偏移量; -* `Trap Gate(陷阱门)` - 包含处理器用于将程序从执行转移到异常处理程序的段选择器和偏移量。 +* `Task Gate(任务门)` - 包含用于异常与或中断处理程序任务的TSS的段选择子; +* `Interrupt Gate(中断门)` - 包含处理器用于将程序从执行转移到中断处理程序的段选择子和偏移量; +* `Trap Gate(陷阱门)` - 包含处理器用于将程序从执行转移到异常处理程序的段选择子和偏移量。 门的一般格式是: @@ -132,14 +132,14 @@ IDT可以包含三种门描述符中的任何一种: 说明如下: -* `Selector` - 目标代码段的段选择器; +* `Selector` - 目标代码段的段选择子; * `Offset` - 处理程序入口点的偏移量; * `DPL` - 描述符权限级别; * `P` - 当前段标志; * `IST` - 中断堆栈表; * `TYPE` - 本地描述符表(LDT)段描述符,任务状态段(TSS)描述符,调用门描述符,中断门描述符,陷阱门描述符或任务门描述符之一。 -`IDT` 描述符在 Linux 内核中由以下结构表示(仅适用于`x86_64`): +`IDT` 描述符在Linux内核中由以下结构表示(仅适用于`x86_64`): ```C struct gate_struct64 { @@ -170,9 +170,9 @@ struct ldttss_desc64 { 任务切换期间的异常(Exceptions During a Task Switch) -------------------------------------------------------------------------------- -任务切换在加载段选择子期间可能会发生异常。页错误也可能会在访问TSS时出现。在这些情况下,由硬件任务切换机制完成从TSS加载新的任务状态,然后触发适当的异常处理机制。 +任务切换在加载段选择子期间可能会发生异常。页错误也可能会在访问TSS时出现。在这些情况下,由硬件任务切换机构完成从TSS加载新的任务状态,然后触发适当的异常处理。 -**在长模式下,由于硬件任务切换机制被禁用,因而在任务切换期间不会发生异常。** +**在长模式下,由于硬件任务切换机构被禁用,因而在任务切换期间不会发生异常。** 不可屏蔽中断(Nonmaskable interrupt) --------------------------------------------------------------------------------