1.直接映像方式
直接相连映像:每一个内存区都是和一个Cache块相对应的,也就是说,Cache块里有多少块,一个内存区里就有多少Cache块,每一块都是相互对应的。假设cache里有32块,那么内存里就会先算着32块总共有多大,在除以自己的容量,就可以得出自己该划分出多少的区,每一个区有n块(cache有多少块,一个内存区里就有多少块)。这样来一一对应。
优点:地址换算快,更好的运行效率。
缺点:冲突率太高,假设0区的第0块在和cache的第0块传递数据,第二区的第0块就不能传输,即使有别的cache块空闲着也不能传输,只能等。太浪费资源了。
2.全相连映像方式
内存中不再分区,而是直接分块,就是你Cache有多大,我内存就按这个大小来分块,假设Cache有512kb,我内存中每一块就是512kb,我内存中每一块都相当于是一个Cache的副本(其实cache是内存的一个副本,这里为了方便理解,故此这样说)。例如,内存中的第0块中就有Cache中的每一块与之相对应。这样就很好的解决了冲突率高的问题,只有Cache中被填满了,才会有冲突产生。
优点:很好的解决了冲突高的问题,资源利用率高
缺点:造价相对昂贵,地址转换速度较慢。
3.组相连映像方式
是前两种的集大成者。它的分区方法是组对组的一种分区方式,每两块是一组。一个Cache对应一个内存中的区,内存区里的组数和Cache中的组数是一一对应的。Cache能够对应每一个内存区。这符合直接映像的优点。然而,每一个组内的数据也是可以自己替换的,比如内存中的第0区中的第8组的第0块中的数据可以替换到Cache第0组中的第0块,也可以去第0组的第一块。这就符合了全相连映像。所以说组采用直接映像,块采用全相连映像。
如果看不懂,或许是关于cache和地址映像的一些知识还没有搞懂。在这里补充一下。
Cache:高速缓存:为了提供计算机的工作效率而存在的,这是因为CPU与内存的读取速度并不一致,所以出现了一个一级缓存Cache。它是内存的副本,一个计算机可能会运行多个程序,这些程序的进程在内存里。而一般人们会使用一个程序,这个可以称为主程序,你不能够要求张三一边打游戏一边写Word文档吧。但是内存的读取速度不够快,这个时候怎么办呢?就把CPU当前正在处理的主程序产生的数据传入Cache中,这样就可以解决内存速度不够的问题了。但是具体要怎么把内存中的数据给到Cache呢?这就需要使用到替换算法,因为Cache中的数据只是内存中的副本,所以需要用到替换算法来把内存中的相关信息替换到Cache中。
地址映像:因为CPU得到的只是内存地址,要从Cache中拿数据,就需要把这个地址转为Cache的地址,这个就叫做地址映像。地址转换完之后Cache得到相应的,有就给,没有再去内存里拿。
个人原创,如有雷同,便是雷同。