来源:软考中遇到一题,说明cache 与虚拟内存的区别
cache、内存、虚拟内存
内存就是RAM,RAM和ROM是相对的,RAM在断掉后保存在里面的信息会消失,而ROM在断电后存储在里面的信息不会消失。RAM分为静态RAM和动态RAM,静态RAM叫SRAM,是仅次于CPU访问速度的RAM,L1 cache就是SRAM,一般我们电脑上用的都是动态RAM,即DRAM,DRAM的访问速度比SRAM要慢很多,但是体积小,价格便宜。系统里面内存分配说的物理内存大多数也就是DRAM里的情况。
cache就是高速缓存,是为了调和CPU得过快访问速度和内存过慢的速度的一个硬件,现代计算机一般都有三级高速缓存,L1、L2、L3,访问速度依次递减。因为CPU要从内存中读取数据的时候会很慢,大部分时间会浪费在等待上,所以引入cache,把预计将要读取的数据先存放到cache中,这样CPU就可以先到cache中读取,从而节约了等待时间,如果cache中没有要读取的数据,那么继续往下到内存中读取。前面文章讲到了数据从内存读到cache中的算法。
虚拟内存是为了防止内存不够用,从硬盘上分割出一些空间给内存扩展使用,这样程序就认为运行内存还够用。实际上呢,是把内存中一些不常用的数据或指令放到虚拟内存中,等到使用的时候再存放到内存中,因为内存的读取速度虽然比CPU和cache低,但是比硬盘要高很多,从而就加快了程序的运行速度。在内存为4G以上的计算机中,一般这个大小足够用了,虚拟内存就一般无用武之地了。
理解了以上概念,做个总结吧。
CPU首先得到的是虚拟地址,要经过地址翻译成物理地址才能进行数据访问,这个过程要检查TLB(翻译后备缓冲器),如果命中,会得到其物理地址,之后会访问cache,如果cache中有要访问的数据,那么本次访问就结束,如果没有就到内存中寻找,并更新cache;如果TLB不命中,那么那么系统内核会调用缺页异常处理程序去处理,这个过程中会进行页替换等操作,最终取得要访问的数据。
到这可能会有疑问:cache是在CPU之后访问,在内存之前访问的,但是刚刚又说到CPU首先得到的是虚拟地址,要映射成相对应的物理地址之后才进行cache访问,然而虚拟内存是在内存不够用的情况下才调用的,和虚拟内存定义有点不符合啊?注意:在这里不要把虚拟地址和虚拟内存相混淆了,这个图能帮你很好地来说明区别。
那么我们来看下cache和虚拟内存的区别。
(1)侧重点不同:cache主要解决主存与CPU的速度差异问题;而就性能价格比的提高而言,虚存主要是解决存储容量问题,另外还包括存储管理、主存分配和存储保护等方面。
(2)数据通路不同:CPU与cache和主存之间均有直接访问通路,cache不命中时可直接访问主存;而虚存所依赖的辅存与CPU之间不存在直接的数据通路,当主存不命中时只能通过调页解决,CPU最终还是要访问主存。
(3)透明性不同:cache的管理完全由硬件完成,对系统程序员和应用程序员均透明;而虚存管理由软件(操作系统)和硬件共同完成,由于软件的介入,虚存对实现存储管理的系统程序员不透明,而只对应用程序员透明(段式和段页式管理对应用程序员“半透明”)。
(4)未命中时的损失不同:由于主存的存取时间是cache的存取时间的5~10倍,而主存的存取速度通常比辅存的存取速度快上千倍,故主存未命中时系统的性能损失要远大于cache未命中时的损失。
————————————————
版权声明:本文为CSDN博主「lm_y」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Com_ma/article/details/78145333