计算机组成原理第四章学习总结

第四章主存储器

4.1主存

1.主存的性能指标

存储容量和存储速度

2.存储容量的计算

主存可由 RAM和ROM共同组成。

存储容量是指其可以存储的二进制代码的总位数:

存储容量 = 存储单元个数(即2^n n为地址线条数) * 存储字长(数据线条数)

也可用字节总数表示,即 将上边公式后的存储字长除以8

3.存储速度

存储速度是由两部分来表示,存取时间和存取周期。

存取时间

分读出时间和写入时间两种。

存取周期

存储周期是指连续两次独立的存储器操作的最小时间间隔。而且,存储周期还大于存取时间
存储周期比存取时间长是因为,存取时间是指的单纯的读出和写入消耗的时间,而存储周期则不仅包括了存取时间,还包括了”准备时间“(如,等待有效片选的时间,等待数据稳定输出的时间)
#数据开始存取需要两个条件:有效地址和 有效片选

存储带宽

存储带宽,单位时间内存储器可存储的信息量。存储器带宽是以存储器为中心的机器获得信息的传输速度,是该类型计算机提升性能的一个主要瓶颈。

半导体芯片,属于大规模集成电路。译码驱动方式有两种,线选法和重合法

4.2随机存储器

1.静态存储器SRAM(static RAM)

静态存储器是用触发器工作原理储存信息,因此即使信息读出后,它依然保有原状,不需要再生。但断电时,其中的信息会丢失,属于易失性半导体存储器。

2.动态RAM(dynamic RAM)

动态存储器是靠电容存储电荷的原理来寄存信息。而电容会逐渐漏电,所以要想信息长时间保存,需要对其不断刷新。

RAM最少引出线条数 =(数据线 + 地址线)+ 读写控制线(一条) + 片选线(一条)

静态RAM和动态RAM的对比

#1.动态RAM集成度高
#2.动态RAM耗能低,
#3.动态RAM行、列地址按先后顺序输送,减少了芯片引脚,封装尺寸减小。
#4.动态RAM价格便宜
#5.动态RAM因使用动态原件(电容),因此它的速度比静态RAM低
#6.动态RAM,因需要刷新再生,所以需要配置再生电路,也需要消耗一部分功率。通常容量不是特别大的高速缓冲存储器都采用 静态RAM。

3.动态RAM的刷新策略

#1.集中刷新,可以理解为集中一段时间对存储芯片中所有的存储单元刷新一次,可能会产生死区。(死区,即因刷新时,CPU无法与其进行i/o)
#2.分散刷新,可以理解为在每次存取时对存储芯片中的一行存储单元刷新一次,不会导致死区,但会使系统整体性能变慢。
#3.异步刷新,结合集中刷新与分散刷新,将在限定刷新时间内每隔一段时间刷新一行,在限定时间内完成对所有行的全部刷新。异步刷新,既可以缩短“死区”,又可以避免性能下降的特点。

4.存储器容量的扩展

#1.字扩展,指增加存储字的数量(地址线会相应增加)
#2.位扩展,指增加存储字长(数据线会相应增加)
#3.字和位都扩展  扩展的具体方式就是多个存储芯片 通过不同的连接方式达到扩展容量的目的。存储器的容量并非由地址线和数据线的根数决定,但可以通过其根数进行计算。 

5.存储器与CPU的连接

#1.CPU的地址线和数据线一般都多于存储器的。一般CPU的低地址位与 存储器的相连,剩余的留作它用(如存储芯片拓展,片选信号,等)
#2.数据线连接时,如果存储器的根数比CPU数据线的根数少,那就需要拓展其数据线条数使他们相等。
#3.合理选择存储芯片,ROM用于存储系统程序、标准子程序和各类常数。RAM常用于为用户编程而设置的。

4.2.5提高访问存储的措施

1.单体多字系统

  • 单字多体

    采用单体多字的寄存器,每个存取周期读取多个字的代码将其存入寄存器中,寄存器每隔1/n 个周期向CPU发送一个字的代码。这样就提升了存储器的带宽。但如果代码不是连续存放的,或遇到转移指令,或操作数不能连续存放。这种方法就有点鸡肋了。

2.多体并行

  • 多体并行

    多体并行又包括两种模式:高位交叉、低位交叉
    高位交叉:使用高位地址作为体号(注意体与模块不是同一个东西,一个存储模块就是一个存储芯片,一个存储模块,有分成许多个体。每个体里边可以放多个字,所以还有体内存储地址这个名词。),低位地址作为体内地址。将代码程序按体内地址顺序存放在模块中,这个模块存满即转入下一个模块。这种编址方式主要是通过并行工作,其多个体同时启动,同时读出,完全并行工作,来提高访存。如:当一个体正在与CPU交换信息时,其它的体可以与外部设备进行直接存储访问。通过并行工作达到提高访存的目的。

     低位交叉:使用低地址用来表示体号,高位地址用来表示体内地址。该编址方法又称为模M编址(M等于模块数),又因程序连续存放在相邻体中,又被称为交叉存储器。这种方法可以通过不改变每个模块存储周期的情况下提高带宽(带宽,即每秒所能传输的比特数)其实它的原理有点像RAID(就是Linux服务器中的磁盘阵列),通过将一段代码分散且连续的存储在相邻的体中。本来存在一个模块中的东西,现在连续的存储在几个模块中。取出和写入的速度自然就快了。
      低位交叉存储器还有一些要求:低位交叉的存储器模块数为n,存取周期为T,总线传输周期为 t,应满足条件
    

    T = nt。为保证经过nt时间后,再次启动该体时,它的上次存储操作已完成,要求所需模块数应大于等于n。

  • 高位交叉与低位交叉对比

前提:(低位交叉的存储器模块数为n,存取周期为T,总线传输周期为 t,低位交叉存储器和高位交叉存储器的 模的存取周期相同)

对比项 高位交叉 低位交叉
连续读取n个字所需时间 t1=nT t2=T+(n-1)t
并行为多个设备同时提供存取读出 能 不能
对连续代码的读、写所需时间 无优化,和原本所需要时间一致 有优化

.

3.高性能芯片

  • SDRAM(同步DRAM) 系统同步时钟控制读写 CPU无需等待
  • RDRAM 由Rambus 开发 主要解决存储器的带宽问题
  • 带cache的 DRAM

4.2.6.存储器的校验

1.概念

#1.编码最小距离L
#2.检查错误的位数 D (detect)
#3.纠正错误的尾数 C (correct)
L- 1 = D+ C (D >= C)
#汉明码:
L = 3 D+C =2 由于D>=C 所以 D=C=1 
所以汉明码的纠错能力是  1

4.3高速缓冲存储器

1.概述

  1. 为什么用Cache?
    一方面,IO设备向主存的请求级别高于CPU访存,因此出现CPU等待IO设备的情况,造成CPU空等,从而降低了CPU的效率。
    因为CPU的速度平均每年能够提升60%,而组成内存的动态RAM每年只能改进7%,导致CPU和动态RAM之间的速度间隙平均每年增大50%。
    一般CPU从主存中取指令和数据,在一定时间内,只是对主存局部地址区域进行访问。这是由于指令和数据在主存中是连续存放的,并且有些指令和数据会被多次调用(如子程序,循环,常量等)。即,指令和数据在主存中的分布是相对簇聚的,使得CPU在执行程序时,访存具有相对的局部性。cache采用高速的SRAM(静态RAM)制作,价格比较贵,好在缓存需求的存储容量比较小,正好解决了速度和成本的矛盾。

  2. Cache的工作原理
    将主存与缓存都分成若干块,每块内有包含若干字,使它们的块的大小相同(即,块内的字数相等)。当CPU要向主存取数据时,先判断cache中是否含有该数据,如果有,cache就直接将数据发送给CPU,(此时即为“命中”)。如果cache中没有(此时即为“未命中”)则
    查看此时cache块是否已填满,如果没有填满,那就将CPU请求的数据从主存中转入CPU并替换给cache。如果cache已被填满,则要根据相应替换策略替换。
    相关计算:
    命中率 h, 总命中次数 Nc ,Nm 访问主存总次数,则命中率 h:
    h = Nc/(Nc+Nm)
    设tc为命中时的Cache访问时间,tm 为未命中时的主存访问时间,1-h表示未命中率,则Cache-主存系统的平均时间ta为:
    ta = htc + (1-h)tm
    访问效率e:
    e = tc / tA X 100% = tc /[htc+(1-h)tm]
    在一定程度上Cache的 容量与块长是影响Cache的效率的重要因素,一般而言,Cache容量越大,其CPU的命中率越高。当然容量也没必要太大,而且Cache容量达到一定值时,命中率已不因容量的增大而有明显的提升。
    块长与命中率之间的关系
    当块长由小到大增长时,起初会因局部性原理使命中率有所提高。由局部性原理可知,在已被访问的字的附近,近期也可能被访问,因此增大块长,可将更多的可能被访问的字装入块中。但倘若继续增大块长,命中率可能会下降,这是因为所装入缓存的有用数据反而少于被替换掉的有用数据。
    由于块长的增大,导致缓存中块数的减少,而新装入的块要覆盖旧的块,可能会出现数据刚被装入就被覆盖的情况,命中率反而降低。

  3. Cache的基本结构
    (1)Cache 存储体
    (2)地址映射变换机构
    CPU访问Cache时,地址映射变换机构是将CPU送来的主存地址转换为Cache地址。
    (3)替换机构
    当cache内容已满时,无法接受来自主存的信息时,就由Cache内的替换机构一定的替换算法来确定从cache中移出哪个块返回主存,再将哪个块调入cache。
    (4)Cache的读写操作

  4. Cache的读写操作

  5. Cache的改进
    #有两方面的改进,采用多个Cache,一是增加Cache的级数,二是将统一的Cache变成分立的Cache(数据Cache,指令 Cache)。
    (1)单一缓存和两级缓存
    单一缓存,是值在CPU与主存之间只设一个缓存。两级缓存,分别由片内缓存 和片外缓存组成。片内缓存,即缓存制作在CPU内。不必占用芯片外的总线(系统总线),而且片内缓存与CPU之间的数据通路很短,大大提高了存取速度。但有个问题就是容量比较小。
    两级缓存,即片内缓存和片外缓存组成,在有片内缓存的基础上,有添加了一层片外缓存。

2.cache-主存的地址映射(重点)

  • 直接映射
    i 为缓存块号,j 为主存块号,C 为缓存块数。 i = j % C
    直接映射的缺点就是不够灵活,每个主存块只能固定的对应一个缓存块,也就是说这种方式下可能有很多缓存块处于空闲状态却无法使用。
    计算机组成原理第四章学习总结_第1张图片
  • 全相连映射
    计算机组成原理第四章学习总结_第2张图片
  • 组相联映射
    组相连映射是直接映射 和全相连映射的结合,这种映射方式将Cache分为Q组,每组具有R块。并有类似直接映射中的关系。
    计算机组成原理第四章学习总结_第3张图片
    组相连映射方式相比直接映射,这种方式下,一个主存块可以对应一组的缓存块。这样就避免了一个主存块只对应一个缓存块,而该缓存块又已被其它主存块占用时,明明有空闲的缓存块却无法使用的情况。
    组相连映射方式也结合了全相连的映射方式,可以理解为,一个组中的任意一块主存块可以对应一个组中的任何一块缓存块。
    #举例说明组相联映射:
    Cache分为Q组,每组具有R块
    i为缓存的组号,j为主存的块号,此时主存与缓存的映射关系就是 i = j mod Q
    即某一主存块j按模Q映射到缓存中的第i组内的任一块。主存第j块映射到缓存第i组任一块,一一对应,属于直接映射。另一方面,主存的第j块可以映射到缓存第i组的任意一块,这又是全相连映射。
    所以说这是直接映射和全相连映射的折中。

3.替换算法、

  1. 先进先出(FIFO)算法(无效)
  2. 近期最少使用(Least Recently Used,LRU)算法
  3. 随机法(无效)

你可能感兴趣的:(计算机组成原理)