内存地址
逻辑地址:包含在机器语言指令中用来指定一个操作数或一条指令的地址,它由一个段和偏移量组成,偏移量指明了从端开始的地方到实际地址的距离
线性地址:表示高达4GB的地址(32位)
物理地址:用于内存芯片级内存单元寻址
分段
端选择符和段寄存器
逻辑地址(48位)由段选择符(16位)和偏移量(32位)组成
T1:0表示GDT,1表示LDT
段寄存器(16位):用来存储段选择符,由于段描述符为8字节,因此,索引号只需要13字节即可
cs:代码段寄存器,指向包含程序指令的段。它包含两位的字段:CPL:0表示内核态,3表示用户态
ss:栈段寄存器,指向包含当前程序栈的段
ds:数据寄存器,指向包含静态数据和全局数据的段
段描述符
它有8字节组成,表示段的特征,它放在全局描述符表(GDT,它的地址和大小存储在gdtr)和局部描述符表(LDT,它的地址和大小存储在ldtr),它主要的内容是基地址(32位)和偏移量(20位)组成。
分段单元:
1.根据T1字段,选择GDTR或LDTR作为基地址的寄存器
2.通过上面所述的基地址+index字段的值*8得到描述符的地址
3.通过描述符的基地址加偏移就得到线性地址
除linux的80x86,所有段(用户代码段、内核代码段、用户数据段、内核数据的)都是从0x0开始的,因此逻辑地址偏移量就是线性地址。
硬件中分页
分页单元把线性地址转为物理地址,线性地址被分为以固定长度为单位的组,称为页,页内部连续线性地址被转为连续的物理地址。