gpt4 book ai didi

x86 - 需要LDT吗?

转载 作者:行者123 更新时间:2023-12-01 06:42:46 24 4
gpt4 key购买 nike

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

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

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

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

任何帮助将不胜感激。

最佳答案

LDT 在正常运行的 x86 操作系统中不是必需的(实际上,在 x86-64 操作系统中是禁止的)。

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

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

关于x86 - 需要LDT吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8840170/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com