个人观点:程序中的内容不会无中生有,当你要用的一个数据的时候,这个数据的地址肯定记录在哪里
(1)逻辑地址(当前程序运行的段和地址偏移量)
通过(分段单元,由MMU控制)
(2)线性地址(虚拟地址)
通过(分页单元,由MMU控制)
(3)物理地址
段寄存器:(仅仅存放段选择符)
cs:代码段寄存器
ss:栈段寄存器
ds:数据段寄存器 (以上是专门用途,不可改)
es
fs
gs (以上三个随便执行任意段)
GDT
全局描述符 存放在gdtr控制寄存器
(每个cpu一个)
LDT
局部描述符 存放在ldtr控制寄存器
linux中一般的段和段描述符:
(1)代码段描述符
(2)数据段描述符 (3)任务状态段描述符
运行程序的特权级:CPU的特权级有CPL指定,并由存放在cs寄存器中的RPL来指定
页:线性地址被分成以固定长度为单位的组,页内部连续的线性地址被映射到连续的物理地址中