如何在32位保护模式下设置不同的段?

时间:2016-05-28 08:04:57

标签: x86 32-bit segment protected-mode

据我所知,所有段寄存器或选择器都设置为指向32位保护模式平面模型中4gb段的相同起始地址。那么如何实现堆栈段功能,它从顶层地址之一开始向下扩展或向上增长的堆段功能。

是否实现了4gb地址空间中操作系统拥有的部分内存?

1 个答案:

答案 0 :(得分:1)

堆栈段(SS)与其他段没有区别:它从0开始,长度为4GB。

x86分割的有趣之处在于它独立于分页。因此,OS实现了对平面内存模型的分页。它正处于操作系统实现内存保护的分页中。

因此,当OS启动一个线程时,它会在平面段中为堆栈分配一些内存页面,并使ESP /'RSP'寄存器指向它。重要的细节是保留堆栈正下方的第一页和来分配它。这样,堆栈溢出很容易被检测为页面错误。

内核的内存通常映射到4GB内存映射的较高部分,但由于页面保护位,普通用户代码无法访问。