1

我一直在开发 32 位操作系统,我希望允许程序将段与内核分开。

为此,我需要创建 SS,并且 DS 寄存器实际上指向程序堆栈和 .data 部分。

根据我的研究,我相信这是通过建立一个本地描述符表来完成的。

我假设这与 GDT 非常相似,并且 LDT 是通过 lldt 加载的。

但是,一旦设置了细分,我就不知道如何使用它。谁能解释一下?

4

2 回答 2

1

不,无需设置单独的 LDT 来设置用户空间 SS/CS/DS 段描述符。

可以做到这一点,只需在中断处理程序中保存寄存器状态并在 GDT 中使用任务选择器的条目(CPU 需要查找进程的内核空间 SS 以从用户空间进入中断)。

于 2013-01-13T02:14:25.203 回答
0

好吧,你找不到比英特尔手册更好的教程了。真的,找到英特尔 80386 编程手册(386 手册比新的更短,而且写得更好;它有你需要的主要点)。或英特尔网站的 IA32 编程手册。它包含您正在搜索的所有信息。

于 2013-01-13T14:09:58.897 回答