存储器学习笔记(cache、寄存器、内存、硬盘)

储存单位换算

  • bit(比特)是计算机中表示数据的最小单位,经常听到的16位机、32位机,就是指比特
  • Byte(字节)是计算机处理数据的单位,计算机以字节为单位处理数据
  • 1Byte = 8 bit
  • KB、MB、GB中的B指的就是Byte,字节是数据传输的基本单位,为8位2进制数,00000000~ 11111111换算成十位数就是0~255
  • 1TB=1024GB
    1GB=1024MB
    1MB=1024KB
    1KB=1024Byte

存储器的分级

存储器是分层次的,离CPU越近 ,速度越快,每字节的成本也越高,同时容量也因此越小。寄存器离CPU最近,因此速度最快,成本最高,所以个数和容量有限。其次是高速缓存(缓存也是分级,有L1,L2等缓存),再次是主存(普通内存),再次是本地磁盘。

在这里插入图片描述

  • 寄存器:中央处理器内的组成部份。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和位址。在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器(PC)。在中央处理器的算术及逻辑部件中,包含的寄存器有累加器(ACC)
  • cache:即高速缓冲存储器,由静态存储芯片(SRAM)组成,是位于CPU与主内存间的一种容量较小但速度很高的存储器。由于CPU的速度远高于主内存,CPU直接从内存中存取数据要等待一定时间周期,Cache中保存着CPU刚用过或循环使用的一部分数据,当CPU再次使用该部分数据时可从Cache中直接调用,这样就减少了CPU的等待时间,提高了系统的效率。Cache又分为一级Cache(L1 Cache)二级Cache(L2 Cache),L1 Cache集成在CPU内部,L2 Cache早期一般是焊在主板上,现在也都集成在CPU内部,常见的容量有256KB或512KB L2 Cache。
  • 内存:内存包含的范围非常广,一般分为只读存储器(ROM)、随机存储器(RAM)和高速缓存存储器(cache)

在这里插入图片描述

  • 存储器分级,利用的是局部性原理。我们可以以经典的阅读书籍为例。我在读的书,捧在手里(寄存器),我最近频繁阅读的书,放在书桌上(缓存),随时取来读。当然书桌上只能放有限几本书。我更多的书在书架上(内存)。如果书架上没有的书,就去图书馆(磁盘)。我要读的书如果手里没有,那么去书桌上找,如果书桌上没有,去书架上找,如果书架上没有去图书馆去找。可以对应寄存器没有,则从缓存中取,缓存中没有,则从内存中取到缓存,如果内存中没有,则先从磁盘读入内存,再读入缓存,再读入寄存器。

catch的结构和工作原理

结构

  • 首先,要想理解cache,先理解内存。内存的简单表示如下图,内存里面的内容的查找是根据地址来进行的,也就是说内存包含两点①地址②内存的内容(存的数据),根据地址来找数据。
    内存的结构
  • 上图的0000~ 0008是地址,A~I是存的数据,cpu根据地址去寻找数据。图中的一个字母代表一个字节的数据。
  • 我们都清楚,cache中的数据就是主存中数据的子集,主存中的数据对于cache中的数据映射可以分为三种:
    • 直接映射的cache
    • 组相联的cache
    • 全相联的cache

三种映射方式

直接映射

  • 一个内存地址能被映射到的cache line是固定的。好比每个人的停车位都是固定分配好的,可以直接找到
  • 优点:硬件简单,成本低,地址变换速度快,而且不涉及替换算法问题
  • 缺点:因为人多车位少,很可能几个人争用同一个车位,导致Cache淘汰换出频繁,需要频繁的从主存读取数据到Cache,Cache的存储空间得不到充分利用,这个代价也较高。

在这里插入图片描述

全相联映射

  • 主存中的一个地址可被映射进任意cache line
  • 优点:全相联映射方式比较灵活,主存的各块可以映射到Cache的任一块中,Cache的利用率高,块冲突概率低,只要淘汰Cache中的某一块,即可调入主存的任一块。
  • 缺点:当寻找一个地址是否已经被cache时,需要遍历每一个cache line来寻找,这个代价很高。就像停车位可以大家随便停一样,停的时候简单,找车的时候需要一个一个停车位的找了。并且由于cache比较电路的设计和实现比较困难,这种方式只适合小容量的cache采用

在这里插入图片描述

组相联映射

  • 组相联映射实际上是直接映射和全相联映射的折中方案,适度兼顾二者的优点,尽量避免二者的缺点,因而得到普遍采用

在这里插入图片描述

  • 主存和cache都分组,主存一个组的中的分块数cache中的分组数相同,组间采用直接映射,组内采用全相联映射。也就是说,将Cache分成2u组,每组包含2v块,主存块存放到哪个组是固定的,至于存到该组哪一块则是灵活的。即主存的某块只能映射到Cache的特定组中的任意一块。主存的某块b与Cache的组k之间满足以下关系:k=b%(2^u)
  • 例如,Cache分为8组(u=3),每组2块(v=1),主存分为128个区,每个区16块。
    在这里插入图片描述
  • 主存中的各块与Cache的组号之间有固定的映射关系,但可自由映射到对应Cache组中的任何一块。例如:
    *主存的第0块、第2u块、第2×(2u)块、…第255x(2u)即255x8=2040块等256块均映射于Cache的第0组(组间直接映射),但可映射到其中的第0块或第1块(组内全相联映射)
    *主存的第1块、第2u+1块、第(2u)+1块、…第255x(2u+1)即2041块等均映射于Cache的第2组,但可映射到Cache第2组中的任意一块
    *主存的第2块、第2u+2块、第(2u)x2+2块、…第2042块等均映射于Cache的第3组,但可映射到Cache第3组中的任意一块;
  • 常采用的组相联结构Cache,每组内有2、4、8、16块,称为2路、4路、8路、16路组相联Cache。以上为2路组相联Cache。

总结

在这里插入图片描述

cache的基本结构(cache line)

  • cache的结构其实和内存的结构类似,也包含地址和内容
  • cache的内容除了存的数据(data)之外,还包含存的数据的物理内存的地址信息(tag),因为CPU发出的寻址信息都是针对物理内存发出的,所以cache中除了要保存数据信息之外,还要保存数据对应的地址,这样才能在cache中根据物理内存的地址信息查找物理内存中对应的数据。(当然为了加快寻找速度,cache中一般还包含一个有效位(valid),用来标记这个cache line是否保存着有效的数据)。
  • 一个tag和它对应的数据组成的一行称为一个cache line。如下图所示,下表中的一行就是一个cache line。

在这里插入图片描述

  • 知道了cache的结构之后,如何在cache中去寻找对应的数据呢?简单起见,我们先选择直接映射的cache组成方式进行下文的分析。
  • 首先对于一段物理内存(block),该物理内存上的每个字节的地址划分为以下几段:
    在这里插入图片描述
  • 这样的话物理内存中的数据到cache的映射关系如下图所示:
    在这里插入图片描述
  • 上图映射的原则就是:
    *根据物理地址的中间三位(index字段)来定位当前数据应该在cache的哪一行
    *把物理地址的tag字段和该地址对应的内容放入对应的cache line的tag字段和data字段
    *把相应的valid位置1
    *在之后进行cache寻找的时候就可以根据cache line的tag字段来辨认当前line中的数据是数据哪个block的
  • 上面的分析时针对直接映射的cache进行的,对于组相联或者全相联的cache的分析与之类似。
  • 如果是组相连的cache,每个组(set)里面包含多个行(line),通过内存地址的index字段来寻址组,确定组之后再根据tag来确定是否命中
  • 对于全相连的cache,就不需要index字段了,因为全相连的cache相当于只有一个组的组相连cache

注:为了叙述的简单性,省略了内存地址通过TLB的的虚实转换部分,由cache的工作原理可知,内存地址的Tag部分其实是需要先经过TLB的转化才能够去和cache line的tag部分去进行匹配的。

  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值