背景概念(如下以32位系统为例):
虚拟地址:程序中使用的地址都是虚拟地址,他相对于物理地址而言,如int *ptr = malloc(100); ptr指向的即是虚拟地址。
物理地址:访问存储器时,地址总线上发出的地址。我们在程序中访问地址一般是虚拟地址,如*ptr = 0x1234;实际中OS和硬件帮我们找到实际的物理地址并完成操作。
MMU: Memory Management Unit,内存管理单元,负责将虚拟地址转换为物理地址。实际上CPU芯片没有MMU或者不使能MMU时,虚拟地址和物理地址在数值上是相同的。MMU分为指令MMU和数据MMU。
cache:高速缓存,为了平衡CPU和主存(DRAM)之间日益增大的速度差异,在CPU和主存之间引入的一个部件,他是主存中数据的一个子集,CPU访问主存之前先访问高速缓存,如果高速缓存中有要取的数据(命中)则不用再访问主存,以此提高速度,一般有SRAM组成,组织方式组相联。高速缓存一般是以物理地址为tag和索引的,可以分级。L1cache分指令和数据cache
页表:现代操作系统Linux以页为单位管理内存,一页大小缺省是4KB(地址位占低12bit);除去低12bit,虚拟地址的高位为虚拟页号VPN(virtual page number),类似物理地址高位成为物理页框号PFN(physical frame number),为啥不叫PPN,我也不知道。页表就是以VPN为索引记录PFN的表项,页表位于主存中,由OS维护。
TLB:Translation lookaside buffer,即旁路转换缓冲,或称为页表缓冲;里面存放的是一些页表(虚拟地址到物理地址的转换表),他是主存页表的子集。MMU在进行虚拟地址到物理地址转换的时候需要查页表,首先查找TLB(以VPN为索引查找),若不命中分级查cache,各级cache均不命中查主存。