本文共 1673 字,大约阅读时间需要 5 分钟。
逻辑地址
逻辑地址 = 段地址 + 偏移;包含在机器语言指令中,用来指定一个操作数或者一条指令的地址
线性地址
线性地址由逻辑地址经过分段单元得到,是一个32位无符号整数,用16进制表示
物理地址
用于内存芯片级内存单元寻址,他们与微处理器的地址引脚到内存总线上的电信号对应
解决进程间隔离以及重定位问题
将程序分段,把整个段平移到任何位置后,段内的地址相对段基址不变,无论段基址是多少,只要给出段内偏移地址,cpu就能访问到正确的指令。
于是加载用户程序时,只要将整个段的内容复制到新的位置,再将段基址寄存器中的地址改成该地址,程序便可准确地运行,因为程序中用的是段内偏移地址,相对新的段基址,该偏移地址处的内容内容还是一样的。
这个动作是在硬件里做的,但是有的硬件是没有分段机制的,作为跨平台的就用了具有更通用性的分页机制来解决线性地址到虚拟地址到物理地址的转换。
段选择符(16位)
段描述符(8字节)
快速访问段描述符
逻辑地址的转换
通过gdtr,定位到gdt
通过段选择符中的index定位到具体的段描述符
通过段描述符中的base + 逻辑地址的offset 计算得到线性地址
Linux以非常有限的方式使用分段,Linux更喜欢分页机制,因为:
Linux中主要的段描述符字段值
Linux 全局描述符表 段选择符
为提高效率,线性地址被分为固定长度为单位的组,称为页。页内部连续的线性地址被映射到连续的物理地址中
把线性地址映射到物理地址的数据结构称之为页表
正在使用的页目录的物理地址存放在控制器cr3中,线性地址内的Directory字段决定页目录中的目录项,目录项指向适当的页表。地址的table字段依次又决定页表中的表项,表项含有页所在页框的物理地址
8086处理器的分页机制
转载地址:http://itugf.baihongyu.com/