码迷,mamicode.com
首页 > 其他好文 > 详细

第三章 存储器之高速缓冲存储器(超重点)

时间:2020-05-19 09:18:23      阅读:273      评论:0      收藏:0      [点我收藏+]

标签:地址映象   例题   年龄   相等   并行   有关   工作原理   png   现象   

高速缓冲存储器(每年必考)

一、概述

1. 问题的提出

  • 避免 CPU “空等” 现象
  • CPU 和 主存(DRAM)之间速度的差异
缓存 主存
容量小 容量大
速度高 速度低
  • 程序访问的局部性原理
    • 空间的局部性(冯·诺依曼机,重复访问):空间局部性是指如果一个存储单元被访问,则该单元邻近的单元也可能很快被访问。
    • 时间的局部性:时间局部性是指如果一个存储单元被访问,则可能该单元会很快被再次访问。这是因为程序存在着循环。

2. Cache 的工作原理

??Cache 保存的信息只是主存中最急需执行的若干块的副本。用主存地址的块号字段访问 Cache 标记,并将取出的标记和主存地址的标记字段相比较。若相等,说明访问 Cache 有效,称 Cache 命中;若不相等,说明访问Cache 无效,称 Cache 不命中或失效。
(1)主存和缓存的存储:主存和缓存按块存储,块的大小相同
技术图片


(2)命中与未命中
缓存共有 C 块,主存共有 M 块(M >> C)

  • 命中:主存块调入缓存,主存块与缓存块建立了对应关系,用标记记录与某缓存块建立了对应关系的主存块号

  • 未命中:主存块未调入缓存,主存块与缓存块未建立对应关系


    (3)Cache 的命中率

  • CPU 访问的信息在 Cache 中的比率

  • 命中率与 Cache 的容量与块长有关,一般每块可取 4~8 个字

  • 块长取一个存取周期从主存调出的信息长度,同时块长取多少存储字与多体交叉也有关系


    (4)Cache -主存系统的效率

  • 假设 Nc 为访问 Cache 的总命中次数,Nm 为访问内存的总次数,则命中率为:h = Nc /(Nc+Nm)

  • 设 Cache 命中率为 h,访问 Cache 的时间为 tc,访问主存的时间按为 tm(tc << tm

    • 平均访问时间(同步)=h × tc+(1-h) × tm ——————> 同步:地址线传输会到达Cache也会到达内存,如果数据在 Cache 中命中,那么数据直接送到 CPU ,内存不动;如果没中就到内存中传输。

    • 平均访问时间(异步)=tc + (1-h) × tm ——————> 异步:首先访问 Cache,如果没命中再次访问内存,从内存中取出数据。h × tc+(1-h) × (tc+tm)

    • 无特殊说明全按同步计算

  • 效率 e 与命中率有关

    • e = 访问 Cache 的时间 / 平均访问时间 × 100%


      例题:假设 Cache 的工作速度是主存的5倍,且 Cache 被访问命中概率为 95%,则采用 Cache 后存储器的性能提高了多少?
      设 Cache 速度为 t,内存为 5t,[(0.95×t+0.05×5t)/5t]- 1



3. Cache 的基本结构

技术图片
技术图片

4. Cache 的读写操作

(1)Cache 的读操作
??当 CPU 发出读请求时,如果 Cache 命中,就直接对 Cache 进行读操作,与主存无关;如果 Cache 不命中,则仍需访问主存,并把该块信息一次从主存调入Cache内。若此时Cache已满,则须根据某种替换算法,用这个块替换掉Cache中原来的某块信息。
技术图片

(2)Cache 的写操作
??由于 Cache 中保存的只是主存的部分副本,这些副本与主存中的内容能否保持一致,是 Cache 能否可靠工作的一个关键问题。当 CPU 发出写请求时,如果 Cache 命中,有可能会遇到 Cache 与主存中的内容不一致的问题。处理的方法有:写直达法和写回法。如果写Cache不命中,就直接把信息写入主存,并有两种处理方法:不按写分配法和按写分配法。

  • 写直达法(Write through):写操作时数据写入 Cache 又写入主存
    • 写操作时间就是访问主存的时间,读操作时不涉及对贮存的写操作,更新策略比较容易实现。
  • 写回法(Write back):写操作时只把数据写入 Cache 而不写入主存,当 Cache 数据被替换出去时才写回主存
    • 写操作时间就是访问 Cache 的时间,读操作 Cache 失效发生数据替换时,被替换的块需写回主存,增加了 Cache 的复杂性(简单的说就是我先把数据放到 Cache 中,啥时候 Cache 不要了,再将主存中的数据替换
    • 写回法在 Cache 需要增加修改位(dirty bit)与标记放在一起,不论是写回法还是写直法还需要一个有效位(存在位)与标记并行,来判断访问是否是Cache,也就是是否命中。

5. Cache 的改进(注意有的高校可能会考多级Cache的命中率

  • 增加 Cache 的级数
    • 片载(片内)Cache
    • 片外 Cache
  • 统一缓存和分立缓存
    流水线工作解决结构相关性(结构冒险)————> 把指令与数据分离即可解决
    • 分为指令 Cache 和数据 Cache
    • 主存结构有关
    • 指令执行的控制方式有关(是否流水)

二、Cache - 主存的地址映射

1. 直接映射

??直接映像是指主存中的每一个块只能被放置到Cache中惟一的一个指定位置,若这个位置已有内容,则产生块冲突,原来的块将无条件地被替换出去。直接映像方式是最简单的地址映象方式,成本低,易实现,地址变换速度快,而且不涉及其它两种映像方式中的替换算法问题。但这种方式不够灵活,Cache的块冲突概率最高、空间利用率最低。

  • 可能会发生冲突,导致高速缓存造成浪费
    ??例如增加一个标记位,假如现在有 50 组[编号049]**学生要考试,每组学生10人**[学生编号000499,前两位组号,中间行号,最后一位列号],只有一个房间进行考试,该房间是10×10 座位,行列编号分别从0~9。现随机抽取组号进行考试,不巧抽取123、223、323、423进行考试,在同一座位考试究竟谁来考试??发生冲突。

  • i:第 i 个缓存块,j:第 j 个主存块,C:Cache 的块数;(i=j%C
  • 每个缓存块 i 可以和若干个主存块对应
  • 每个主存块 j 只能和一个缓存块对应
  • 比较器后进行有效位判断,如果标记相同但里面存储内容不同,访问的是主存在 Cache 中没有命中
    技术图片
    技术图片

2. 全相联映像

??全相联映像就是让主存中任何一个块均可以映像装入到Cache中任何一个块的位置上。全相联映像方式比较灵活,Cache的块冲突概率最低、空间利用率最高,但是地址变换速度慢,而且成本高,实现起来比较困难。
技术图片


3. 组相联映射(看教材吧,主存可能不一样

??组相联映像将主存空间按 Cache 大小等分成区后,再将 Cache 空间和主存空间中的每一区都等分成大小相同的组。让主存各区中某组中的任何一块,均可直接映像装入Cache中对应组的任何一块位置上,即组间采取直接映像,而组内采取全相联映像。


下图为:二路组相联
技术图片

标记 组号 Cache 块地址 字块内地址

主存不分组(某一主存块 j 按模 Q 映射到缓存的第 i 组中的任何一块) ![](https://img2020.cnblogs.com/blog/1984119/202005/1984119-20200518233727965-1334659933.png) |标记|组地址|字块内地址| |---|---|---|---|

小结:

直接 某一主存块只能固定映射到某一缓存块
全相联 某一主存块能映射到任一缓存块
组相联 某一主存块只能映射某一缓存组中的人一块

三、替换算法(主要针对组相联)

1. 先进先出(FIFO)

??按调入Cache的先后决定淘汰的顺序,即在需要更新时,将最先进入Cache的块作为被替换的块。这种方法要求为每块做一记录,记下它们进入Cache的先后次序。这种方法容易实现,而且系统开销小。其缺点是可能会把一些需要经常使用的程序块(如循环程序)也作为最早进入Cache的块替换掉。

2. 近期最少使用(LRU)算法(局部性)

??LRU算法是把 CPU 近期最少使用的块作为被替换的块。这种替换方法需要随时记录Cache中各块的使用情况,以便确定哪个块是近期最少使用的块。LRU算法相对合理,但实现起来比较复杂,系统开销较大。通常需要对每一块设置一个称为“年龄计数器”的硬件或软件计数器,用以记录其被使用的情况。


四、试题

1. 假设主存容量为 512 KB,Cache 容量为 4KB,每个子块为16字,诶个字 32 位
(1)Cache 地址有多少位?可容纳多少块?
(2)主存地址有多少位?可容纳多少块?
(3)在直接映射方式下,主存的第几块映射到 Cache 的第5块(假设开始字块为第1块)?
(4)画出直接映射方式下主存地址字段中各段的位数。

解析:地址线的位数与容量有关
512KB = 219 B
4KB = 212 B
16 个字 = 24
32bit/8 = 4B = 22B
答案:
(1)由于地址线的位数与容量有关,故Cache 地址有 12 位;212/(24×22)= 64(块)
(2)19;8K
(3)第 5 个缓存块,j:第 j 个主存块,C:Cache 的块数**;(4=j%64)————> 假设开始字块为第1块
(4)

标记 Cache块地址 块内地址
19-6=7 12-6=6 6

***

2. 假设主存容量为 512K×16位,Cache 容量为 4096×16位,块长为4个16位字,访存地址为字地址
(1)直接映射方式下,设计主存地址格式
(2)全相联映射方式下,设计主存地址格式
(3)二路组相联映射方式下,设计主存地址格式
(4)若主存容量为 512×32位,块长不变,在四路组相联映射方式下,设计主存地址格式

答案:按字编址,每个字2B
(1)直接映射:Cache 地址线(地址线的位数与容量有关)= Cache块地址线 + 块内地址线

标记 Cache块地址 块内地址
19-10=9 12-2=10 2

(2)全相联

标记 Cache块内地址
17 2

(3)二路组相联,Cache块两块一组

标记 Cache块地址 块内地址
17-9=8 210/2=29(二路) 2

(4)块长不变,Cache块地址地址线 + 标记地址线 + 块内地址线 = 主存所需要的地址线

标记 Cache块地址 块内地址
20-8-2=10 210/22=28(四路) 2

注:为什么主存需要20根地址线?
若主存容量为 512×32位,按字编址

  • 512KB = 219 B
  • 32bit/8 = 4B = 22B
  • 主存容量= 219B × 22B / 2B = 220 ————> 20根地址线

第三章 存储器之高速缓冲存储器(超重点)

标签:地址映象   例题   年龄   相等   并行   有关   工作原理   png   现象   

原文地址:https://www.cnblogs.com/BY1314/p/12897403.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!