网站虚拟主机,博客和网站的区别,河源建网站,小企业网站免费建设【0】写在前面-为什么需要虚拟存储器?
0.1#xff09;定义#xff1a;虚拟存储器其实就是借用了磁盘地址空间#xff0c;还记得当初我们安装CentOS#xff0c;划分的swap 文件系统吗#xff1f;
0.2#xff09;VM简化了链接和加载、代码和数据共享#xff0c;以及应用…【0】写在前面-为什么需要虚拟存储器?
0.1定义虚拟存储器其实就是借用了磁盘地址空间还记得当初我们安装CentOS划分的swap 文件系统吗
0.2VM简化了链接和加载、代码和数据共享以及应用程序的存储器分配摘自CSAPP
1 简化链接 每个进程都拥有独立的虚拟地址空间 且空间范围一致它是可重定向目标文件使用相对物理地址的前提2 简化加载 加载器从不实际拷贝任何数据从磁盘到存储器。每个页初次被调用哦时 要么是CPU取指时引用 要么是一条正在执行的指令引用一个存储器位置时引用VM系统会按需自动调入数据页3 简化共享 多个虚拟页面可以映射到同一个共享物理页面上4 简化存储器分配 当需要额外的堆空间 os分配连续的虚拟存储器页面这些VP可以映射都任意的物理页面这些物理页面可以任意分散在存储器中
0.3我还想多问一句为什么有了高速缓存还需要TLB-translation lookaside buffer,翻译后备缓冲器呢
Reason
引入局部性原则 摘自CSAPP
局部性原则保证了在任意时刻 程序将往往在一个较小的活动页面集合上工作这个集合
叫做工作集working set或者常驻集resident set。换句话说 局部性原则揭示了一个现象在一段时间内我们会反复调入或调入同一个或
几个虚拟页页面而且每次CPU产生一个VA时 MMU就必须查阅PTE
以便将VA翻译为PA 注意是每次所以开销很大解决方法 为了消除这样的开销在MMU中包括了一个关于PTE的小缓存称为翻译后备缓冲器
关键点 所有的地址翻译步骤都是在芯片上的MMU中执行的 因此执行速度非常快
你要知道计算机中共有7级存储结构访问CPU中的存储空间MMU的速度比访问缓存的速度可是快了几个数量级的。
【1】说了这么多看个荔枝以下TLB 页表 高速缓存 是我们手动模拟的图片摘自CSAPP 【2】题目说有虚拟地址 0x03d7 虚拟存储器系统如何将其翻译成物理地址和访问缓存的。
【3】解答将以上虚拟地址用二进制表示如下 我们看到
VPNbit13~bit6 0x0f
VPObit5~bit0 0x17
TLBT行索引or标记bit13~bit80x03; 这里为什么我管标记叫做行索引说到本质叫其行索引并没有什么不妥
因为本实例中cache采用的是直接映射即每个组就只有一行所以行索引在此处无意
但若cache是采用组相联映射或全相联映射的话每组就有多行行索引就起到作用了TLBI组索引bit7~bit60x3;相关声明declaration写在前面
d1) 我们这里是考虑命中的情况当然如果不命中 MMU需要从主存中取出相应的PTEd2 PS 命中与否是看TLB中是否有请求的PTEd3虚拟地址14位而物理地址12位
翻译过程 干货
1 MMUMMU存在于CPU中是硬件从虚拟地址中抽取VPN0x0f2 再从VPN中抽取出TLBT行索引0x03, TLBI组索引0x3用于索引翻译后备存储器TLB3 带着TLBT和TLBI 查看TLB发现第3组 有标记位03当然这是手动设置的便于模拟且有效位1故命中4 命中后将PPN0D返回给MMU5 MMU将PPN0x0Dbit11~bit6 和 虚拟地址的VPO0x17bit5~bit0 连接起来形成物理地址PA 》》 0x357 6 如上图所示我们得到了CT-Cache Tag0x0D CI-Cache Index0x5 CO-Cache Offset0x3即得到了缓存标记CT0x0d缓存组索引CI0x5缓存偏移CO0x37 依据CT、CI、CO查询高速缓存c图 第5组的标记位-0x0D 故命中8 在看缓存偏移是0x3所以取出块3字节0x1D Attention
对于CT CI CO 我再说的明白一点 CT就是行索引 CI就是组索引 CO就是块索引 Bingo