目前为止,内存还是分段模式,所以想要保护内存,就需要保存段。由于CPU的扩展导致了32位的段基地址和段内偏移,所以16位的段寄存器就无法放下这些信息。现在就需要把这些信息放到内存中,这些信息被封装成特定的段描述符。
段描述符有64位(8字节)数据,里面包含了段基地址、段长度、段权限、段类型(可以是系统段、代码段、数据段)、段是否可读写,可执行等。
多个段描述符在内存中形成全局段描述符表,该表的基地址和长度由 CPU的GDTR 寄存器指示。如下图所示。
可以看出段寄存器中不再存放段基地址,而是具体段描述符的索引,访问一个内存地址时,段寄存器中的索引首先会结合 GDTR 寄存器找到内存中的段描述符,再根据其中的段信息判断能不能访问成功。
此文章为4月Day 24学习笔记,内容来源于极客时间《操作系统实战 45 讲》。