Bonky
Neither believe nor reject anything, because any other person has rejected or believed it. Heaven has given you a mind for judging truth and error, Use it.
By Thomas Jefferson

计算机组成 – 存储器

概念

分类

  • 根据介质分类:半导体,磁表面,光盘
  • 根据存取方式分类:RAM,ROM(硬盘,U盘,光盘),串行访问存储器(如磁带,磁盘)
  • 根据作用分类:
    • 辅存,用来存放当前暂时不用的程序和数据,以及一些需要永久性保存的信息,不能与 CPU 直接交换信息
    • 主存,用来存放计算机运行期间所需的大量程序和数据, CPU 可以直接随机地对其进行访问,也可以和Cache以及辅存交换数据 。
    • 高速缓冲存储器:简称 Cache,位于主存和 CPU 之间,用来存放正在执行的程序段和数据,以便 CPU 能高速地使用它们 。

性能指标

  • 存储容量:存储容量=存储字数×字长 存储字数表示存储器的地址空间大小,字长表示一次存取操作的数据量。

  • 单位成本:每位价格=总成本/总容量

  • 存储速度:数据传输率=数据的宽度/存储周期

    • 存取时间 是指从启动一次存储器操作到完成该操作所经历的时间 , 分为读出时间和写入时间。
    • 存取周期 存取周期又称为读写周期或访问周期。它是指存储器进行一次完整的读写操作所需的全部时间,即连续两次独立地访问存储器操作(读或写操作)之间所需的最小时间间隔。
    • 主存带宽 主存带宽又称数据传输率,表示每秒从主存进出信息的最大数量。

    屏幕快照 2019-10-25 上午9.10.20

层次化结构

image-20191203152252441

主存储器

基本组成

首先 MAR 中的地址通过译码器找到存储体对应的存储单元,然后如果是读数据的话,控制电路控制读写电路读取响应单元然后再送到 MDR 中,如果是写的话则是把 MDR 中的数据送到存储单元中。

image-20191203152333201

半导体存储芯片

image-20191203153228005

片选线用来选择存储芯片,因为。

译码驱动方式

这一步的目的是把地址线送来的地址信号转换成对应存储单元的选择信号。半导体存储芯片的译码驱动方式分为两种:线选法和重合法。

线选法

注意一点,假设矩阵的大小为 M\times N。 对于行,因为有译码器,所以需要的线为\left\lceil\log _{2} M\right\rceil,然后读写电路一次将这一行读出来,所以需要 读写电路长度为 N

image-20191203154325164

重合法:

线选法是选中矩阵的一行(在计算机中称为选中一个字), 而重合法比线选法更细, 它可以选中矩阵的某一个元素。

image-20191203203512781

RAM

静态 RAM (SRAM)

image-20191203204635803

注意读取只有一个放大器,而写有两个是因为写的时候需要同时写入原端和非端。

读操作

  • 行选:T5,T6 开

  • 列选:T7,T8 开

读选择有效,然后执行读操作:
\mathrm{V}_{\mathrm{A}} \longrightarrow \mathrm{T}_{6} \longrightarrow \mathrm{T}_{8} \longrightarrow 读取 \longrightarrow D_{OUT}
写操作

同理,行选列选后,然后写选择有效,两个放大器执行写操作。

例子

image-20191203213451174

如图所示,我们只有十个地址总线,一个 1K 个单元,而存储容量为 64×64 ,一个 1K * 4 位,所以我们需要一次读四个来解决这个问题。把64个列分为四组,每次读取每一组的第 n 个元素(由列地址译码决定),写的时候也一样,一次写四个位。

屏幕快照 2019-12-03 下午9.27.23

动态 RAM ( DRAM )

三管动态 RAM:(其中 C_g 代表 0 和 1)

image-20191203215049720

读取操作如下:(读出与原存信息相反)

  • 一开始 VDD 预充电,所以读数据线为 1,如果读选择线选中,T2导通
  • 假设一开始 C_g 为 0,T1 不导通,读出来的是 1
  • 假设一开始 C_g 为 1,T1 导通,读数据线相当于接地,读出来的是 0

写入操作如下:(写入信息与原存信息相同)

  • 选择写,T3导通,写数据线等于 C_g

单管动态 RAM:

image-20191203215442429

读出时数据线有电流为 1,没电流为0。

动态 RAM 刷新

因为 DRAM 采用电容式存储 ,因为电容中存储的电荷不能永久保留 ,随着时间的流逝会消失,一般为 2ms。所以本存储单元在每 2ms 内必须要刷新一次,否则就会使电荷流失,进而导致存储信息出错。

注意下,所有的刷新都是对行进行刷新

  • 集中刷新:把刷新操作集中到一段时间内集中进行。如下图,前面3872个周期都在进行读写的操作,后面128个周期全部用来刷新。

image-20191203224416460

  • 分散刷新:将刷新操作分散进行,周期性地进行。(每读写一次,然后刷新一行,间替进行),但是其实 DRAM 不需要这么多刷新,造成了浪费。

image-20191203224946691

  • 异步刷新:是一个折中方案,既不会像集中刷新那么大费周幸,产生集中的固定时间, 也不会像分散刷新那么频繁地刷新,而是有计划地刷新,时间分配十分合理。

image-20191203225008660

SRAM 和 DRAM

DRAM(主存) SRAM(缓存)
存储原理 电容 触发器
集成度
芯片引脚
功耗
价格
速度
刷新

ROM

  • 掩膜型只读存储器 (MROM):MROM 由芯片制造商在制造时写入内容,以后只能读而不能写入,其基本存储原理是选择线交叉处是否有 MOS 管决定。
  • 可编程只读存储器 (PROM):使用熔丝存储数据,只能写入一次。

image-20191203230025670

  • 可擦除可编程只读存储器 (EPROM): 使用悬浮栅存储数据。能多次修改 ROM 的内容。 EPROM 使用高压写入数据 , 当需要修改时,可使用紫外线将其全部内容擦除(不能局部擦除),但是使用紫外线是极其不方便的。
  • 电可擦除可编程只读存储器 (EEPROM):EEPROM 其实和 EPROM 的运作原理一样,不但写入数据也是使用高压,而且擦除数据也使用了高压(既可以局部擦除,又可以全部擦除)。
  • 快擦除读写存储器 (Flash Memory): 具有一定的 RAM 的功能

存储器与 CPU 的连接

位扩展

用2片1K × 4位存储芯片组成1K × 8位的存储器(同一个地址选择两片 2114)

image-20191203230812649

字扩展

用2片1K × 8位存储芯片组成2K × 8位的存储器。我们利用多余的一条地址线 A_10 用来选片。

image-20191203230951348

字、位扩展

用8片1K × 4位存储芯片组成4K × 8位的存储器。其实可以理解为每个组两个进行位扩展,然后这样的组一共四组,使用两条地址线进行片选,选要使用的是哪个组。

image-20191203231335813

存储器的校验

编码的纠错 、检错能力与编码的最小距离(或称作最小码距,是整个可行集合里面最小的码距,码距是两个编码的差距位的总数)关系如下:

汉明码是具有一位纠错能力的编码(L=3,D=1,可以推得 C=1 )

在传输过程中,最最最可能的是只错一位数据,所以,汉明码默认一串数据只会错一位

汉明码的一个分组如下,我们通过判断组的错误可以判断出是哪个元素出错,从而可以纠错。

屏幕快照 2019-12-04 上午10.31.31

汉明码的分组:

规定来了,凡是位置符合XXX1,归到P1;凡是位置符合XX1X,归到P2;以此类推。

如:XX1X101X011,一共11位。其中标X的是校验码的位置(2^n^),我们暂时不知道它的值是多少。

位置在1,3,5,7,9,11的数据进到P1组。(你转换一下这些位置的二进制,就知道他们的位置符合XXX1),位置在2,3,6,7,10,11的数据进到P2组,位置在4,5,6,7的数据进到P3组,位置在8,9,10,11的数据进到P4组。

汉明码的纠错机制:

汉明码先会检查那些组有错误,有错误则标记为1,否则标记为0。如检查到 P1,P2,P3有错误,可以得到标记后的字符串为 0111,即位置为7的元素有问题。这样的好处就是比起求交集,这样的会快很多,尤其是当比特串比较长的时候。

提高访存速度的措施

主要有三种方法:采用高速器件,采用层次结构 Cache –主存,调整主存结构

下面来讲下调整主存结构的方法:

调整主存结构

  • 单字多字系统:缺点是每次存取多个,有时候会造成了浪费

image-20191204110226012

  • 多体并行系统 – 高位交叉:缺点是因为程序都是在内存中顺序存储的,可能导致某一个单元特别的繁忙,而其他单元其实很闲

image-20191204110607852

多体并行系统 – 低位交叉:优点是不会导致一个单元不会频繁访问,可以以流水的方式进行存取。

image-20191204110737706设四体低位交叉存储器,存取周期为T,总线传输周期为 τ,为实现流水线方式存取,应满足 T = 4τ 。连续读取 4 个字所需的时间为 T+(4-1) τ

image-20191204111108289

高性能存储芯片

  • SDRAM (同步 DRAM):在系统时钟的控制下进行读出和写入,CPU 无须等待
  • RDRAM:由 Rambus 开发,主要解决存储器带宽问题
  • 带 Cache 的 DRAM在 DRAM 的芯片内集成了一个由 SRAM 组成的Cache ,有利于猝发式读取(给出需读取位置的首地址就能连续读至完成)

Cache

避免 CPU 空等的现象,相当于做一个中转站的作用。打个比方:比如有个地方只通汽车,如果我们只使用汽车去运输的话,那肯定是很慢的。如果我们使用飞机先运输的一个指定的比较近的位置,传输的速度会大大增加(可能比方不对)

工作原理

主存和缓存都是按块存储,块的大小相同。Cache 的块号和主存的块号有对应关系。

image-20191204112040495

命中与未命中

  • 命中:主存块已经调入了缓存,主存块与缓存块建立了对应关系。因此 CPU 就可以直接从 Cache 来访问数据。

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

  • 命中率:CPU 欲访问的信息在 Cache 中的比率。命中率与 Cache 的容量与块长有关。

    image-20191204112602209

  • 效率:e=\frac{访问缓存时间}{平均访问时间}\times 100 \%=\frac{t_{c}}{h \times t_{c}+(1-h) \times t_{m}} \times 100 \%

读写操作

读的话就比较简单:

image-20191204161408627

写的话需要考虑一致性:

  • 写直达法:写操作时数据既写入Cache又写入主存。
  • 写回法:写操作时只把数据写入 Cache 而不写入主存,当 Cache 数据被替换出去时才写回主存。

改进

  • 增加 Cache 的级数
  • 统一缓存和分立缓存(将指令和数据的 Cache 分开,一般来说一级 Cache 的指令和数据一般分开存放 ,而二级 Cache 的指令和数据是放在一起的。)

地址映射方式

直接映射

直接利用取模来确定是否在 Cache 中。
\text { i=jmodC }
其中,i 为 Cache 中的块号, j 为主存中的块号,C 为 Cache 的块数。

image-20191204162954378

首先, CPU 访存指令指出一个内存地址,该内存地址包含 tag、块号、字等字段。

然后,根据内存地址中的块号 c 找到 Cache 中对应的块号,找到 Cache 中对应的块号之后将该块中的标记和内存地址中的 t 位 tag 标记送入比较器进行比较。

若相符且有效位为1(有效位排除无效的 Cache),即表示命中,然后用内存地址的低 b 位在 Cache 中读取所儒要的字即可。

若不符合或有效位为0,则需要从主存中读取所需要的块来替换 Cache 中旧的块,同时将信息送往 CPU, 并修改 Cache 的标记为1。

image-20191204164103531

优点:比较简单

缺点:

  • 因为每个主存块只能固定地对应某个 Cache 块,即使 Cache 内还空着许多位置也不能占用,所以导致 Cache 的存储空间得不到充分利用
  • 冲突几率高,模后结果如果相同的内存,需要不断的进行交换。

适合比较大的 Cache。

全相联映射

即利用多余的信息进行标记。主存有 256 块, Cache 需要 8 位 (2^8^=256) 来作为标记位,这样才能识别每一个主存块。

而直接映射只需要识别每个组号即可,如果主存大小是 Cache 的 32 倍, Cache 需要 5 位来作为标记位,这样才能识别该块属于哪一组。

image-20191204164807218

首先, CPU 访存指令指出一个内存地址,该内存地址包含块号、字等字段。

为了加快检索速度, Cache 所有行的标记位和内存地址的块号一同送入比较 器中比较,如果块号命中,则直接从 Cache 命中的块号中读取所需的字;如果块号不命中, 则按内存地址读取这个字,同时把内存块读入 Cache 行中。

image-20191204165455727

优点:

  • 由于全相联映射允许主存的每一字块映射到 Cache 中的任何一个字块,因此 Cache 的命中率可以提高。
  • 通俗地说, 全相联映射就是“有位置就可以坐",减小了块的冲突率,进而提高了 Cache 的利用率 。

缺点 : tag 的位数增加了,访问 Cache 时主存字块标记需要和 Cache 的全部“标记”进行 比较, 才能判断所访问主存地址的内容是否已在 Cache 内。

适合比较小的 Cache。

组相联映射

其实和直接映射差不多,只不过 Cache 是分了组的,一个组室友多个块所构成的,相同模值的在同一个组内可以随便放,然后同一个组内就有点像全相联映射。

当组相联只有一组时,此时组相联映射就等同于全相联映射。当每组只有一块时,此时组相联映射就等同于直接映射。

标记长度的计算等于主存块数除以组号。

image-20191204165643877

首先, CPU 访存指令指出一个内存地址,该内存地址包含 tag 、 组号、字等字段。

然后,通过组号找到 Cache 中对应的组,然后将 Cache 该组中每一块的 tag 和内存地址的 tag 送入比较器中进行比较。

如果 Cache 中有某块的 tag 与之符合 ,则表示 Cache 命中, 通过内存地址的低 b 位确定需要该块中的哪一个字 ,然后进行存取操作。如果 Cache 中每行的 tag 都与之不相符,则不命中, 需要去内存取需要的字,并将内存中该字所在的块送入 Cache 中。

实质上,找到组的过程和直接相联映射一样,在组内匹配的过程和全相连映射方式相同。

image-20191204170052536

替换算法

  • 先进先出 ( FIFO )算法

  • 近期最少使用( LRU )算法,算法的平均命中率比 FIFO 算法高。

辅助存储器

辅助存储器不直接与 CPU 交换信息。

硬磁盘存储器

记录方式

RZ -> 归零制,NRZ -> 不归零制,NRZ1 -> 见 1 翻转的不归零制。

image-20191204172449783

技术指标

  • 存储密度(记录密度):单位长度或面积的磁层表面所能存储的二进制信息 量。注意磁盘的所有磁道记录的信息一定是相等的,并不是圆越大, 记录的信息就越多,所以每个磁道的位密度是不一样的。(每一个磁道都有多个扇区)
    • 道密度:沿磁盘半径方向上单位长度的磁道数目。
    • 道距:相邻两条磁道中心线之间的距离。
    • 线密度:单位长度磁道所能记录的二进制信息位数。
  • 存储容量:计算公式如右:\mathrm{C}=\mathrm{n} \times \mathrm{k} \times \mathrm{s} ,其中 C 为存储总容量,n 为存放信息的盘面数,k 为每个盘面的磁道数,s 为每条磁道上记录的二进制代码数。
  • 旋转速度:恒速运转
  • 寻址时间:平均寻址时间=(最大寻道时间+最小寻道时间)/2+(最大等待时间+最小等待时间)/2
  • 数据传输率:数据传输率指单位时间内磁表面存储器向主机传输数据的位数或字节数,它与记录密度和磁盘转动的速度有关,D_r=D•V ,其中 D 是记录密度,V 是转速。
  • 误码率:衡量磁表面存储器出错概率。

硬磁盘存储器

类型按照有固定磁头和移动磁,可换盘和固定盘来分类。

image-20191204174831621

磁盘控制器包括控制逻辑与时序、数据并-串变换电路和数据串-并变换电路。

磁盘驱动器包括写入电路与读出电路、读/写转换开关、读/写磁头与磁头定位伺服系统等。

软磁盘存储器

image-20191204175136866

光盘存储器

  • 第一代光存储技术 – 采用非磁性介质不可擦写
  • 第二代光存储技术 – 采用磁性介质可擦写(激光照射在磁性介质上进行读写)
Share

You may also like...

发表评论

电子邮件地址不会被公开。 必填项已用*标注