如今的微处理器包括的硬件线路使内存管理即高效又健壮,所以编程错误就不会对该程序之外的内存产生非法访问。
内存地址
内存地址分三类:
- 逻辑地址:我们程序员在程序里面使用到的地址就是逻辑地址。
- 线性地址:也称作虚拟地址,是逻辑地址通过分段单元后得到的地址。
- 物理地址:由线性地址通过分页单元后得到的地址,真正的物理地址了。
硬件中的分段
段选择符和段寄存器
一个逻辑地址由两部分组成:段标识符+段内偏移量。段标识符是一个16位长的字段,称为段选择符。段内偏移量是一个32位的字段。
为了快速方便的找到段选择符,处理器提供段寄存器:cs、ss、ds、es、fs和gs,其中前三个有专门的用途:
- cs:代码段寄存器
- ss:栈段寄存器
- ds:数据段寄存器
其中cs寄存器还有一个特殊用途:它包含了一个两位的字段,用来指出当前cpu的特权级,0为内核态,3为用户态。
段描述符
每一个段描述符有一个8字节的段描述符表示,他描述了段的特征。段描述符放在全局描述符表GDT或局部描述符表LDT中。
通常只定义一个GDT,每个进程除了存放在GDT中的段之外如果还需要定义段就存放在自己的LDT中。GDT的地址和大小存放在gdtr寄存器中,当前正在被使用的LDT存放在ldtr寄存器中。
快速访问段描述符
这里使用了一种附加的非编程的寄存器,当作快表使用&#x