系统架构师 之 Cache的映射机制和替换算法

今天来着重学习了Cache的映射机制和替换算法,在这简单总结一下。

Part 1: cache映射机制

cache的映像机制:是指在CPU发出访问主存指令后,存储器地址先被送到cache,若命中则直接对cache进行访问。

下面阐述cache映射机制的三种类型。

[if !supportLists]一、[endif]直接映射:是以随机存取存储器作为cache存储器,电路简单,主存地址呗分为三个部分(从高到低):区号、页号、页内地址。根据该三个区域与cache进行直接映射。从下面的例子看可能更加直观:

内存容量为1GB,cache的容量为8MB,页面大小为512KB,求区号和页号位数。

①求区号:区号=内存容量/cache地址 = 128个,即7位

②求页号:页号=cache容量/页面大小 = 16页,即4位

直接映射存在缺点:地址块之间冲突绿很高,因为,主存内第n页即在cache的第n标记块中。进一步会导致cache存储空间利用不足。

[if !supportLists]二、[endif]全项链映像:主存中每一页可以映像cache中任意一页。其中主存地址划分为两部分,地址部分和数据部分。顾名思义,地址部分存放存储器地址;数据部分存储数据。其特点:cache的标记为=主存地址位,则存放相同主存中的内容,cache所需要的空间更大,导致cache的成本更高。

cache命中方式:将主存标记与cache标记逐个对比,直到命中。可见缺点:cache对比

速度慢,电路设计困难,只适合用于小容量的cache。

[if !supportLists]三、[endif]组相联映像:介于直接映像和全相联映像之间。全相联映像方式以页为单位,可以自由映像,没有固定的对应关系;直接映像方式中,主存分组,主存组内各页与cache的页之间采取的是固定的映射关系;然而在组相联映像中,主存与cache都分组,主存中一个组内的页数与cache相同。

其规则:主存中组与cache中组成直接映像关系,单每个组内的页是全相联映像关系、

下面采用例子进行阐释。一主存分为128个区,每个区8个组,每个组2个页。组相连

映像方式的主存地址。


Part2: 替换算法

cache存在未命中的时候,如果cache未命中,则需要将内容与内存中进行替换,这边是替换算法。目的是为了淘汰cache中某些旧数据,替换上新的需要使用的数据。

常用的替换算法有三种:随机算法、先进先出法、最近最少使用法。

[if !supportLists]一、[endif]随机算法:这是最简单的替换算法,不管内容进入到cache采用了什么方式,新的数据如果想要进入到cache当中则随机淘汰一页。

[if !supportLists]二、[endif]先进先出算法(FIFO),按照调入cache的时间先后顺序进行淘汰。如果新数据想要进入cache,则将里当前时间最久远的数据页替换掉,这一定程度上满足程序的时间局部性原理。

[if !supportLists]三、[endif]最近最少使用算法(LRU),LRU算法是吧CPU最近最少使用的数据块作为被替换的快,这样就要使用到一个计数器或者一个时间记录位,记录数据最近访问的最新时间,作为被替换的标准。这样最大程度满足了程序的时间局部性原理。

[if !supportLists]一、[endif]


Part3:写操作

cache中的数据需要保证与内存中一致,所以离不开写缓存。写cache常用到一下三种方法:写直达、写回、标记法。

[if !supportLists]二、[endif]写直达(write through),当要写cache的时候,数据同时写回内存。这样如果新的数据想要进入cache的话,可以直接覆盖,无需再次写回内存。

[if !supportLists]三、[endif]写回(write back),CPU修改Cache的某一块,数据不立刻写回缓存,而是从当前cache中淘汰,淘汰后块中数据写回缓存。这种策略经常需要标记单元是否修改,用于判断是否需要更新内存中页内数据。

[if !supportLists]四、[endif]标记法,对cache中每一个数据设置一个有效位,数据进入cache后,有效则标记为1,更新后则标记为0。用1和0区分访问cache和内存。1访问cache,0访问内存。这样有效的共同使用起来了cache与内存,但是存在读脏情况,需要定期更新。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Python语言特性 1 Python的函数参数传递 看两个如下例子,分析运行结果: 代码一: a = 1 def...
    时光清浅03阅读 511评论 0 0
  • 第一章 计算机组成与体系结构 1.1 计算机系统组成 1.1.1 计算机硬件的组成 控制器。控制器是分析和执行指令...
    步积阅读 1,999评论 0 15
  • Sonar翻译 Sonar翻译... 1 User Guide(用户指南)... 2 第一章Fixing the ...
    pig_zzZ阅读 2,866评论 0 1
  • [if !supportLists]1、[endif]文件管理:把所管理的程序和数据组织成一系列的文件,并能进行合...
    小公举凡阅读 497评论 0 0
  • 最近每天给英语群里的人教两个书写体字母。昨天把二十六个字母都教完了,今天早上还是忍不住想写点什么,于是就写了句歌词...
    星火盎然的艾珐阅读 394评论 0 0