文章目录
- 3.1 存储器概述
-
- 3.1.1 存储器分类
-
- 根据计算机中的功能(层次)进行分类
- 按存储介质分类
- 按存取方式分类
- 根据信息的可保存性进行分类
- 3.1.2 存储性能指标
- 3.1.3 多级存储系统
- 3.2 主存储器
- 3.3 主存与CPU连接
-
- 3.3.1 连接原理
- 3.3.2 扩展主存容量
-
- 位扩展法
- 字扩展法
-
- 线选法
- 译码片选法
- 同时扩展字位法
- 存储芯片的地址分配和片选
- 3.4 外部存储器
-
- 3.4.1 磁盘存储器
-
- 1.磁盘存储器
-
- 磁盘设备的组成
-
- 存储区域
- 磁记录原理
- 磁盘性能指标
-
- 磁盘地址
- 硬盘的工作过程
- 2.磁盘阵列
- 3.4.2 固态硬盘SSD
- 补充 光盘
- 3.5 高速缓冲存储器Cache
-
- 3.5.1 程序访问的局部原理
- 3.5.2 Cache基本工作原理
- 3.5.3 Cache以及主存的映射方式
-
- 直接映射
- 全相联映射
- 组相联映射
- 3.5.4 Cache替换中主存块的算法
-
- LRU算法实现
- 最不常用算法的实现
- 3.5.5 Cache写策略
-
- 写命:全写、回写
-
- 全写法
- 回写法
- 写未命中:写分配法,非写分配法
-
- 写分配法
- 非写分配法
- 3.5.- 分离的Cache结构
- 3.5.- 多级Cache结构
- 3.6 虚拟存储器
-
- 3.6.1 虚拟存储器的基本概念
- 3.6.2 页面虚拟存储器
-
- 1. 页表
- 2. 快表(TLB)(TODO
- 3.6.3 段式虚拟存储器
- 3.6.4 段页存储器
3.1 存储器概述
3.1.1 存储器分类
按照在计算机中的作用(层次)分类
- 主存储器。简称主存储器和内存。。CPU可直接随机访问,也可与高速缓冲存储器一起使用(Cache)辅助存储器交换数据。
- 辅助存储器。辅助存储,外部存储。存储暂时不使用的程序和数据,以及需要永久保存的信息。。
- 高速缓冲存储器。,位于主存和CPU之间,存储当前CPU经常使用的指令和数据CPU快速访问。现代计算机通常集成在一起CPU中
按存储介质分类
可分为:(磁盘,磁带),磁芯存储器、(MOS、双极型)、(光盘)
按照存取方式分类
- 随机存储器(RAM):存储器的任何单元都可以随机访问。和。又分和
- 只读存储器(ROM):只能随机读出而不能写入,即使断电,也不会丢失信息
- 串行访问存储器:按物理地址阅读和写作,包括存储器的顺序访问(SAM)(例如)并直接访问存储器(DAM)(例如())
- 磁盘属于 直接访问存储器(DAM)
- 根据相关存储器 内容指定与地址指定相结合 寻址的存储器
- CD-ROM,即光盘不属于只读存储器ROM
根据信息的可保存性进行分类
-
易失性存储器:断电后丢失存储信息,如RAM
-
非易失性存储器:断电后不会失去存储信息,例如ROM、磁表面存储器、光盘
-
破坏性读出:读取信息时,必须丢失原始信息
-
非破坏性读出:读出信息时原始信息不丢失
3.1.2 存储性能指标
- 存储容量 = 存储字长*字数(例如1M*8位)。存储字数表示存储器的地址空间大小,字长表示一次存取操作的数据量
- 单位成本
- 存储速度:数据传输率()=数据宽度/存储周期。。对于破坏性读出的存储器,存取周期往往比存取时间大的多,可以达到2倍
3.1.3 多级层次的存储系统
CPU-寄存器-Cache-主存-磁盘-磁带、光盘。从左向右,速度越来越慢,容量越来越大,价格越来越低。
存储系统层次结构主要体现在()和()
主要思想:上一层存储器作为低一层存储器的高速缓存。
从CPU角度看,Cache-主存层速度接近Cache,容量和价格却接近主存;从主存-辅存层分析,其速度接近主存,价格和容量却接近辅存。这就解决了速度、容量和成本之间的矛盾
主存和Cache之间的数据调用是硬件自动完成的,对所有程序员都是透明的。主存和辅存的数据调用由硬件和操作系统完成,对于应用程序员是透明的
虚拟存储系统:编程的地址范围与虚拟存储器的地址空间相对应
3.2 主存储器
,断电丢失信息。
ROM属于非易失性存储器
3.2.1 SRAM芯片和DRAM芯片
存储元:存放一个二进制位的物理器件。是存储器最基本的构建
存储单元:地址码相同的多个存储元组成一个存储单元。若干存储单元的集合构成存储体
SRAM的工作原理
,集成度低,功耗大,价格高,
DRAM的工作原理
采用来存储信息,属于是
DRAM刷新
DRAM电容上的电荷一般只能维持1-2ms,即使不断电也会丢失信息,为此必须隔一段时间,通常取。
常见的刷新方式有以下三种
- 集中刷新:利用一段固定的时间,依次对存储器的所有行进行逐一。此时停止对存储器的读写操作,称为,又称访存
- 分散刷新:对每行的刷新分散到各个工作周期中。一个存储器的系统工作周期分为两部分,前一半用来正常读写,后一半用来刷新。
- 异步刷新:利用最大刷新间隔为2ms的特性。
DRAM的刷新需要注意:
- 刷新对于CPU是透明的,不依赖外部访问
- ,芯片内部自己生成行地址
- 刷新类似读操作,占一个读写周期,但有所不同。刷新不需要选片,即存储器中所有芯片同时被刷新
- DRAM采用分散刷新时,不存在死区时间
DRAM的读写周期(待补
SRAM和DRAM的比较
核心在于存储介质的不同
SRAM | DRAM | |
---|---|---|
存储信息 | 触发器 | 电容 |
读出是否破坏 | 非破坏性读出 | 破坏性读出 |
是否需要刷新 | 不需要刷新 | 需要刷新 |
送行列地址 | 同时送 | 分两次(地址线复用) |
运行速度 | 快 | 慢 |
集成度 | 低 | 高 |
存储成本 | 高 | 低 |
主要用途 | Cache | 主存 |
补充
- SDRAM表示同步动态随机存储器,属于DRAM
存储器芯片的内部结构(待补充
3.2.2 只读存储器ROM
ROM的特点
都支持随机存取,而RAM易丢失存储信息,ROM一旦有信息,就难以改变,掉电也不会丢失。
- 结构简单,位密度比RAM的高
- 具有非易失性,可靠性高
ROM的类型
根据制造工艺的不同,ROM可以分为:掩模式只读存储器(MROM)、一次可编程只读存储器(PROM)、可擦除可编程存储器(EPROM)、Flash存储器以及固态硬盘(SSD)
- 掩模式只读存储器(MROM):生产时写入,之后无法更改
- 一次可编程只读存储器(PROM):允许用户一次写入,之后就无法再修改
- EPROM:可紫外线擦除(UVEPROM),电擦除( E 2 E^2 E2PROM)
- Flash:U盘、SD卡。断电后可保存信息,可多次重写。。
- SSD:固态硬盘
重要ROM
主板上的BIOS芯片(ROM)存储“自举装入程序”,负责引导装入操作系统(开机)
3.2.3 主存储器的基本组成
考点:
- 芯片的大小描述,引脚数(注意读写控制线是否集成一条
- 某一DRAM芯片,采用地址复用技术,容量为1024*8位,除了电源和接地线,该芯片引脚数最少为(读写为2条):1(片选)+1(行/列选择)+10/2(地址线)+8(数据线)+2(读写控制线)=17
- (14统考)某容量256MB的存储器由若干4M*8位的DRAM芯片组成,该DRAM芯片的地址引脚数为:22/2=11位(注意DRAM地址复用)、数据引脚数为:8位
3.2.4 多模块存储器
多体并行存储器
单体多字存储器
- 存储器中只有一个存储体,每个存储单元存储
m
个字,总线宽度也为m
个字,一次并行读出m
个字,地址必须顺序排列处于同一个单元 - 缺点是:指令和数据在主存内必须顺序存放,遇到转移指令或者操作数不能连续存放,效果就不理想
多体并行存储器
多体并行存储器由多体模块组成,每个模块都有相同的容量和存取速度,各个模块都有独立的读写控制电路、地址寄存器和数据寄存器。 多体并行存储器分为和两种
- 高位交叉编址:高位地址表示体号,低位地址表示体内地址。这种方式无法提高存储器吞吐率,属于是顺序存储器
- 低位交叉编址:假设 T T T为存取一个字的存取周期,总线传送周期为 r r r,则交叉模块数量应该大于等于 m = T / r m=T/r m=T/r,才能实现流水。连续存取 m m m个字所需的时间是 t 1 = T + ( m − 1 ) r t_1=T+(m-1)r t1=T+(m−1)r
3.3 主存与CPU连接
3.3.1 连接原理
- 主存储器通过和CPU连接
- 数据总线位数与工作频率乘积正比于数据传输率
- 地址总线位数决定了可寻址的最大内存空间
- 控制总线(读/写)指出总线周期的类型和本次输入/输出操作完成的时刻
单个芯片内存不会很大,一般通过,多个芯片集成在一个内存条上,再由多个内存条及主板上的ROM组成计算机所需内存空间,再通过总线和CPU相连
3.3.2 主存容量的扩展
单个存储芯片容量有限,在字数或字长上与实际要求有区别,因此需要在字和位两方面扩充才能满足需求。
位扩展法
- 用于增加存储字长。例如8片8K*1位的芯片连接成8K*8位的存储器
字扩展法
- 增加字数,位数不变
线选法
n n n条线对应 n n n个片选信号,效率不高 地址不连续
译码片选法
n n n条线对应 2 n 2^n 2n个片选信号 地址连续
字位同时扩展法
上述两种方法结合
存储芯片的地址分配和片选
3.4 外部存储器
3.4.1 磁盘存储器
磁盘存储器的优点:
- 存储容量大,位价格低
- 记录介质可以重复使用
- 记录信息可长久保存,不丢失
- 非破坏性读出。不需要再生
缺点:存取速度慢,机械结构复杂,对工作环境要求高
1.磁盘存储器
磁盘设备的组成
- 磁盘驱动器。核心部件是磁头组件和盘片组件。
- 磁盘控制器。硬盘存储器和主机的借口,主流的标准有IDE,SCSI,SATA等
存储区域
,磁盘按块存取
- 磁头数(
Heads
):即记录面数,表示硬盘有多少个磁头。, - 柱面数(
Cylinders
):表示硬盘每个盘面上有多少条磁道。在一个盘组中,不同记录面的相同编号(位置)的磁道构成一个圆柱面 - 扇区数(
Sectors
):
磁记录原理
磁头和磁性记录介质相对运动时,通过电磁转换完成读/写操作
磁盘性能指标
-
- 非格式化容量:磁记录表面可以利用的磁化单元总数
- 格式化容量:按照某种特定记录格式能存储的信息总量。(比前者小
- :
- :沿半径方向单位长度的磁道数
- :磁道单位长度记录的二进制代码位数
- :位密度和道密度的乘积
需要注意的是
- :由三部分构成
- 寻道时间:磁头移动到目的磁道的时间(一般取平均值
- 旋转延迟时间:磁头定位到要读写扇区的时间(一般取平均值。
- 传输时间:传输数据所需要花费的时间
- :单位时间内向主机传输数据的字节数。 假设磁盘转速 r r r转/ s s s,每条磁道容量 N N N字节,那么数据传输率为 D r = r N D_r=rN Dr=rN
磁盘地址
主机需要向磁盘控制器发送寻址信息。 通常磁盘地址组成为:
驱动器号 | 柱面号(磁道号) | 盘面号 | 扇区号 |
---|
假设系统有4个驱动器,每个驱动器带动一个磁盘,每个磁盘256个磁道,16个盘面,每个盘面划分为16个扇区,则地址构成如下
驱动器号(2) | 柱面号(磁道号)(8) | 盘面号(4) | 扇区号(4) |
---|
硬盘的工作过程
硬盘的主要操作是:寻址、读盘、写盘。 每一个操作都对应一个控制字,硬盘工作时,先取控制字,然后执行 硬盘属于机械式部件,读写操作是串行的,同一时刻不可能既读又写,也不可能同时读写多组数据
2.磁盘阵列
:独立冗余磁盘阵列,多个独立的物理磁盘组成一个独立的逻辑盘,数据在多个物理盘上分割交叉存储、并行访问,具有更好的存储性能、可靠性和安全性
- RAID0没有纠错能力
- RAID1容量减少一半
- RAID1~RAID5中,无论何时有磁盘损坏,都可以随时拔出手寸的磁盘,更换好的磁盘,而不会损坏数据
3.4.2 固态硬盘SSD
补充 光盘
3.5 高速缓冲存储器Cache
3.5.1 程序访问的局部性原理
包括时间局部性和空间局部性
- ,因为程序中存在循环
- ,因为指令通常顺序存放,顺序执行。数据一般也是以向量、数组等形式簇聚地存储在一起的
3.5.2 Cache的基本工作原理
Cache位于存储器层次结构的顶层, 为了方便Cache和主存交换数据,。Cache块又称Cache行,每行由若干字节构成,块的长度称为块长。 Cache容量远小于主存的容量,因此块的数量也远少于。Cache仅保存主存中最活跃的若干块的副本,
- CPU发出读请求
- 若访存地址在Cache中命中,则将该地址转换为Cache地址,直接对Cache进行读操作
- 若访存地址未在Cache命中,则仍需要访问主存,并把此字所在的块一次性调入Cache。若Cache已满,则需要根据某种替换算法,替换掉某一块。
3.5.3 Cache和主存的映射方式
Cache行的信息是主存中某个块的副本,
直接映射
C a c h e 行 号 = ( 主 存 块 号 ) m o d ( C a h c e 总 行 数 ) Cache行号=(主存块号)mod(Cahce总行数) Cache行号=(主存块号)mod(Cahce总行数) ,如果这个位置已经存在内容,那么会被替换出去 直接映射的 直接映射的地址结构:
标记 | Cache行号 | 块内地址 |
---|
- 标记位进行了优化,末尾几位可以通过Cache块号得到
- 某32位计算机按字节编址,Cache容量为16KB。Cache行大小为16B。主存和Cache采用直接映射,则0x1234E8F8的单元装入Cache的地址为: 解:Cache块地址空间大小=16KB/1B=16K=2^14,因此低14位地址即为Cache内地址
- 某存储系统中,主存容量为Cache容量的4096倍,Cache分为64个块,主存地址和Cache地址采用直接映像方式时,地址映射表的大小应该为(不考虑一致性唯一位和替换算法位):64*13bit 解:64块,4096=2^12,12bit再加上1bit有效位(表示是否装入Cache)
- 主存容量1MB,Cache容量16KB,每块8个字,每个字32位,采用直接地址映像方式,Cache起始字块为第0块,主存地址35301H存入Cache的第几个字块?(十进制) 解:直接映射的地址结构:Tag、行号、块内地址 每块8个字,每个字32bit=4B,因此每块2^5B,块内地址5位 主存容量220B,Cache容量214B,因此Tag有6位 (0011,01)(01,0011,000)(0,0001) 中间转换为十进制:8+16+128=152
全相联映射
,每一行包含标记,指出该行取自主存中的哪一块,所以CPU访存需要和所有Cache行的标记进行比较。
- 优点:灵活,Cache块的冲突概率低,空间利用率高
- 缺点:比较速度慢,实现成本高,需要采用昂贵的按内容寻址的相联映射存储器进行地址映射
全相联映射的地址结构:
标记 | 块内地址 |
---|
组相联映射
将Cache块分为大小相等的Q个组,每个主存块可以装入固定组中的任意一行。 C a c h e 组 号 = ( 主 存 块 号 ) m o d ( C a c h e 组 数 Q ) Cache组号=(主存块号)mod(Cache组数 Q) Cache组号=(主存块号)mod(Cache组数Q) 组相联映射的地址结构:
标记 | Cache组号 | 块内地址 |
---|
- 有效容量128KB的Cache,每块16B,8路组相联,字节地址为1234567H的单元调入Cache,其Tag应该为: 解:首先要熟记祖相联映射的地址结构:Tag、组号、块内地址 每块16B=2^4B,因此块内地址4位;组数=128KB/(16B*8)=17-7=10bit;高位剩余部分即为Tag 1234567H=(0001,0010,0011,01)(00,0101,0110),(0111)
3.5.4 Cache中主存块的替换算法
采用直接映射时,一个给定的主存块只能放到唯一固定的Cache行中,无需考虑替换算法
常用的替换算法有:。最常考察LRU算法
- 随机算法:。实现简单,但不遵循局部性原理,因此命中率可能比较低
- 先进先出算法:,实现简单,但不遵循局部性原理,因为早调入的行也可能经常使用
- 近期最少使用算法(LRU):选择近期内最久未使用的Cache行作为替换的行。依据程序局部性原理
- 最不经常使用算法:一段时间内访问次数最少的块被替换出
LRU算法实现
最不经常使用算法的实现
- 每一行设置一个计数器,从0开始计数
- 每访问一次,该行所在计数器+1
- 替换时,将计数器值最小的一行替换出
3.5.5 Cache写策略
Cache中的内容是主存的副本,当
分为两种情况:写命中和写不命中
写命中:全写法、回写法
全写法
- 当CPU对Cache写命中时,
- 某一块主存需要替换时,无需将这一块写回主存。用新调入的块直接覆盖即可
- 优点:实现方式简单,保持主存和Cache数据的一致性;缺点:增加了访存次数
写缓冲:在Cache和主存之间加一个写缓冲队列,FIFO,减少全写法直接写入内存的时间损耗,解决速度不匹配的问题。频繁写时会导致写缓冲饱和溢出
回写法
- CPU对Cache写命中时,只把数据写入Cache,不立即写回内存;当这块被替换时,才写入内存
- 减少了访存次数,但存在不一致的隐患
每个Cache行设置一个,修改位为1, 说明内容修改过,替换时需要写回内存;反之未修改,不需要写回内存
- 假设主存地址位数为32位,按字节编址,主存和Cache之间采用全相联映射,主存块大小为1个字,每个字32位,采用回写法和随机替换策略。则能存放32K字数据的Cache总容量至少有多少位? 解:全相联映射地址结构:Tag、块内地址 Cache块大小和主存块大小一样,为1个字=32bit=4B,块内地址占2位,因此Tag占30位 回写法需要一位修改位,此外Cache需要一位有效位 数据需要32位 总共32K*(30+1+1+32)bit = 215*26bit=221bit=2048K bit
写未命中:写分配法、非写分配法
写分配法
加载主存的块到Cache中,然后更新这个Cache块。 试图利用程序的空间局部性,缺点是每次不命中都要从主存中读取一块
非写分配法
只写入主存,不进行调块
写分配法通常和回写法一起用 非写分配法通常和全写法结合使用
3.5.- 分离的Cache结构
随着新技术的发展(例如指令预取),需要将数据Cache和指令Cache分开设计,产生
统一Cache的优点:设计和实现相对简单;缺点:可能引发冲突
3.5.- 多级Cache结构
3.6 虚拟存储器
主存和辅存共同构成虚拟存储器,二者在硬件和系统软件的共同管理下工作。 对于应用程序员,虚拟存储器是透明的。 虚拟存储器具有主存的速度和辅存的容量
3.6.1 虚拟存储器的基本概念
虚拟存储器将主存或辅存的地址空间统一编址,形成庞大的地址空间。
用户编程允许涉及的地址称为或,虚地址对应的存储空间称为或 实际的主存单元地址称为或,实地址对应的是,
- CPU使用虚地址时,由硬件辅助找出虚地址和实地址之间的关系,判断这个虚地址对应的存储单元内容是否已经装入主存。
- 若已在主存中,则通过地址变换,CPU可以直接访问主存中的对应内容
- 若不在主存中,则把包含这个字的一页或一段调入主存后,再由CPU访问。若主存已满,则采用替换算法置换主存中的交换块
3.6.2 页式虚拟存储器
虚拟页式存储器以页为基本单位。虚拟空间和主存空间被划分为大小相同的页。
虚拟地址分为两个字段:。 虚拟地址到物理地址的转换由实现。页表存放在主存中,,是虚页号和实页号的对照表,他记录程序的虚页调入主存时被安排在主存中的位置。
1. 页表
页表的地址结构(虚页号
有效位 | 脏位/修改位 | 引用位 | 物理页/磁盘地址 |
---|---|---|---|
表示页面是否在主存中 | 表明页面是否被修改过 | 配合替换策略进行设置,例如是否实现LRU算法 | 虚页放在哪个地址 |
CPU执行指令时,需要先将虚拟地址转换为主存物理地址
- 页表基址寄存器存放进程的页表首地址,根据虚拟地址高位部分的虚拟页号找到对应的页表项。
- 若装入位为1,则取出物理页号,和虚拟地址的低地址(页内地址)拼接,形成实际的物理地址
- 若装入位为0,则需要进行缺页处理
页式虚拟存储器的优点:页面长度固定,页表简单,调入方便 缺点:程序不可能全是页面的整数倍,最后一页的零头无法利用,造成;
2. 快表(TLB)(TODO
地址转换过程中,需要,如果缺页,还要进行页面替换等…访问主存的次数增加了
按照程序的局部性原理,可以,可以明显提升效率 相应地, 地址转换时,先查询快表,命中则无须访问慢表
。
3.6.3 段式虚拟存储器