cache是一种高速缓冲存储器,她的主要作用是提高CPU数据输入的速率,调和CPU速度与内存存储速度之间的巨大差异。
通俗一点说就是CPU太快,内存速度相对比较慢,而cache的速度快,但是cache的价格比较昂贵。人们想到一个办法就是利用小容量的cache在CPU和内存中间当桥梁,也就是说把CPU在下一个时间段需要用到的数据提前存入cache中,当CPU需要的时候可以快速的从Cache中取得数据,这样就可以在一定程度上提高计算机的性能。但是怎样才能知道CPU在下一个时间段内用到内存中的哪些数据呢?局部性原理就可以解决这个问题。
使用cache改善系统性能的依据就是局部性原理。
局部性原理其实在生活中我们非常常用,我们平时所说的人以类聚、物以群分就是局部性原理的通俗表示。也就是说你周围的人都是坏蛋你也好不到哪里去;如果你周围都是好人,你绝对也坏不到哪里去。局部性原理反映在计算机中就是如果CPU当前时间用到内存中的某块数据,那么CPU在下一个时间段内用到这块数据周围的数据的可能行就非常大。这时Cache就派上用场了,把这个时间段中CPU用到的这块数据周围的数据存入Cache中为下一个时间段的CPU使用做准备,这样的话当下一个时间段CPU需要数据了就可以直接从存储较快的Cache中取得需要的数据,这样自然就提高了计算机的性能。
这里还涉及到一个问题,cache中的数据和内存中的部分数据是一致的,那么当CPU从cache中取得数据后怎样知道这块数据在内存中的具体地址呢?于是人们就想到到了映射的方法,将cache中的数据按照特定的方式和内存中的数据进行映射,这样CPU就很容易找到Cache中数据在内存中的真实位置了。
映射的方式目前有三种,通俗一点可以这么来理解。cache相当于一个专业里的女生,而内存相当于一个专业的所有男生。大学里一般情况下女生少男生多(这里为了便于理解,把女生人数定为一个宿舍的人数,就是cache的容量;男生定为N个宿舍的人数,就是内存的容量)。那么所谓的映射就可以这么理解:一个专业的男女同学之间谈恋爱,告诉你女生的信息按照特定的映射方式去找到与这个女生对应的男生。下面逐一介绍这三种映射方式。
- 直接映像:
指主存的一个字块只能映像到Cache的一个准确确定的字块中。
通俗一点说就是一个宿舍的女生只能和特定的某个男生宿舍的对应男生谈恋爱,例如女生407和男生407谈,而且床铺必须一一对应,一号铺的女生对应一号铺的男生,二号铺的女生对应二号铺的男生,以此类推……(好变态哇~~)
特点:主存的字块只可以和固定的Cache字块对应,方式直接,利用率低。
通俗点说可能就非常容易理解了,这种映射方式就是宿舍对宿舍,八个人对八个人。也就是说这个专业中不是407宿舍的男生根本没有机会找到自己的恋人(其他非407的男生表示情何以堪),所以说一个专业的男生中大部分都被浪费了,便宜都让407占了,所以男生利用率很低。而且由于女生的选择范围小,所以女生很难找到中意的白马王子,所以说命中率很低。
- 全相联映像:
指主存的一个字块可以映像到整个Cache的任何一个字块中。
特点:贮存中的字块可以和Cache的任何字块对应,利用率高,方式灵活,标记位较长,使用成本太高。
通俗点说就是女生在专业范围内可以随便找男生进行恋爱,没有宿舍条件限制。这样的话由于男生人数多,总要相互比较一下呀。自然找起来时间也就长,需要的成本当然就高了。但是这样的方式可以基本上保证女生能找到中意的白马王子,也就是说男生利用率提高,基本上优秀的男生会和自己的恋人走到一起。(哦也~)
- 组相联映像:
是对全相联和直接映像的一种折中的处理方案。既不在主存和Cache之间实现字块的完全随意对应,也不在主存和Cache之间实现字块的多对一的硬性对应,而是实现一种有限度的随意对应。
特点:折中方案。组间全相联,组内直接映像。集中了两个方式的优点。成本也不太高。最常见的Cache映像方式。
通俗一点说就是和直接相连类似,也是一个女生宿舍对应一个男生宿舍,区别在于不必床铺对应床铺,只要在一个宿舍范围内即可。也就是说女生407可以找男生407的任何人谈恋爱,不用考虑床铺限制。(一般变态~~)