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

存储器的层次结构

在这里插入图片描述
主存—辅存:实现虚拟存储系统,解决了主存容量不够的问题
Cache—主存:解决了主存与CPU速度不匹配的问题

cache和主存之间的交换由硬件自动完成,主存和辅存之间的交换由硬件+操作系统实现

注:有的教材把安装在电脑内部的磁盘称为“辅存”,把U盘、光盘等称为“外存”。
也有的教材把磁盘、U盘、光盘等统称为“辅存”或“外存”

现在的cache也分层

存储器的分类

1.层次

在这里插入图片描述

2.介质

在这里插入图片描述

1.半导体存储器
以半导体器件存储信息
主存、cache
2.磁表面存储器
以磁性材料存储信息
磁盘、磁带
3.光存储器
以光介质存储信息

3.存取方式

1.随机存取存储器(Random Access Memory, RAM):读写任何一个存储单元所需时间都相同,与存储单元所在的物理位置无关
在这里插入图片描述

2.顺序存取存储器(Sequential Access Memory, SAM):读写一个存储单元所需时间取决于存储单元所在的物理位置
在这里插入图片描述
3.直接存取存储器(Direct AccessMemory DAM):既有随机存取特性,也有顺序存取特性。先直接选取信息所在区域,然后按顺序方式存取。
在这里插入图片描述

(2、3统称串行访问存储器:读写某个存储单元所需时间与存储单元的物理位置有关)
4.相联存储器(Associative Memory),即可以按内容访问的存储器(Content Addressed Memory,CAM)可以按照内容检索到存储位置进行读写,“快表”就是一种相联存储器

4.信息的可更改性

读写存储器(Read/Write Memory)——即可读、也可写(如:磁盘、内存、Cache)
只读存储器(Read Only Memory)——只能读,不能写(如:实体音乐专辑通常采用 CD-ROM,
实体电影采用蓝光光碟,BIOS通常写在ROM中)
事实上很多ROM也可多次读写,只是比较麻烦

5.信息的可保存性

断电后,存储信息消失的存储器——易失性存储器(主存、Cache)
断电后,存储信息依然保持的存储器——非易失性存储器(磁盘、光盘)
信息读出后,原存储信息被破坏——破坏性读出(如DRAM芯片,读出数据后要进行重写)
信息读出后,原存储信息不被破坏——非破坏性读出(如SRAM芯片、磁盘、光盘)

存储器的性能指标

在这里插入图片描述
MDR反映储存字长
MAR反映储存字数

数据传输率=主存带宽=数据的宽度(MDR位数反映)/存储周期
存储周期=存取时间+恢复时间

主存储器的基本组成

在这里插入图片描述
每一个存储元由电容和MOS管构成,MOS管可以理解为一种电控开关,输入电压达到某个阈值时,MOS管就可以接通,这样的原理可以用来储存信息。
在这里插入图片描述
一个存储体(存储矩阵)由多个存储单元构成,一次能够读出的二进制位称为存储字,图中存储字长为8bit,这和字节的含义不同,不同计算机的存储字长可以不同。
在这里插入图片描述

地址线通过译码器分析地址线送来的地址数据来确定选择哪条字选线,进而通过读取该条字选线上的存储元电流输出来读取信息。同时译码器后还有驱动器来保持电压稳定。
除此之外,储存芯片还有片选线确定该芯片是否工作,读写控制线控制读写(一条线或者两条线,读写合并或者分开)
控制电路确定电流稳定后再送入译码器。
另注:头上划线表示该信号低电平有效。
MAR位数和MDR位数分别和储存单元个数、储存字长对应,由此可以算出总容量(最大容量)
MAR和MDR和CPU连接
在这里插入图片描述
一个内存条可能包含多块储存芯片,片选线确定是否选中。
芯片引脚包含片选线、数据线、地址线、读写控制线除此之外还有供电引脚、接地引脚。
在这里插入图片描述
常见对储存芯片的描述是这样的:
8K*8位,这个描述和MAR和MDR的位数是对应的
在这里插入图片描述
现在计算机一般按字节编址,但可以有多种寻址方式(按字节寻址、按字寻址、按半字寻址、按双字寻址),此时各种地址之间的关系是逻辑左右移的关系。

DRAM和SRAM

区别

Dynamic Random Access Memory,即动态RAM
Static Random Access Memory,即静态RAM
DRAM用于主存、SRAM用于Cache

DRAM芯片:使用栅极电容存储信息
SRAM芯片:使用双稳态触发器存储信息
核心区别:存储元不一样

在这里插入图片描述
由上图可以看出DRAM和SRAM芯片的储存元不一样,两者储存元的不同也决定了各自不同的特性
在这里插入图片描述

在这里插入图片描述
不要把破坏性读出和易失/非易失性存储器搞混淆,前者指读取信息会破坏原有信息,需要重写;后者指断电后是否还能保存信息;这里的DRAM和SRAM断电后不能保存信息。

DRAM的刷新

  1. 多久需要刷新一次? 刷新周期:一般为2ms
  2. 每次刷新多少存储单元?以行为单位,每次刷新一行存储单元
    ——为什么要用行列地址?减少选通线的数量
    在这里插入图片描述
    3.如何刷新?有硬件支持,读出一行的信息后重新写入,占用1个读/写周期
    4.在什么时刻刷新?
    在这里插入图片描述
    刷新周期如果没有明确告知的话,一般认为是2ms
    DRAM的刷新由存储器独立完成,不需要CPU控制

DRAM 的地址线复用技术

由于DRAM一般容量较大,使得地址线数目较多,为了减少地址线条数,我们采用地址线复用技术,将行地址和列地址分两次传送,使得地址线和芯片引脚都更少了。
在这里插入图片描述
在题中问引脚数目时要注意是否采用地址线复用技术,采用的话导致地址线、地址引脚减半

DRAM现在已经过时了,现在的主存通常采用SDRAM芯片(DDR3\DDR4)

只读存储器ROM

RAM芯片——易失性,断电后数据消失

ROM芯片——非易失性,断电后数据不会丢失

 MROM(Mask Read-Only Memory)——掩模式只读存储器
厂家按照客户需求,在芯片生产过程中直接写入信息,之后任何人不可重写(只能读出)
可靠性高、灵活性差、生产周期长、只适合批量定制

PROM(Programmable Read-Only Memory)——可编程只读存储器
用户可用专门的PROM写入器写入信息,写一次之后就不可更改

EPROM(Erasable Programmable Read-Only Memory)——可擦除可编程只读存储器
允许用户写入信息,之后用某种方法擦除数据,可进行多次重写
UVEPROM(ultraviolet rays)——用紫外线照射8~20分钟,擦除所有信息
EEPROM(也常记为E^2 PROM,第一个E是Electrically)——可用“电擦除”的方式,擦除特定的字

Flash Memory ——闪速存储器(注:U盘、SD卡就是闪存)
在EEPROM 基础上发展而来,断电后也能保存信息,且可进行多次快速擦除重写
注意:由于闪存需要先擦除在写入,因此闪存的“写”速度要比“读”速度更慢。

SSD(Solid State Drives)—— 固态硬盘
由控制单元+存储单元(Flash 芯片)构成,与闪速存储器的核心区别在于控制单元不一样,但
存储介质都类似,可进行多次快速擦除重写。SSD速度快、功耗低、价格高。目前个人电脑上常
用SSD取代传统的机械硬盘               

在这里插入图片描述
主板上的BIOS芯片(ROM),存储了“自举装入程序”,负责引导装入操作系统(开机)

注:我们常说“内存条”就是“主存”,但事实上,主板上的ROM芯片也是“主存”的一部分

逻辑上,主存由RAM+ROM组成,且二者常统一编址.

注:
• 很多ROM芯片虽然名字是“Read-Only”,但很多ROM也可以“写”
• 闪存的写速度一般比读速度更慢,因为写入前要先擦除
• RAM芯片是易失性的,ROM芯片是非易失性的。很多ROM也具有“随机存取”的特性

主存储器和CPU的连接

在这里插入图片描述
读/写控制线:一般低电平表示写,高电平表示读

增加主存的储存字长-位扩展

在这里插入图片描述

增加主存的储存字数-字扩展

在这里插入图片描述
线选法

在这里插入图片描述
译码片选法(有各种译码器)

该法也可以拓展容量

在这里插入图片描述

主存容量扩展-字位同时拓展

在这里插入图片描述
补充:译码器
在这里插入图片描述
可能有多个使能
注:CPU可使用译码器的使能端控制片选信号的生效时间
使得地址信号稳定后发出存储器请求信号
在这里插入图片描述

双端口RAM和多模块存储器

DRAM的芯片恢复时间较长,如:存取时间为 r,存取周期为 T,T=4r。
在这个前提下,当多核CPU都要访存,怎么办?(双端口RAM)
CPU的读写速度比主存快很多,主存恢复时间太长怎么办?
(多模块存储器)

双端口RAM

在这里插入图片描述
双端口RAM需要有两组完全独立的数据线、地址线、控制线。CPU、RAM中也要有更复杂的控制电路。
可以优化多核CPU访问一根内存条的速度
冲突解决:解决方法:置“忙”信号为0,由判断逻辑决定暂时关闭一个端口(即被延时),未被关闭的端口正常访问,被关闭的端口延长一个很短的时间段后再访问。

多模块存储器

多体并行存储器

在这里插入图片描述

1.高位交叉编址
连续的地址在一块存储器上,相当于单纯的扩容
2.低位交叉编址
连续的地址在不同存储器上,有更高的效率

低位交叉编址显然可以采用“流水线”的方式并行存取,提高存取效率
在确定模块m的问题上:
存取周期为T,存取时间为r,为了使流水线不间断,应保证模块数 m≥T/r
存取周期为T,总线传输周期为r,为了使流水线不间断,应保证模块数 m≥T/r
同时我们应该认识到m<T/r时会造成CPU等待,但m>T/r也会造成存储体闲置。

单体多字存储器

在这里插入图片描述
单体多字存储器相当于将多个存储器合并,使得一次读取一行多个字,但这样会造成读取不必要的数据,比如要读取的数据4B,在不同的两行,这时我们要把这两行共8B全部读取才行。
总体来看多体并行存储器和单体多字存储器在速度上的差别不大,多体并行存储器T=4r,低位交叉访问平均一个字节时间为r,单体多字存储区一行4B,访问一行T时间,因此平均访问时间也是r

拓展:双通道内存=低位交叉的多体存储器
所以在买内存条时,可挑选相同主频、相同容量的两根来组成双通道,这也是为什么卖内存条的商家界面会出现(16G*2)这种字眼。
选择相同主频是因为两根内存条频率不一致时,高频率的内存条会被降频,这样导致发挥不出该有的性能;选择相同容量是因为两根内存条容量不一致时,高出去的容量还是单通道,会被浪费。

cache

cache的基本概念

之前的学习中我们通过双端口RAM、多模块存储器提高存储器的工作速度,但是这种提升还是无法解决CPU和储存器性能不匹配的问题,我们如果采用更加高速的存储设备(SRAM)则会造成价格上升,容量减少。为了解决这个问题,基于程序访问的局部性原理,我们做出了“cache-主存层次”的存储体系改善。

命中率H:CPU欲访问的信息已在Cache中的比率
缺失(未命中)率M = 1 - H
cache和主存同时访问
先访问cache再访问主存两种方式的等待时间不同

那么我们在将目标地址和周围的部分数据调入cache中时,如何界定“周围”?
答:储存分块,如:每 1KB 为 一块。主存与Cache之间以“块”为单位进行数据交换

操作系统中,通常将主存中的“一个块”也称为“一个 页/页面/页 框”Cache中的“块”也称为“行”

也因此我们能将主存地址看成块号+块内地址
在这里插入图片描述
cache和主存之间按照块对应调入,这么做在实际过程中也有很多的问题:
1.如何区分 Cache 与 主存 的数据块对应关系? ——Cache和主存的映射方式
2.Cache 很小,主存很大。如果Cache满了怎么办? ——替换算法
3.CPU修改了Cache中的数据副本,如何确保主存中数据母本的一致性? ——Cache写策略

cache和主存的映射方式

为了确定Cache调入块位置 与 主存 的数据块对应关系,我们有以下三种映射方式。那么我们如何如何区分Cache中存放的是哪个主存块?我们可以再cache中增加标记位,标记当前cache块对应的是主存中哪个块,但是仅有标记位是不够的,当cache块没放入数据块时,标记位无效,我们应该增加“有效位”记录是否有效。
1.全相联映射
随意放
在这里插入图片描述
访存:直接看地址的前面部分(代表主存块号),查看cache的标记中是否有与之对应的部分,是否有效,有则访问,无则去内存中找

2.直接映射
只能放固定位置
主存块在Cache中的位置=主存块号%Cache总块数
其实就是主存块号后n位,我们在cache中寻找的时候,cache后就是主存块号后n位,因此在cache的标记中,我们可以不用记录后n位
在这里插入图片描述
访存:根据地址的前面部分的后几位确定需要访存的cache块号,到相应cache中查看标记是否和地址前几位对应,是否有效,是则访问,否则访问主存
3.组相联映射
可放到特定分组
组相联映射,所属分组=主存块号%分组数
在这里插入图片描述
地址前面部分的末尾可以当做组号

访存:首先在地址找到需要访问的组号(后几位),再在对应组中对比标记和有效位

cache 的替换算法

随机算法(RAND)

若Cache已满,则随机选择一块替换
随机算法——实现简单,但完全没考虑局部性原理,命中率低,实际效果很不稳定

先进先出算法(FIFO)

FIFO, First In First Out
若Cache已满,则替换最先被调入Cache 的块
实现简单,最开始按#0#1#2#3放入Cache,之后轮流替换 #0#1#2#3
FIFO依然没考虑局部性原理,最先被调入Cache的块也有可能是被频繁访问的

抖动现象:频繁的换入换出现象(刚被替换的块很快又被调入)

近期最少使用算法(LRU)

LRU, Least Recently Used

— 为每一个Cache块设置一个“计数器”,用于记录每个Cache块已经有多久没被访问了。当Cache满后替换“计数器”最大的

使用LRU算法的话,除了标记位、有效位之外还要在cache中加入计数器,

算法:
①命中时,所命中的行的计数器清零,比其低的计数器加1,其余不变;(比其高的计数器加一没有意义)

这么做的好处:
Cache块的总数=2n,则计数器只需n位。且Cache装满后所有计数器的值一定不重复

②未命中且还有空闲行时,新装入的行的计数器置0,其余非空闲行全加1;
③未命中且无空闲行时,计数值最大的行的信息块被淘汰,新装行的块的计数器置0,其余全加1。

LRU算法——基于“局部性原理”,近期被访问过的主存块,在不久的将来也很有可能被再次访问,因
此淘汰最久没被访问过的块是合理的。LRU算法的实际运行效果优秀,Cache命中率高。
若被频繁访问的主存块数量 > Cache行的数量,则有可能发生“抖动”,如:{1,2,3,4,5,1,2,3,4,5,1,2…}

最不经常使用算法(LFU)

LFU, Least Frequently Used
— 为每一个Cache块设置一个“计数器”,用于记录每个Cache块已经有多久没被访问了。当Cache满后替换“计数器”最大的

新调入的块计数器=0,之后每被访问一次计数器+1。需要替换时,选择计数器最小的一行

若有多个计数器最小的行,可按行号递增、或FIFO策略进行选择

LFU算法——曾经被经常访问的主存块在未来不一定会用到(如:微信视频聊天相关的块),并没有很好地遵循局部性原理,因此实际运行效果不如 LRU

cache的写策略

写命中- 写回法

写回法(write-back) —— 当CPU对Cache写命中时,只修改Cache的内容,而不立即写入主存,只有当此块被换出时才写回主存

用此方法,未被修改的块不必写回,可以节省时间
同时,为了区分cache中哪个块被写过,哪个块没有被写过,应该添加脏位的信息

减少了访存次数,但存在数据不一致的隐患(cache和主存数据不一致)。

写命中-全写法/写直通法

全写法(写直通法,write-through) —— 当CPU对Cache写命中时,必须把数据同时写入Cache
和主存,一般使用写缓冲(write buffer)
访存次数增加,速度变慢,但更能保证数据一致性
在这里插入图片描述
写缓冲:用SRAM实现的FIFO队列,写入的速度比在内存中写快得多。在CPU想要写入数据时,同时在cache和写缓冲中写,之后在CPU干其他事儿的时候,在专门的控制电路控制下逐一写回。
使用写缓冲,CPU写的速度很快,若写操作不频繁,则效果很好。若写操作很频繁,可能会
因为写缓冲饱和而发生阻塞

写不命中-写分配法

写分配法(write-allocate)——当CPU对Cache写不命中时,把主存中的块调入Cache,在Cache中修改。通常搭配写回法使用。

写不命中-非写分配法

非写分配法(not-write-allocate)——当CPU对Cache写不命中时只写入主存,不调入Cache。搭配全写法使用。
用这种方法意味着只有“读”未命中时才调入cache

多级cache 写策略

在这里插入图片描述
各级Cache之间常采用“全写法+非写分配法”
Cache-主存之间常采用“写回法+写分配法”

页式存储器

页式存储系统:一个程序(进程)在逻辑上被分为若干个大小相等的“页面”,“页面”大小与“块”的大小相同。每个页面可以离散地放入不同的主存块中。

在程序执行的过程中,操作系统将程序分“页”,程序的页和主存的块对应
在这里插入图片描述

逻辑地址(虚地址):程序员视角看到的地址
物理地址(实地址):实际在主存中的地址

在程序执行的过程中,指令中的地址是逻辑地址,当我们想要访问相应的地址时,我们需要找到和这个逻辑地址相对应的物理地址
在这里插入图片描述
这个过程中我们需要用到“页表”,整个地址变化过程如下:
在这里插入图片描述
由于页表在主存中,每次访问都要经过一次访存操作,访存耗时大。因此我们可以依据局部性原理,制作高速块表(SRAM)储存最近访问的页表项
在这里插入图片描述
这里我们应注意到快表是一种“相联存储器”,可以按内容寻访

同时要注意区别:快表中存储的是页表项的副本;Cache中存储的是主存块的副本
整体流程图:
在这里插入图片描述

虚拟存储器

程序执行的过程中操作系统并不是把程序整个的放入主存,而是将程序执行的部分页放入内存。比如微信有很多功能,但一般用得比较多的是文字消息和朋友圈的功能,因此一般把这两个模块调入主存。
这样就使得内存“看起来很大”,我们称为虚拟存储器。

页式虚拟存储器

操作系统将程序分“页”,将部分页调入主存
在这里插入图片描述

段式虚拟存储器

在这里插入图片描述
页式虚拟存储器按照大小划分页面,段式虚拟存储器按照功能模块划分。

在这里插入图片描述

段页式虚拟存储器

在这里插入图片描述
段内再分页

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Handsome Wong

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

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

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

打赏作者

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

抵扣说明:

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

余额充值