段选择符

Posted chuliang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了段选择符相关的知识,希望对你有一定的参考价值。

逻辑地址到线性地址:

逻辑地址 = 段标识符(或者叫段选择符)16位 + 偏移量 32位

段标识符 = index + tl + rpl

其中,cpu中的段寄存器只保存段标识符,根据其中的tl 确定段描述符在GDT还是LDT中,从不同的寄存器获取线性基地址,再加上index*8就得到了段描述符的地址,从段描述符中,取出base字段,再加上逻辑地址中的偏移量,就得到线性地址。

问题是:偏移量存哪里? 

 

线性地址到物理地址:

内存分页:将内存按照固定大小(比如4KB)分成多个页,线性地址转换成逻辑地址,要通过转换表

如果不通过转换表,那么4KB一页,4GB就是1024*1024页,每页的首地址用四个字节表示,就是4B*1024*1024 = 4MB的空间来表示首地址(可以看出是一本目录,从第一页到最后一页的页码都保存在目录里,目录本身就会很厚)。

如果用二级模式转换,10+10+12的话 形成跳跃的,树级的地址表示,可以表示2的32次方个线性地址。

 

以上是关于段选择符的主要内容,如果未能解决你的问题,请参考以下文章

Linux进程3——虚拟地址访问

保护模式

深入理解Linux内核 - 第二章 内存寻址 03

保护模式_1_段寄存器_段描述符_段选择子

伪类选择符

伪类选择符