为什么要有逻辑地址
逻辑地址需要映射到物理内存中,才能够完成对内存的操作,程序是写死的,操作固定的逻辑地址,但是硬件可用的物理内存却是一直变化的,而且程序无法知道可用的物理地址,所以必须要做出映射才能够操作对应的物理地址。
逻辑地址如何与物理地址映射?
-
固定偏移量,但是,随着时间的推移,程序使用的内存也会一直变化,无法固定。会产生碎片。
-
分页思想: 逻辑内存分为多个页,物理内存分为多个帧,通过页表来进行映射,每个进程都有自己的页表。
如果多个进程所占用的逻辑地址空间远超过物理内存空间的时候,就需要映射到磁盘上面,就需要页面置换算法来进行了。
快表(对分页思想的时间优化)
将最常访问的几个页表项存放到访问速度更快的硬件中,一般是在内存管理单元(集成在cpu中)中,这个表就是快表,进程寻址的时候先查快表,快表miss了之后再差页表。
因为程序最常访问的页没几个,所以快表命中率很高。
多级页表(对分页思想的空间优化)
程序内部的内存管理
像JVM中的堆区,栈区就是Java进程的段。
一个进程分为多个内存区域,称之为段,每个段的逻辑地址都是从0开始的。
可以段和页进行结合,就是页表变成了 段号+页号才会对应一个帧号(效率比较低,已经被淘汰)