(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu)
参考文档:深入理解计算机系统
内存虚拟地址:
操作系统为每个进程都分配一个虚拟地址空间表:32位地址空间大小约4G
这样如果有资源共享的话(如dll),不同进程的虚拟页面地址指向同一物理页面地址即可。
SRAM(CPU-L1/L2/L3高速缓存), DRAM(内存)
内存虚拟地址的翻译AdreesTranslation:
VPN-虚拟页面编号virtual pagenumber
VPO-虚拟页面偏移 virtual pageoffset
PPN-物理页面编号 physical pagenumber
PPO-物理页面偏移 physical pageoffset
VPO/PPO偏移地址的位数取决于页面的大小,例如4k=2^12页面大小的话,偏移地址为12位
MMU-存储器管理单元 MemoryManagement Unit
PTE-页表条目数组 Page TableEntry
TLB-翻译后备缓存器(PTE缓存)translation lookside buffer
多级PTE/一级PTE/二级PTE-多级时,每级1024=2^10位,二级可以达到2^20页面个数寻址
一个虚拟地址翻译的时候:
例如32位虚拟地址,4k页面(2^12=4k)
a. 首先页面大小划分VPN,VPO:
VPO占12位,则VPN占20位
b. 在TLB中查询虚拟地址页面VPN,TLBI与TLBT的占VPN的总位数20位,如果TBL为256行258列的话,则TBLI为占8位(2^8=256行=0xFF),则TLBT占12位(2^12=4k=0xFFF)
TLBI-TLB索引
TLBT-TLB标记
c. 在TLB中查询到物理地址页面PPN的时候,VPN查询结束;否则查二级的PTE,并把查到的PTE记录放入到TLB中,也返回物理地址页面PPN。
d. 有了物理地址页面PPN,就可以和PPO=VPO组合生成物理地址了
下一步,读取该物理地址PA存储的值
a. 根据物理地址PA,查询高速缓存(Cpu L1/L2/L3 cache),如果高速缓存大小为1k行*4k的块=4M,则CO块内偏移为12位(2^12=4k),CI索引占10位(2^10=1k),则CT占剩余的10位,根据CI/CT/CO查询物理地址存储的值
CO-缓存快内的字节偏移量
CI-高速缓存索引
CT-高速缓存标记
4M缓存对应4G的空间,缓存个数比为1/1024
b. 如果在高速缓存中没有查到PA存储的话,则需要从主存中调拨页面到高速缓存,并在高速缓存中重现查询
(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu)