物理、线性、虚拟、逻辑、有效地址
1、物理地址:就是物理内存真正的地址,相当于内存中的每个存储单元的门牌号,具有唯一性。CPU最终都要以物理地址去访问内存,只有物理地址才是内存访问的终点站。
在实模式下,{段基址+段内偏移地址}经过段部件的处理,直接输出的就是物理地址,CPU可以直接用此地址访问内存。
2、线性地址:
在保护模式下:{段基址+段内偏移地址} 称为线性地址,不过此时段基址已经不是真正的地址,而是一个称为选择子。它本质是个索引,类似于数组下标,通过这个索引便能在GDT中找到相应的段描述符,在该描述符中记录了该段的起始、大小等信息,这样便得到了段基址。当没有开启地址分页功能时,此线性地址就被当作物理地址来用,可直接访问内存;若开启了分页功能,此线性地址就是虚拟地址(虚拟地址、线性地址在分页机制下是一个概念)。
3、虚拟地址:它要经过CPU 页部件转换成具体的物理地址,这样CPU才能去地址总线上访问内存。
4、逻辑地址:无论在实模式还是保护模式下,段内偏移地址都称为有效地址,也称为逻辑地址,这是程序员可以见到的地址。
这是因为最终的地址是由段基址+段内便宜地址组合而成的,由于段基址已经有默认值了,要么在实模式下的默认段寄存器中,要么就是在保护模式下的默认段选择子寄存器指向的段描述符中,所以只要给出段内偏移地址就行了。
总结:
线性地址、虚拟地址都不是真实的内存地址,他们都是用来描述程序或任务的地址空间。由于分页功能是需要在保护模式下开启的,32位系统保护模式下的寻址空间是4GB,所以虚拟地址或者线性地址就是0~4GB的范围。
转换过程如下: