1. 段描述符表寄存器
系统设置的一个独立寄存器,用于存储段描述符表的内存地址和表的范围,就是表有多大,访问时不能超出表的范围。
2. 段描述表
系统中的一个数组,存储了很多段描述符,根据段寄存器存储的索引(即书上说的段选择子,忒太理解)确定内存段在段描述符表中的位置,进而取得段描述符信息,再根据段描述符信息的段基地址和段界限,得到内存段的内存地址。
段寄存器存储的索引,是在保护模式情况下,如果在实模式下,段寄存器存储的仍然是段基址。
这个内存段的内存地址是线性地址,在未启用分页管理时,线性地址即为物理地址,在启用了分页管理时,则cpu根据分页的页表目录,查找页面项,即先查找一级页表,再查找二级页表,根据页表中页的基地址和页内偏移地址转换成物理地址。
3. 段描述符
段描述符是系统中,用于表示各种内存段的数据结构,包含的信息:内存段基地址,段内偏移界限(不能超过一个段的最大内存范围),段的属性包括很多如:段类型,内存段?代码段?堆栈段?系统的段类型什么陷阱,门等,不细究。
4. 段寄存器存储的索引(即书上说的段选择子,忒太理解)
段选择子就是段描述符在段描述符表中的索引值,段选择子,难听也不好理解。
最后总结:
cpu根据全局描述符表寄存器得到全局描述符表的内存地址,再根据段寄存器中的选择子即索引定位到段描述符,进而获取段描述符中的端基址和段界限,最后通过页管理的规则,转换到真实的物理地址。
cpu拿到的地址一般是虚拟地址或者说是偏移地址,比如程序里的4G进程空间中的任意一个地址,即4G内存空间中的地址,0到4G,cpu拿着这个偏移地址去查找它的段描述符,根据上述规则进而转换到物理地址。