计算机组成原理——存储系统

一 存储器概述

1 分类

按作用分:主存储器(内存);辅助存储器(外存);高速缓冲存储器(cache)

按介质分:磁表面存储器(磁盘,磁带);磁芯存储器;半导体存储器(MOS型;双极型);光存储器(光盘)

按存取方式分:随机存储器(RAM),只读存储器(ROM)都是随机存取;串行访问存储器(顺序存取——磁带;直接存取——磁盘,光盘)

按信息的可保存性分:断电后信息消失——易失性存储器(RAM);断电后信息仍保持——非易失性存储器(ROM,磁表面,光存储器);破坏性读出——再生操作(导致恢复时间),非破坏性读出

2 存储器的性能指标

存储容量:存储字数*字长

存储速度:数据传输率/存取周期

存取时间(Ta):读出时间和写入时间,启动一次存储器操作到完成该操作所经历的时间

存取周期(Tm):一次完整的读写操作所需的时间

主存带宽(Bm):数据传输率,每秒从主存进出信息的最大数量,单位为字/秒,字节/秒,位/秒

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a0NCE5dl-1685547904771)(C:\Users\16348\AppData\Roaming\Typora\typora-user-images\image-20230530194705403.png)]

3 多级层次的存储系统

产生原因:价格成本,各级之间速度不匹配,容量大小

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-S1T0RphW-1685547904773)(C:\Users\16348\AppData\Roaming\Typora\typora-user-images\image-20230530195430851.png)]

主存与cache之间的数据调动由硬件完成,完全透明;主存与外存的数据调动由硬件和操作系统完成,对应用程序员透明

随着发展产生了虚拟存储系统,编程时可用地址远大于主存空间;上级的内容是下级的副本

二 主存储器

1 SRAM芯片和DRAM芯片

主存储器——DRAM;cache——SRAM

一个二进制位的物理器件——存储元

地址码相同的多个存储元——存储单元

若干个存储单元的集合——存储体

1.1 SRAM的原理

静态随机存储器SRAM,存储元用双稳态触发器(六晶体管MOS),非破坏性读出,价格贵

1.2 DRAM的原理

动态随机存储器DRAM用存储元电路中的栅极电容的电荷存储信息,一个存储元一个晶体管

为避免电容电荷的消失,需要刷新,一般刷新周期是2ms

(1)集中刷新

一个周期内一个固定时间(死时间),读写不受刷新影响,但会停止访问存储器

(2)分散刷新

把刷新分散到各个工作周期,没有死区,但会加长存取周期,降低速度

(3)异步刷新

两种方式的结合,将刷新周期除以行数,得到两次刷新操作之间的时间间隔t,每隔t产生一次刷新请求,没有死时间,又提高了效率

DRAM的刷新对CPU透明,刷新单位是行,刷新操作类似读,所有芯片同时被刷新

1.3 DRAM芯片的读写周期

C A S ‾ \overline{CAS} CAS 列选通信号

R A S ‾ \overline{RAS} RAS 行选通信号

W E ‾ \overline{WE} WE 读写控制信号

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pIz99t7w-1685547904773)(C:\Users\16348\AppData\Roaming\Typora\typora-user-images\image-20230530204340004.png)]

DRAM的地址复用技术,行地址和列地址用过相同的引脚先后两次输入,地址引脚数可减少一半,现在SDRAM更常用

1.4 存储器芯片的内部结构

(1)存储体(存储矩阵)

由行选择线X和列选择线Y来选择访问单元,相同行,列上的位同时被读写

(2)地址译码器

将地址转换成高电平,驱动相应的读写电路

(3)I/O控制电路

控制被选中的单元的读写

(4)片选控制信号

多个芯片,选中访问字所在的芯片

(5)读写控制信号

根据CPU给出的命令,控制被选中单元读或写

2 只读存储器ROM

2.1 ROM的特点

结构简单,位密度比可读写存储器高;非易失性,可靠性高

2.2 ROM的类型

(1)掩模式只读存储器(MROM)

厂家生产时直接写入内容,无法更改

(2)一次可编程(PROM)

允许用户写入一次,无法更改

(3)可擦除可编程(EPROM)

编程次数有限,写入时间长,不能取代RAM

(4)Flash存储器

长期保存信息,在线进行快速重写

(5)固态硬盘(SSD)

闪存芯片,快速擦除重写,读写速度快,低功耗,价格高

3 多模块存储器

是一种空间并行技术,提高存储器的吞吐率

3.1 单体多字存储器

只有一个存储体,每个存储单元m个字,总线宽度m个字,一次并行读出m个字,地址顺序排列并处于同一存储单元

指令和数据连续存放,遇到转移指令或操作数不能连续存放,效率提升不明显

3.2 多体并行存储器

多体模块组成,每个模块容量相同,有独立的读写电路,MAR和数据寄存器,既能并行又能交叉工作

(1)高位交叉编址(顺序方式)

高位表示体号,低位表示体内地址

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xTa7TrV5-1685547904774)(C:/Users/16348/AppData/Roaming/Typora/typora-user-images/image-20230530211142881.png)]

逻辑上还是顺序访问,各个模块不能并行访问,不能提高吞吐率

(2)低位交叉编址(交叉方式)

低位为体号,高位为体内地址

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UmIct7uH-1685547904774)(C:/Users/16348/AppData/Roaming/Typora/typora-user-images/image-20230530211507255.png)]

在不改变存取周期的前提下,采用流水线的方式并行存取,提高了存储器的带宽

设模块字长等于数据总线宽度,存取一个字的周期为T,总线传送周期为r,流水线存取,交叉存取度m=T/r

模块数大于等于m

r时间后启动下一模块,大于等于m确保模块经过m*r时间后存取操作已经完成,连续存取m个字的所需时间为

t1=T+(m-1)r

顺序存取m个字的时间为t2=mT,带宽大大提升

三 主存储器与CPU的连接

1 连接原理

数据总线的位数与工作频率的乘积正比于数据传输率

地址总线的位数决定可寻址的最大内存空间

控制总线(读\写)

2 主存容量的扩展

片选线 C S ‾ \overline{CS} CS C E ‾ \overline{CE} CE表示低电平有效,CS或CE表示高电平有效

W E ‾ \overline{WE} WE W R ‾ \overline{WR} WR低电平表示写,高电平表示读,也可以分开为 W E ‾ \overline{WE} WE O E ‾ \overline{OE} OE两根读写线

2.1 位扩展法

CPU的数据线数和存储芯片的数据位数不一定相等,为充分利用数据线数,对存储芯片扩位

仅采用位扩展时各个芯片的连接地址线的方式相同,连接的CPU数据线不同,某一时刻选中所有芯片,片选信号 C S ‾ \overline{CS} CS要连接所有芯片

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nih5uWIN-1685547904775)(C:/Users/16348/AppData/Roaming/Typora/typora-user-images/image-20230530220848196.png)]

2.2 字扩展法

增加存储器中字的数量,位数不变;将芯片的地址线,数据线,读写控制线相应并联,片选信号来区分各个芯片的地址范围

仅采用字扩展,数据线地址线的连接方式相同,但某一时刻只需要选中部分芯片,通过片选信号 C S ‾ \overline{CS} CS或者译码器设计连接

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xO2UsE79-1685547904776)(C:/Users/16348/AppData/Roaming/Typora/typora-user-images/image-20230530221718925.png)]

两个芯片地址分别是01xxxxx 10xxxxx;这是线选法,顾名思义,通过不同的线路的电平来判断选择哪个芯片,但是n个芯片就需要n个线路,电路简单,地址空间不连续,且不能充分利用存储器空间,造成地址资源的浪费

优化后:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ywEsmOlk-1685547904776)(C:/Users/16348/AppData/Roaming/Typora/typora-user-images/image-20230530221946235.png)]

通过译码器可以减少线路来表示更多的芯片,如图,如果电平是1,则选择第一块芯片,是0则选择第二块

三个地址线路就可以表示8块芯片,电路复杂,地址空间可连续

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YjXdayPs-1685547904777)(C:/Users/16348/AppData/Roaming/Typora/typora-user-images/image-20230530222521190.png)]

CPU可使用译码器的使能端控制片选信号的生效时间;地址信号稳定后发出存储器请求信号

2.3 字位同时扩展法

即同时使用以上两种方法,字位同时扩展,地址线连接方式相同,数据线连接不同,且通过片选信号或者译码器来选择不同组的芯片。

四 外部存储器

1 磁盘存储器

容量大价格低,重复使用,长期保存,非破坏性读出;存取速度慢,结构复杂,环境要求高

1.1 组成

磁盘驱动器:磁头组件和盘片组件

磁盘控制器:与主机的接口,标准有IDE,SCSI等

磁头数(盘面数);柱面数(不同面相同位置磁道构成的圆柱面);扇区数(每条磁道上有多少个扇区)

1.2 原理

磁头和磁性记录介质相对运动,电磁转换完成读写操作

1.3 指标

记录密度:单位面积上记录的二进制信息量,道密度(磁道),位密度(二进制位数),面密度(二者的乘积)

容量

平均存取时间=寻到时间+延迟时间(转半圈)+传输时间

数据传输率,磁盘转数r转/秒,每条磁道N字节,数据传输率=rN

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mgk7rELY-1685547904777)(C:/Users/16348/AppData/Roaming/Typora/typora-user-images/image-20230530230510582.png)]

磁盘的主要操作是寻址,读盘,写盘;读写是串行的,不能同时进行

1.4 磁盘阵列

多个磁盘组成一个独立的逻辑盘,数据交叉存储,并行访问

RAID0:无冗余和无校验的磁盘阵列

RAID1:镜像磁盘阵列

RAID2:采采用纠错的海明码的磁盘阵列

RAID3:位交叉奇偶检验的磁盘阵列

RAID4:块交叉奇偶检验的磁盘阵列

RAID5:无独立检验的奇偶检验磁盘阵列

2 固态硬盘SSD

2.1 原理

基于闪存技术,falsh memory,即EEPROM

以页为读写单位,相当于磁盘的扇区;以块为单位擦除,每页可以写一次,读无限次,但是每一块的擦除次数有限,擦除次数过多会坏掉(这个块);可以随机访问

另外如果写入的页有数据,则需要复制其他页到另一个块,是否意味着两次擦除,答案是不一定

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kv72Derk-1685547904778)(C:/Users/16348/AppData/Roaming/Typora/typora-user-images/image-20230531200740302.png)]

为了解决一直选择一个块擦除导致这个块的快速损坏问题,采用磨损均衡技术,将擦除的次数平均到每一块

动态磨损均衡:写入时优先选被擦除次数少的块

静态磨损均衡:SSD检测并自动进行数据的分配迁移,让老的块承担主要以读的数据(如电影),新的块承担更多写的数据

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sC2MM8d2-1685547904779)(C:/Users/16348/AppData/Roaming/Typora/typora-user-images/image-20230530231636242.png)]

五 高速缓冲寄存器(cache)

1 程序访问的局部性原理

时间局部性:现在用到的数据未来也可能用到,不断循环

空间局部性:未来要用的数据可能和现在用的数据是邻近的(指令是顺序存放或者数据以向量,数组存放)

高速缓冲技术就是利用局部性把部分数据放到cache中,让CPU和cache更快的访问,提高执行速度

int sum1(int a[M][N])
{
    int i ,j,sum=0;
    for(i= 0;i<M;i++)
    {
          for(j=0;j<N;j++)
          {
             sum +=a[i][j];
          }
    }
    return sum;
}

int sum2(int a[M][N])
{
    int i ,j,sum=0;
    for(i= 0;i<M;i++)
    {
          for(j=0;j<N;j++)
          {
             sum +=a[j][i];
          }
    }
    return sum;
}

通过以上代码就可以看出一个简单的改动就能使访问的时间增加,数组a顺序存放,那么sum2每访问一个a就要跳过N个数据,空间局部性差

2 cache的原理

由SRAM组成,和主存一样划分相同的块,但容量比主存小的多

cache按照某种策略装入未来CPU可能访问的数据

cache满时按照某种替换算法,替换某个块,由硬件实现

CPU——cache以为单位,cache——主存以为单位

cache命中还会有与主存中内容不一致的问题,因为CPU写入cache,而主存的没有更改,所有会有写入策略

CPU要访问的信息命中cache,成为cache 的命中率H;cache的总命中次数Nc,访问主存总次数Nm

命中率H=Nc/(Nc+Nm

tc为命中cache的访问时间,tm是未命中的访问时间,则cache——主存系统的平均访问时间Ta

Ta=Htc+(1-H)tm(同时找)

Ta=Htc+(1-H)(tm+tc(先cache再主存)

实现cache还需解决以下关键问题:

(1)数据查找;如何快速判断数据在cache中

(2)[地址映射](3 cache和主存的映射方式);主存块怎么存放在cache中,怎么把主存地址转换成cache地址

(3)[替换策略](4 cache中主存块的替换算法);cache满怎么替换

(4)写入策略;保持cache的内容和主存一致且提升效率

3 cache和主存的映射方式

把主存地址空间映射到cache地址空间;cache的每一个块都有一个标记,指明它是哪一块的副本,同时有一个有效位判断是否有效

3.1 直接映射

直接无条件被替换出去,没有替换算法,实现简单不灵活,块冲突概率高,空间利用率低

​ cache行号= 主存块号 mod cache总行数

假设cache4块(编号0-4),主存16块(编号0-15),那么主存编号0,4,8,12都对应cache0号,以此类推

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WQMixEC3-1685547904780)(C:/Users/16348/AppData/Roaming/Typora/typora-user-images/image-20230531210151408.png)]

给cache行设置一个长为t的标记

直接映射的地址结构为

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DtRklPdI-1685547904780)(C:/Users/16348/AppData/Roaming/Typora/typora-user-images/image-20230531210736500.png)]

(1)先根据c找到cache行

(2)再根据t标记和cache的对比,相同且有效位为1,则命中,再根据块内地址找到cache中的内容;

​ 若不命中,CPU从主存中找到块信息送到cache(一次访存),有效位置1,标记置为地址中的高t位,再将内容送到CPU

3.2 全相联映射

主存的块装入任意位置,标记指出来自内存的哪一块,CPU访存时需要与所有cache行标记对比

灵活,块冲突概率低,命中率高;标记比较慢,实现成本高(需要按内容寻址的相联存储器)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c5eU2lNg-1685547904781)(C:/Users/16348/AppData/Roaming/Typora/typora-user-images/image-20230531211606570.png)]

3.3 组相联映射

把cache分为Q个组,组间采用直接映射,组内采用全相联映射

Q=1就是全相联映射,Q=cache行数就是直接映射

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kHpNtVSs-1685547904781)(C:/Users/16348/AppData/Roaming/Typora/typora-user-images/image-20230531212307239.png)]

cache组号 = 主存块号 mod cache组数(Q)

每组行数量越大,块冲突概率越大,但是电路也复杂,成本高

(1)根据组号找到cache组

(2)组中的行对比标记

(3)相等且有效位为1,命中,再根据块内地址找到cache中的数据;

​ 若未命中,CPU从主存中读出并送到cache对应组的空白行中,有效位置1,设置标记,再将内容送到CPU

每个标记项有两位替换控制位

总线带宽=总线宽度x频率

4 cache中主存块的替换算法

cache满时从主存替换cache行

4.1 随机算法(RAND)

随机替换,没有依据局部性,命中率低

4.2 先进先出算法(FIFO)

选择最早进入的替换,没有依据局部性,因为先进入可能反复使用

4.3 近期最少使用算法(LRU)

根据局部性原理,选择近期内长久没有访问过的cache行作为替换,平均命中率比FIFO高,是堆栈类算法

特点:(1)每个行设置一个计数器,位数与cache组大小相关,两路就是一位LRU,4路就是2位

​ (2)命中时,命中行清零,比它低的加一,其他不变

​ (3)未命中且还有空闲行,装入并计0,其他行加一

​ (4)未命中且满了,替换计数值最高的,新装入计0,其他加一

会有抖动现象:集中访问的存储区域超过cache组的大小,命中率变得很低

4.4 最不经常使用算法(LFU)

替换一段时间内访问次数最少的行

也有一个计数器,访问一次加一,新行从0开始,替换计数值最小的行

5 cache写策略

cache中的内容被改变时,主存中的内容需要与cache一致

cache写命中时

(1)全写法(写直通法,write through)

CPU同时写入cache和主存

实现简单正确率高

但增加访存次数降低效率,为此引入写缓冲

写缓冲:减少写入主存的时间损耗,在cache和主存间加入一个写缓冲(FIFO队列),解决速度不匹配问题,但是频繁写写缓冲可能会饱和

(2)回写法

先写入cache,换出时再写入主存

减少了写入次数,但有不一致的问题

减少开销,cache行设置修改位(脏位),为1表示修改才写会主存,否则不用写回主存

cache写未命中时

(1)写分配法(常配合回写法)

先把主存的块调入cache,再更新

每次未命中都要调入

(2)非写分配法(常配合全写法)

只写入主存,不进行掉块

现代计算机将指令cache和数据cache分开,减少冲突,优化性能

同时采取多级cache,离CPU越远的cache访问速度越慢,容量越大

指令cache和数据cache的分离在L1cache,此时为写分配法和回写法合用

L1——L2全写法,L2——主存回写法;并且L2速度快,避免了写缓冲的饱和

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w7ZBQPmL-1685547904782)(C:/Users/16348/AppData/Roaming/Typora/typora-user-images/image-20230531220817741.png)]

六 虚拟存储器

虚拟存储器=主存+辅存;由硬件和操作系统实现,对应用程序员透明

1 基本概念

将主存或辅存的地址空间统一编址,形成一个庞大的地址空间,用户可以自由编程,不用在意主存容量和程序在主存中实际的位置

用户编程——虚地址(逻辑地址),对应空间是虚拟空间,虚地址 = 虚存页号+页内字地址

主存单元地址——实地址(物理地址),对应主存地址空间,实地址= 主存页号+页内字地址

使用虚地址,由硬件找到虚实地址的对应,并判断是否装入主存

若已经在主存,通过地址变化,CPU直接访问;若不在,把页面调入主存CPU再访问,主存满就需要替换

缺页的访问辅存代价大,必须提高命中率,因此采用全相联映射

写操作不能同时写回磁盘,因此采用回写法

2 页式虚拟存储器

以页为基本单位

主存的页——实页,页框;虚存的页——虚页

虚拟地址:虚页号 + 页内地址 虚拟地址——物理地址(页表实现)

页表:虚页号和实页号的对照表,记录虚页调入主存的位置,保存在主存中

2.1 页表

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UqkWZpsp-1685547904783)(C:/Users/16348/AppData/Roaming/Typora/typora-user-images/image-20230531224315638.png)]

有效位:1,已经装入主存;0,没有调入主存

脏位(修改位):配合回写策略判断是否修改需要写回

引用位(使用位):配合替换策略

执行情况:

(1)虚拟地址——>物理地址

(2)页表基址寄存器存放进程的页表首地址,然后根据虚拟地址高位部分的虚拟页号找到对应的页表项

(3)有效位为1,取出物理页号,物理页号+虚拟地址低位的页内地址=实际物理地址

​ 有效位为0,缺页,操作系统进行缺页处理

页式虚拟存储会有内部碎片;处理保护和共享数据不方便

2.2 快表(TLB)

根据局部性原理,把经常访问的页存入TLB(高速缓冲器组成),能提高效率

地址转换,先找快表

采用全相联或组相联

TLB项 = 页表项内容 + TLB标记字段

全相联——TLB标记就是页表项对应的虚页号

组相联——TLB标记就是虚页号的高位

详见操作系统

2.3 具有TLB和cache的多级存储系统

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8lLmhwMi-1685547904784)(C:/Users/16348/AppData/Roaming/Typora/typora-user-images/image-20230531230407639.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DJvrfpom-1685547904784)(C:/Users/16348/AppData/Roaming/Typora/typora-user-images/image-20230531230613796.png)]

查找时,快表和慢表可以同步进行

CPU的一次访存操作可能涉及TLB,页表,cache,主存和磁盘的访问

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IIQdOTYQ-1685547904785)(C:/Users/16348/AppData/Roaming/Typora/typora-user-images/image-20230531231113472.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GWcf8FTW-1685547904786)(C:/Users/16348/AppData/Roaming/Typora/typora-user-images/image-20230531231135805.png)]

cache缺失——硬件完成

缺页处理——操作系统完成

TLB缺失——硬件/操作系统完成

3 段式虚拟存储器

按程序的逻辑划分,长度因程序而异

虚拟地址 = 段号 + 段内地址

虚实地址的转换——段表

段表:段号 + 装入位 + 段起点(各段起始地址) + 段长等信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EIOP17Mh-1685547904786)(C:/Users/16348/AppData/Roaming/Typora/typora-user-images/image-20230531232102671.png)]

具有逻辑独立性,易于管理保护和共享,但会造成外部碎片

4 段页式虚拟存储器

把程序按逻辑分段,每段再按页划分;调入调出仍以页为单位

一个程序一个段表,每段一个页表

虚地址 = 段号 + 段内页号 + 页内地址

段号——>段表地址——>页表起始地址+段内页号=页表地址——>实页号+页内地址——>物理地址

两次访存,开销较大

5 虚拟存储器与cache 的比较

相同:(1)提高系统性能

(2)把数据划分

(3)地址映射,替换算法,更新策略

(4)局部性原理应用(快速缓存思想)

不同:

cache虚拟存储器
主攻系统速度主存容量
实现硬件(透明)硬件+os(对应用程序员透明)
未命中性能影响较小较大(访问辅存)
连接与CPU直连辅存不能和CPU通信

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青山是哪个青山

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值