作为 32 位 x86 处理器的某些操作系统开发的一部分,我正在考虑在中断描述符表中使用任务门来处理页面错误向量。目的是强制任务切换,以便保证映射处理程序的堆栈(并避免中断任务的部分堆栈未映射的情况)。
我在 QEMU 下运行我的内核(例如它),但我发现当页面错误发生时,它崩溃了(我回到命令提示符)。我一直在阅读和挖掘寻找可以帮助我找出确切原因的提示。我认为我遗漏了一些东西和/或误解了一些东西。顺便说一句,当我将页面错误向量设置为使用中断门时,我可以让事情按我的预期工作。当我尝试为此使用任务门时,我遇到了问题(是的,我确实想坚持尝试使用任务门)。
IDT 部分被正确设置为页面错误向量注册一个任务门。它的选择器指的是 GDT 中 TSS 的描述符。至于 GDT 中 TSS 的描述符,我确信它也设置正确。
但是,我不能 100% 确定我是否正确填充了 TSS,并且到目前为止还无法准确确定如何设置其所有字段。其中一些,如 esp、eip、cs、ds、es、fs、gs、ss 和 eflags 相对直接。但是,诸如 LDT 段选择器之类的其他内容则不太清楚。LDT 段选择器必须非零并且指向 GDT 中的 LDT 描述符吗?必须为上述场景设置哪些字段?我有很多时间来解决这个问题。
任何帮助将不胜感激。