其中是段选择器存储用于上下文切换。 (x86)的

时间:2018-01-12 20:27:30

标签: x86 operating-system cpu memory-segmentation

根据我的阅读,在现代操作系统(包括Windows和Linux)上,不使用CS,DS等段寄存器。我的问题是:

  1. 如果是这种情况,那么段存储器存储在哪里?

  2. 每个帖子都有自己的段选择器吗?

1 个答案:

答案 0 :(得分:1)

你读到的内容过于简化了。

必须使用段寄存器使CPU在受保护/长模式下工作,它们不能用于任何有趣的。 (FS or GS being used for thread-local storage除外)。现代操作系统使用平坦的内存模型,其中所有段都具有base = 0和limit = 4GiB(在64位模式下,HW忽略基数和限制,FS / GS除外)。

CS选择的代码段描述符确定进程是在64位内核下以长模式还是在compat模式下运行。 (描述符中的L位)。请参阅http://wiki.osdev.org/GDT

所有32位进程使用相同的CS值,而所有64位进程使用相同的CS值(但与32位进程不同)。现代操作系统并不总是保存/恢复所有段寄存器,例如在系统调用后返回用户模式时,某些Linux的返回路径使用常量__USER32_CS__USER_CS。还有__USER_DS常量用于初始化DS和ES,因此他们选择了有效的描述符。 (请参阅this answer中有关系统调用返回路径的一些链接和注释。)