我一直在开发 32 位操作系统,我希望允许程序将段与内核分开。
为此,我需要创建 SS,并且 DS 寄存器实际上指向程序堆栈和 .data 部分。
根据我的研究,我相信这是通过建立一个本地描述符表来完成的。
我假设这与 GDT 非常相似,并且 LDT 是通过 lldt 加载的。
但是,一旦设置了细分,我就不知道如何使用它。谁能解释一下?
我一直在开发 32 位操作系统,我希望允许程序将段与内核分开。
为此,我需要创建 SS,并且 DS 寄存器实际上指向程序堆栈和 .data 部分。
根据我的研究,我相信这是通过建立一个本地描述符表来完成的。
我假设这与 GDT 非常相似,并且 LDT 是通过 lldt 加载的。
但是,一旦设置了细分,我就不知道如何使用它。谁能解释一下?
不,无需设置单独的 LDT 来设置用户空间 SS/CS/DS 段描述符。
可以做到这一点,只需在中断处理程序中保存寄存器状态并在 GDT 中使用任务选择器的条目(CPU 需要查找进程的内核空间 SS 以从用户空间进入中断)。
好吧,你找不到比英特尔手册更好的教程了。真的,找到英特尔 80386 编程手册(386 手册比新的更短,而且写得更好;它有你需要的主要点)。或英特尔网站的 IA32 编程手册。它包含您正在搜索的所有信息。