- 虚拟地址
指由程序产生的由段选择符和段内偏移地址组成的地址。 - 逻辑地址
指由程序产生的段内偏移。有时候直接把逻辑地址当做虚拟地址。 - 线性地址
指虚拟地址到物理地址变换的中间层,是处理器可寻址的内存空间中的地址。程序代码会产生逻辑地址,也就是段中的偏移地址,加上相应的段基址就成了线性地址。如果开启了分页机制,那么线性地址需要再经过变换,转为为物理地址。如果无分页机制,那么线性地址就是物理地址。 - 物理地址
物理地址就是内存的地址,不是外存的地址。
虚拟地址到物理地址的转化是体系结构相关的,一般由分段和分页两种方式。以X86CPU为例,分段和分页都是支持的。内存管理单元负责从虚拟地址到物理地址的转化。逻辑地址是段标识+段内偏移的形式。MMU通过查询段表,可以将逻辑地址转化为线性地址。无分页机制时,线性地址就是物理地址,有分页时,MMU还需要查询页表来将线性地址转化为物理地址:逻辑地址(段表)->线性地址(页表)->物理地址。
映射是一种多对一的关系,即不同的逻辑地址可以映射到同一个线性地址上;不同的线性地址也可以映射到同一个物理地址上。而且,同一个线性地址在换页之后,可能被装载到另一个物理地址上,所以这种多对一的映射关系会随时间发生变化。这是由于虚拟内存技术来完成的,先把一些进程不用的内存先置换到外存中,把剩下来的空间留个需要的进程。
整个存储系统的结构框图
首先当cpu发出一个虚拟地址请求后,把虚拟地址送给MMU处理。
MMU得到地址后,通过计算得到页号/段号,先判断是否有读写权限,如果没有就返回错误,如果有再查询表(STL表/普通页表),
- 如果表中没有该页/该段,就产生一个缺页中中断,虚拟内存管理技术就会通过一系列算法来把缺少的页从外存中取出来,放到内存中。
- 如果表中有该页,那就通过表计算得到物理地址(即内存中的地址)。
CPU得到物理地址后就可以对内存进行读写操作。