是否需要LDT?

时间:2012-01-12 18:18:21

标签: operating-system x86 osdev

作为32位x86处理器的某些OS开发的一部分,我正在考虑在中断描述符表中使用任务门来获取页面错误向量。目的是强制执行任务切换,以确保映射处理程序的堆栈(并避免中断任务的堆栈部分未映射的情况)。

我正在QEMU下运行我的内核(例如它),但我发现当页面发生错误时,它会崩溃(我回到命令提示符)。我一直在阅读和挖掘寻找可能帮助我找出确切原因的提示。我认为我错过了一些东西和/或误解了一些东西。顺便说一句,当我设置页面错误vecotr使用中断门时,我可以按照我的预期让事情正常工作。当我尝试使用任务门时遇到问题(是的,我确实希望继续尝试使用任务门)。

正确设置IDT部分以注册页面错误向量的任务门。其选择器指的是GDT中TSS的描述符。至于GDT中TSS的描述符,我确信它也已正确设置。

但是,如果我已经正确填充了TSS并且迄今为止无法确定如何设置其所有字段,我并非100%确定。其中一些如esp,eip,cs,ds,es,fs,gs,ss和eflags相对简单。但是,其他如LDT段选择器则不太清楚。 LDT段选择器必须是非零并且指向GDT中的LDT描述符吗?必须为上述场景设置以下哪些字段?我有一点时间搞清楚这个。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

在正常运行的x86操作系统中不需要LDT(事实上,在x86-64操作系统中禁止使用LDT。)

为避免使用它,请将其设置为零。

特别需要注意的一点是 - 关于TSS的osdev.org上的结构是从前到后的(http://wiki.osdev.org/TSS)。您需要小心,因为TSS错误将触发TSS故障异常。