说明
- 博客作为笔记备份,不定时更新
- 参考内容为《计算机组成原理(第3版)》唐朔飞 高等教育出版社;王道考研《计算机组成原理考研复习指导2023》
- 文中的例题摘自王道考研《计算机组成原理考研复习指导2023》,大多是我个人认为较为典型的题目以及错题的部分整理
存储系统
1. 概述
1.1 存储器的分类
按在计算机中的作用分类
- 主存储器
- CPU可直接随机的对其访问
- 存放计算机运行期间需要的程序和数据
- 容量小,存取速度快,位价高
- 辅助存储器
- 其中的内容需要调入主存后才能被CPU访问
- 存放当前暂时不用的程序和数据
- 容量大,存取速度慢,位价低
- 高速缓冲存储器
- 位于CPU和主存之间
- 存放当前CPU经常使用的指令和数据
- 容量小,存取速度可和CPU的速度相配,位价高
按存取方式分类
- 随机访问存储器 RAM
- 可随机访问任何一个存储单元
- 存取时间和存储单元的物理位置无关
- 读取方便,使用灵活,主要用作主存和cache
- 分为动态RAM 和 静态RAM
- 只读存储器 ROM
- 信息一旦写入就固定不变,即使断电信息也不会丢失
- 存取方式为随机存取
- ROM和RAM共同组成主存
- 派生出了可反复重写的ROM,e.g.PROM,EPROM等
- 串行访问存储器
- 对存储单元读写时,需按其物理位置的先后顺序寻址
- 顺序存取存储器
- 只能按一定的顺序存取
- 存取时间与信息在存储体上的物理位置有关
- 存取速度慢
- 直接存取存储器
- 存取方式介于RAM和顺序存取存储器之间
- 先寻找整个存储器的某个小区域,再在小区域内顺序查找
按存储介质分类
- 磁表面存储器
- 磁芯存储器
- 半导体存储器
- 光存储器
按信息的可保存性分类
- 易失性存储器
- 非易失性存储器
1.2 存储器的性能指标
容量
- 存储容量 = 存储字长 × \times × 字长
速度
- 存取速度: 数据传输率 = 数据的宽度/存取周期
- 存取时间:启动一次存储器操作到完成该操作所经历的时间
- 存取周期
- 连续两次独立访问存储器操作之间的最小时间间隔
- 通常大于存取时间,存取周期 = 存取时间 + 恢复时间
- 主存带宽:又称数据传输率,表示每秒从主存进出信息的最大数据量
位价
- 位价 = 总成本/总容量
1.3 存储器的层次结构
原因
为了解决大容量、高速度、低成本三个相互制约的矛盾
层次结构
- 思想:上一层的存储器作为低一层存储器的高速缓存。
- 层次结构主要体现在“cache-主存层”和“主存-辅存层”
- cache-主存层
- 主要解决CPU和主存速度不匹配的问题
- cache和主存的数据调用由硬件自动完成,对所有程序员透明
- cache中的内容是主存中内容的副本
- 主存-辅存层
- 主要解决存储系统的容量问题
- 主存和辅存的数据调用由硬件和操作系统共同完成,对应用程序员透明
- 主存中的内容是辅存中的内容的副本
- cache-主存层
2. 主存储器
2.1 随机访问存储器 RAM
SRAM
- 工作原理
- 用双稳态触发器来记忆信息
- 非破坏性读出,即信息读出后,它仍保持其原状态而不需要再生。但当电源掉电时,信息丢失,故属于易失性半导体存储器
- 读写时序
- 说明:不论是对存储器进行读操作或写操作,在读写周期内,地址线上的地址始终不变
- 读周期时序
- 读周期 t R C t_{RC} tRC = 对芯片连续两次读操作的最小时间间隔
- 读时间 t A t_A tA = 从地址有效到数据稳定所需时间 < \lt < 读周期
- 地址失效后,地址线上的数据有一段维持时间 t O H A t_{OHA} tOHA以保证所读数据可靠
- 写周期时序
- 写周期 t W C t_{WC} tWC = 对芯片连续两次写操作的最小时间间隔
- t W C = 滞 后 时 间 t A W + 写 入 时 间 t W + 写 恢 复 时 间 t W R t_{WC} = 滞后时间t_{AW} + 写入时间t_W + 写恢复时间t_{WR} tWC=滞后时间tAW+写入时间tW+写恢复时间tWR
- 特点
- 存取速度快
- 集成度低
- 功耗大
- 价格昂贵,一般用于高速缓冲存储器
DRAM
- 工作原理
- 利用电容上的电荷来存储信息
- 破坏性读出,需要信息再生(刷新)
- 读写时序
- 说明
- 动态RAM的行、列地址是分别传送的:先由 R A S ‾ \overline {RAS} RAS将行地址送入行地址缓存器,再由 C A S ‾ \overline{CAS} CAS将列地址送入列地址缓存器。因为DRAM的容量较大,地址位数较多,为了减少芯片地址引脚数,通常采用地址引脚复用技术,即行地址和列地址通过相同的引脚分先后两次输入,这样地址引脚数可减少一半
- R A S ‾ \overline {RAS} RAS和 C A S ‾ \overline {CAS} CAS正、负电平的宽度应大于规定值,以保证芯片内部正常工作
- 行地址对 R A S ‾ \overline {RAS} RAS的下降沿以及列地址对 C A S ‾ \overline {CAS} CAS的下降沿,应由足够的地址建立时间和地址维持时间,以确定行列地址都能准确的写入芯片
- 读时序
W
E
‾
=
1
\overline{WE} = 1
WE=1
- 读工作周期 = DRAM完成一次“读”所需最短时间 t C R D t_{C_{RD}} tCRD, 也是 R A S ‾ \overline {RAS} RAS的一个周期
- 必须要求写允许 W E ‾ = 1 \overline{WE} = 1 WE=1在 C A S ‾ \overline{CAS} CAS下降沿到来前(列地址送入前)建立; W E ‾ = 1 \overline{WE} = 1 WE=1的撤销必须在 C A S ‾ \overline{CAS} CAS上升沿后( C A S ‾ \overline{CAS} CAS失效后);
- 写时序
W
E
‾
=
0
\overline{WE} = 0
WE=0
- 写工作周期 = R A S ‾ \overline{RAS} RAS的一个周期 t C W R t_{C_{WR}} tCWR
- 必须要求 W E ‾ = 0 \overline{WE}=0 WE=0应先于 C A S ‾ = 0 \overline{CAS}=0 CAS=0;数据的有效存在时间应与 C A S ‾ \overline{CAS} CAS与 W E ‾ \overline{WE} WE的有效相对应
- 例题
- 某一DRAM芯片,采用地址复用技术,其容量为1024 × \times × 8位,除电源和接地端外,该芯片的引脚数最少是( )(读写控制线为2根)
- 解答:17。寻址范围1024B= 2 1 0 2^10 210B,按字节寻址,采用地址复用技术,行列地址分先后两次分别传入,因此地址线减少为5根,数据线为8根,在加上行选通 R A S ‾ \overline{RAS} RAS和列选通 C A S ‾ \overline{CAS} CAS,以及读写控制信号,一共17根。
- 说明
- 刷新
- 先将原信息读出,再由刷新放大器形成原信息并重新写入的再生过程
- 刷新周期(再生周期),一般取 2 m s 2ms 2ms
- 刷新是按行进行的;刷新对CPU是透明的,即刷新不依赖于外部的访问;刷新时不需要选片,即存储器中所有芯片同时被刷新
- 刷新方式
- 集中刷新
- 在规定的一个刷新周期内,对全部的存储单元集中一段时间逐行进行刷新,此时必须停止读/写操作,称为“死时间”
- 优点:读写操作不受刷新工作的影响
- 缺点:“死时间”长,在“死时间”内不能访问存储器
- 分散刷新
- 对每行存储单元的刷新分散到每个存取周期内完成
- 把机器的存取周期 t C t_C tC分为两段:前半段 t M t_M tM用来读写或维持信息,后半段 t R t_R tR用来刷新。 t C = t M + t R t_C= t_M+t_R tC=tM+tR
- 优点:没有“死区”
- 缺点:加长了系统的存取周期,降低了整机的速度
- 异步刷新
- 集中刷新和分散刷新的结合,既可以缩短“死时间”,又充分利用最大刷新间隔为 2 m s 2ms 2ms的特点
- 将刷新周期除以行数,得到两次刷新操作之间的时间间隔 t t t,利用逻辑电路每隔时间 t t t产生一次刷新请求
- 避免使CPU连续等待过长的时间,减少了刷新次数,从根本上提高了整机的工作效率
- 集中刷新
- 特点
- 容易集成
- 位价低
- 容量大
- 功耗低
- 存取速度比SRAM慢
SRAM 和 DRAM 的比较
SRAM | DRAM | |
---|---|---|
存储信息 | 触发器 | 电容电荷 |
破坏性读出 | 否 | 是 |
需要刷新 | 否 | 是 |
送行列地址 | 同时送 | 分两次送 |
运行速度 | 快 | 慢 |
集成度 | 低 | 高 |
存储成本 | 高 | 低 |
主要用途 | 高速缓存 | 主存 |
2.2 只读存储器 ROM
特点
- 结构简单,所以位密度比可读写存储器的位密度高
- 具有非易失性,可靠性高
类型
- 掩膜ROM(MROM)
- 一旦写入,无法改变
- 用行、列交叉处是否有耦合原件MOS管,来判断原存1还是存0
- 优点:可靠性高,集成度高,价格便宜
- 缺点:灵活性差
- PROM
- 可实现一次性编程
- 用熔丝断和未断来区分所存信息是1或0
- EPROM
- 可擦除可编程只读存储器
- 可采用紫外线照射的方式擦除,或采用电气方法进行擦除
- 编程次数有限
- 写入时间过长
- Flash
- 闪速存储器,又称快擦型存储器
- 非易失性:可在不加电的情况下长期保存信息
- 可在线进行快速擦除与重写
- 价格便宜,集成度高
- 非易失性、长期反复使用的大容量闪速存储器还可以代替磁盘
- 固态硬盘SSD
- 基于闪存的SSD是由固态电子存储芯片阵列组成的硬盘,由控制单元和存储单元组成
- 可长期保存信息,可快速擦除和重写
- 读写速度快,低功耗,价格高
2.3 主存储器的基本组成
- 说明:现在计算机的主存都由半导体集成电路构成,驱动器、译码器和读写电路均制作在存储芯片中,而MAR和MDR制作在CPU芯片中
- 存储体:存储体->存储单元->存储元件
- 编址
- 编制单位是指具有相同地址的存储元件构成的一个单位,可按字节编址,也可按字编址
- 现代计算机通常采用字节编址
- 存取过程
- 读操作
- CPU将要读取的字的地址送入MAR
- MAR中的地址经地址总线送入主存的地址寄存器,地址译码器进行译码选中相应的单元,同时CPU发出读命令,送入读写控制电路
- 主存读出对应单元中的内容,经由数据总线送至MDR。至于该信息由MDR送至何处已不是主存的任务,而是由CPU决定的
- 写操作
- CPU将该字所在主存单元的地址送入MAR
- MAR中的地址经地址总线送入主存的地址寄存器,地址译码器进行译码选中相应的单元,同时CPU发出写命令,送入读写控制电路
- CPU将要写的信息送入MDR中,在读写控制电路的控制下,经数据线将信息写入选中的单元
- 读操作
2.4 多模块存储器
单体多字存储器
- 特点
- 存储器中只有一个存储体,每个存储单元存储m个字,总线宽度也是m个字。
- 一次并行读出m个字,地址必须顺序排列并处于同一存储单元
- 优点:在一个存取周期内从同一地址读取m条指令,然后逐条送至CPU执行,即每隔 1 m \cfrac{1}{m} m1存取周期,CPU向主存存取一条指令,显然提高了存储器工作速度
- 缺点:指令和数据在主存内必须是连续存放的,一旦遇到转移指令,或操作数不能连续存放,这种方法效果就不明显
- 结构
多体并行存储器
- 特点
- 多体并行存储器由多体模块组成
- 每个模块都有相同的容量和存取速度,各个模块都有独立的地址寄存器、数据寄存器和读写控制电路。
- 模块既能并行工作,也能交叉工作
- 分为高位交叉编址和低位交叉编址两种
- 分类
- 高位交叉编址(顺序方式)
-
结构
-
高位地址表示体号,低位地址为体内地址。各个体并行工作
-
高位交叉的方式下,总是把低位的体内地址送入高位体号确定的模块内进行译码
-
访问一个连续的主存块时,总是现在一个模块内访问,访问完后才访问下一个模块,CPU总是按顺序访问模块,各个模块不能被并行访问,因而不能提高存储器的吞吐率
-
可以通过合理调动,使不同的请求源同时访问不同的体,便可实现并行工作
-
模块内地址是连续的,串行存取,因此这种存储器仍是顺序存储器
-
访问过程
- 一个体就是一个芯片,假设每个芯片的存取周期为100ns
- 顺序读取,假设一开始选中的体是 M 0 M_0 M0,则第一个存取周期读取0号位置位置数据,等100ns之后,读取1号位置数据,依次类推
-
- 低位交叉编址(交叉方式)
-
结构
-
低位表示体号,高位表示体内地址。各个体轮流编址
-
每个模块按“模m”交叉编址, 模 块 号 = 单 元 地 址 % m 模块号 = 单元地址\%m 模块号=单元地址%m
-
低位交叉方式下,总是把高位的体内地址送到由低位体号确定的模块内进行译码
-
程序连续存放在相邻的模块中,因此这种存储器也叫交叉存储器
-
采用低位交叉编址后,可在不改变每个模块存取周期的前提下,采用流水线的方式并行存取,提高存储器的带宽
-
流水线存取
-
设模块字长等于数据总线宽度,模块存取一个字的存取周期为 T T T,总线传送周期为 r r r,为实现流水线方式存取,存储器交叉模块数应 ≥ m = T r \ge m = Tr ≥m=Tr。 m m m是交叉存取度
-
每经过 r r r时间后启动下一个模块,交叉存储器要求模块数 ≥ m \ge m ≥m,以保证在经过 m × r m \times r m×r时间后再次启动该模块时,其上次的存取操作已经完成(流水线不中断)。模块数为4的流水线方式存取:
-
采用流水线方式存取,连续存取 m m m个字所需时间为 t 1 = T + ( m − 1 ) r t_1 = T +(m-1)r t1=T+(m−1)r,而顺序方式连续存取 m m m个字所需时间 t 2 = m T t_2 = mT t2=mT,可见低位交叉存储器的带宽大大提高
-
-
访问过程
- 假设每个芯片的存取周期为100ns
- 存取周期 = 存取时间 + 恢复时间,其实CPU存取数据的速度很快,但是必须等恢复时间过后,才能继续再次访问这个芯片
- 假设存取时间为40ns,假设是读操作,那么访问过程就是:
- 读取0位置的数据,经过40nsCPU取走了数据,但此时存取周期还没过,因此不能去读 M 0 M_0 M0芯片,但此时我们要读的是1位置的数据,而1位置在 M 1 M_1 M1芯片上,所以可以直接读取1位置数据
- 读取1位置数据后同样的要等存取周期过去后才能继续读 M 1 M_1 M1芯片,但此时可以读 M 2 M_2 M2芯片。读取 M 2 M_2 M2芯片后,时间已经过去了120ns, M 0 M_0 M0的存取周期已经过了,就又可以读 M 0 M_0 M0芯片了
-
- 高位交叉编址(顺序方式)
- 例题
-
交叉存储体的访问时间
1.某机器采用四体并行交叉存储器,现在分别执行如下操作:(1)读取6个连续地址单元中存放的存储字,重复80次;(2)读取8个连续地址单元中存放的存储字,重复60次。则(1)(2)所花费时间之比为(?)-
解答
- 假设存取周期为 T T T
- (1)读取6个连续地址单元,如下所示:
前4个位置(0~3)访问结束后,正好经过时间 T T T,可直接继续访问 M 0 M_0 M0,访问4号位置。要访问5号位置时距离上一次访问 M 1 M_1 M1也恰好经过时间 T T T,可直接访问5号位置。
访问完5号位置后,距离上一次访问 M 0 M_0 M0经过时间 T 2 \cfrac{T}{2} 2T,要再等 T 2 \cfrac{T}{2} 2T才能访问 M 0 M_0 M0。
因此一次连续访问6个连续地址单元的内容,一共要经历时间为 T + T 4 + T 4 + T 2 = 2 T T + \cfrac{T}{4}+\cfrac{T}{4}+\cfrac{T}{2} = 2T T+4T+4T+2T=2T。重复80次,一共 160 T 160T 160T- (2)读取8个连续地址单元,如下所示:
连续访问8个连续地址单元,正好需要时间 2 T 2T 2T,重复60次,一共 120 T 120T 120T。
- 因此时间之比是4:3
2.(2017)某计算机主存按字节编址,由4个64M × \times × 8位的DRAM芯片采用交叉编址方式构成,并与宽度为32位的存储器总线相连,主存每次最多读写32位数据。若double型变量x的主存地址为804001AH,则读取x需要的存取周期数为()
-
解答
- double型数据在32位的机器中占64位,数据线为8位,所以一共需要读8次。
- 地址为804001AH,因此体号为10,如下:
从体号为10的体开始读取,依次启动各个体,读取8次。在时间0时启动体号为10的体,时间为 T 4 \cfrac{T}{4} 4T时启动体号为11的体,依次启动并读取,在 7 T 4 \cfrac{7T}{4} 47T启动体号为01的体并花费 T 4 \cfrac{T}{4} 4T时间读取数据,但是还需要再等 3 T 4 \cfrac{3T}{4} 43T时间等该体的存取周期过去后才算读取结束,因此一共花费时间 2 T + 3 T 4 = 11 T 4 2T+\cfrac{3T}{4}=\cfrac{11T}{4} 2T+43T=411T
-
错误原因:忽略了最后的KaTeX parse error: Undefined control sequence: \c at position 1: \̲c̲ ̲frac{3T}{4},要等最后一个模块的存取周期完全结束时才算读取结束
-
-
访问冲突
1.某计算机使用四题交叉编址存储器,假定在存储器总线上出现的主存地址(十进制)序列为8005,8006,8007,8008,8001,8002,8003,8004,8000,则可能发成访问冲突的地址是()- 解答
- 模块号 = 地址%存储器交叉模块数
- 可能发生访问冲突的规则:给定的访存地址在相邻的四次访问中出现在同一个存储模块内
- 计算出模块号之后,判断可能发成访存冲突的是8000和8004
- 解答
-
关于交叉存储器
1.( P 95 P_{95} P95)某计算机字长为32位,存储体的存储周期为200ns- (1)采用四体交叉工作,用低2位地址作为体地址,存储数据按地址顺序存放。主机最快多长时间可以读出一个数据字?存储器的带宽是多少?
- 四体交叉轮流工作,理想情况下,每个存取周期内可以读出4个数据字,读出一个数据字的时间平均为 T 4 = 50 n s \cfrac{T}{4}=50ns 4T=50ns。数据字长为32位,数据传输率为32位/50ns = 64Mb/s
- (2)若4个体分贝保存主存前
1
4
\cfrac{1}{4}
41,次
1
4
\cfrac{1}{4}
41,再下个
1
4
\cfrac{1}{4}
41,最后
1
4
\cfrac{1}{4}
41这四段数据,即选用高2位的地址作为体地址,可以提高存储器顺序读出数据的速度吗?为什么?
- 若对多体结构的存储器选用高位地址交叉,通常起不到提高存储器读写速度的作用,因为不符合程序运行的局部性原理,一次连续读出彼此地址相差一个存储体容量的4个字的机会太小。因此通常只在一个存储体中忙碌,其他存储模块是空闲的。
- (3)若把存储器改成单体4字宽度,会带来说明好处和问题?
- 若把存储器的字长扩大为原来的4倍,实现的是一个单体4字结构的存储器,每次可同时读出4个字的内容,有利于提高存储器每个字的平均读写速度,但其灵活性不如多体单字结构的存储器,还会多用到集合缓冲寄存器
- (4)比较采用四体低位地址交叉存储器和四端口读出的存储器这两种方案的优缺点
- 多端口存储器是对一个存储体使用多套读写电路实现的,扩大存储容量的难度显然比多体结构的存储器大,而且不能对多端口存储器的同一个存储单元同时执行多个写入操作,而多体结构的存储器则允许在同一个存储周期对几个存储体执行写入操作
- (1)采用四体交叉工作,用低2位地址作为体地址,存储数据按地址顺序存放。主机最快多长时间可以读出一个数据字?存储器的带宽是多少?
-
2.5 主存储器与CPU的连接
连接原理
- 主存储器通过数据总线、地址总线、控制总线和CPU连接
- 数据总线的位数与工作频率的乘积正比于数据传输率
- 地址总线的位数决定了可寻址的最大地址空间
- 控制总线(读/写)指出总线周期类型和本次输入/输出操作完成的时刻
主存的容量扩展
- 位扩展法
- 增加存储字长,使其数据位数与CPU的数据线数相等
- 连接方式:将多个存储芯片的地址端、片选端和读写控制端相应并联,数据端分别引出
- 注: 仅采用位扩展时,各个芯片连接地址线的方式相同,但连接数据线的方式不同,即在同一时刻选中所有的芯片,所以片选信号 C S ‾ \overline{CS} CS要连接到所有的芯片
- 字扩展法
- 增加存储字的数量,而位数不变
- 连接方式:将芯片的地址线、数据线、读写控制线相应并联,而由片选信号来区分各个芯片的地址范围
- 注: 仅采用字扩展时,各个芯片连接地址线、连接数据线的方式均相同,但在某一时刻只需选中部分芯片,所以通过片选限号 C S ‾ \overline{CS} CS或采用译码器设计连接到相应的芯片
- 字位同时扩展法
- 增加存储字的数量,同时增加存储字长
- 注: 采用字位同时扩展时,各个芯片连接地址线的方式相同,但连接数据线的方式不同,而且需要通过片选信号 C S ‾ \overline{CS} CS或采用译码器设计连接到相应的芯片
存储芯片的地址分配和片选
- 先进行片选,然后在选中的片内进行字选。(片内的字选通常是由CPU送出的N条低位地址线完成的,地址线直接接到所有存储芯片的地址输入端)
- 片选信号的产生方式
- 线选法
- 用除片内寻址外的高位地址线分别连接待各个存储芯片的片选端
- 这些片选地址线每次只能一位有效,不允许同时多位有效,这样才能保证每次只选中一个芯片(或芯片组)
- 优点:不需要地址译码器,线路简单
- 缺点:地址空间不连续,选片的地址线总是分时为低电平,不能充分利用系统的存储空间,造成地址资源的浪费
- 译码片选法
- 用除片内寻址外的高位地址线通过地址译码器芯片产生片选信号
- 线选法
存储器与CPU的连接
- 合理选择芯片
- 地址线的连接
- 字选:通常将CPU地址线的低位与存储芯片的地址线相连,以选择芯片中的某一单元。这部分的译码是由芯片的片内逻辑完成的
- 片选:CPU地址线的高位在扩充存储芯片时使用,用来选择存储芯片。这部分译码由外接译码器逻辑完成
- 数据线的连接
- 读/写命令线的连接
- 片选线的连接
- 片选有效信号与CPU的访存控制信号 M R E Q ‾ \overline{MREQ} MREQ(低电平有效)有关,因为只有当CPU要求访存时,才要求选中存储芯片
例题
- 字/位扩展
- (
P
104
P_{104}
P104)80386DX是32位系统,以4B为编址单位,当在该系统中用8KB(8K
×
\times
× 8位)的存储芯片构造32KB的存储体时,应完成存储器的()设计
A.位扩展 B.字扩展 C.字位扩展 D.字位均不扩展
解答:因为要以4B为编址单位,要扩展到32KB,即8K × \times × 32bit,因此只用进行位扩展
错误原因:以为要将地址扩展到32位
- (
P
104
P_{104}
P104)80386DX是32位系统,以4B为编址单位,当在该系统中用8KB(8K
×
\times
× 8位)的存储芯片构造32KB的存储体时,应完成存储器的()设计
- 存储芯片的选择
- (
P
104
P_{104}
P104)设CPU的地址总线有24根,数据总线有32根,用512K
×
\times
× 8位的RAM芯片构成该机的主存储器,则该机的主存最多需要()片这样的存储芯片
解答:主存容量 = 2 24 × 32 2^{24}\times 32 224×32位,因此芯片数量 = 2 24 × 32 512 K × 8 \cfrac{2^{24}\times 32}{512K \times 8} 512K×8224×32 = 128
错误原因:忽略了主存的容量,而将关注点放在了地址总线的根数上。应注意地址总线位数决定的是可寻址的最大内存空间 - (2016)某存储器容量为64KB,按字节编址,地址4000H~5FFFH为ROM区,其余为RAM区,若采用8K
×
\times
× 4位的SRAM芯片进行设计,则需要该芯片的数量为()
解答:ROM区的容量 = 2 13 2^{13} 213 = 8KB,因此RAM区的容量为56KB,芯片数量 = 56 K B 8 K × 4 b i t \cfrac{56KB}{8K \times 4bit} 8K×4bit56KB = 14
错误原因:同上
- (
P
104
P_{104}
P104)设CPU的地址总线有24根,数据总线有32根,用512K
×
\times
× 8位的RAM芯片构成该机的主存储器,则该机的主存最多需要()片这样的存储芯片
- 关于芯片地址
- (
P
105
P_{105}
P105)若片选地址为111时,选定某一32K
×
\times
× 16位的存储芯片,则该芯片在存储器中的首地址和末地址为()
解答:片选地址为111,说明高三位是111,,32K说明片内地址线有15根,因此首地址为11 1000 0000 0000 0000 = 38000H,末地址为11 1111 1111 1111 1111 = 3FFFFH - (2011)某计算机存储器按字节编址,主存地址空间大小为64MB,现用4M
×
\times
× 8位的RAM芯片组成32MB的主存储器,则存储器地址寄存器MAR的位数至少为()
解答:主存按字节编址,地址空间大小为64MB,MAR的寻址范围是64M = 2 26 2^{26} 226,因此是26位。实际的主存容量32MB不能代表MAR的位数,考虑到存储器扩展的需要,MAR应保证能访问到整个主存地址空间。反过来,MAR的位数决定了主存地址空间的大小
错误原因:对MAR和主存地址空间的关系的理解不到位
- 关于存储器与CPU的连接
- 参考课本 P 94 P_{94} P94
- 参考复习资料 P 106 P_{106} P106
- (
P
105
P_{105}
P105)若片选地址为111时,选定某一32K
×
\times
× 16位的存储芯片,则该芯片在存储器中的首地址和末地址为()
3.外部存储器
3.1 磁盘存储器
- 磁盘存储器优点
- 存储容量大,位价低
- 记录介质可以重复使用
- 记录信息可长期保存不丢失,甚至可以脱机保存
- 非破坏性读出,读出时无需再生
- 磁盘存储器缺点
- 存取速度慢
- 机械结构复杂
- 对工作环境要求高
磁盘存储器
- 组成
- 磁盘存储器的组成:磁盘驱动器、磁盘控制器、盘片
- 磁盘驱动器
- 核心部件是磁头部件和盘片组件
- 温彻斯特盘是一种可移动磁头、固定盘片的硬盘存储器
- 磁盘控制器
- 磁盘存储器和主机的接口,主流的标准有IDE、SCSI、SATA等
- 磁盘驱动器
- 存储区域:
扇
区
→
组
成
磁
道
→
组
成
记
录
面
→
组
成
一
块
硬
盘
扇区 \stackrel{组成}{\rightarrow}磁道\stackrel{组成}{\rightarrow}记录面\stackrel{组成}{\rightarrow}一块硬盘
扇区→组成磁道→组成记录面→组成一块硬盘
- 扇区(也称块)是磁盘读写的最小单位,即磁盘按块存取
- 磁头数
- 即记录面数,表示硬盘共有多少个磁头
- 磁头用于读写盘片上记录面的信息
- 一个记录面对应一个磁头
- 柱面数
- 表示每个盘面上有多少条磁道
- 一个盘组中,不同记录面的相同编号(位置)的诸磁道构成一个圆柱面
- 扇区数
- 表示每条磁道上有多少个扇区
- 磁盘存储器的组成:磁盘驱动器、磁盘控制器、盘片
- 磁记录原理
- 原理:磁头和磁性记录介质相对运动时,通过电磁转换完成读写操作
- 编码方法:按某种方式,把一连串的二进制信息变换成存储介质磁层中一个磁化翻转状态的序列,并使读写控制电路容易、可靠地实现转换
- 磁记录方式:通常采用调频制(FM)、改进型调频制(MFM)的记录方式
- 磁盘的性能指标
- 记录密度
- 盘片单位面积上记录的二进制信息量,通常以道密度、位密度、面密度表示
- 道密度:沿磁盘半径方向单位长度上的磁道数
- 位密度:磁道单位长度上能记录的二进制代码数
- 面密度:道密度 × \times × 位密度
- 磁盘容量
- 有非格式化容量和格式化容量
- 非格式化容量:磁记录表面可利用的磁化单元总数,由道密度和位密度计算而来
- 格式化容量:按照某种特定的记录格式所能存储信息的总量。格式化后的容量比非格式化容量要小
- 平均存取时间
- 寻道时间、旋转延迟时间、传输时间
- 由于寻道和找扇区的距离远近不一,故寻道时间和旋转延迟时间通常取平均值
- 数据传输率
- 磁盘存储器在单位时间内向主机传送数据的字节数
- 假设磁盘转数为r秒/转,每条磁道容量为N字节,则数据传输率为 D r = r N D_r = rN Dr=rN
- 记录密度
- 磁盘地址
- 磁盘的地址为
驱动器号 | 柱面(磁道)号 | 盘面号 | 扇区号 |
---|
- 硬盘的工作过程
- 磁盘的主要操作时寻址、读盘、写盘
- 每个操作都对应一个控制字,磁盘工作时,第一步是取控制字,第二步是执行控制字
- 磁盘属于机械式部件,其读写操作是串行的,不可能在同一时刻既读又写,也不可能在同一时刻读两组数据或写两组数据
磁盘阵列
RAID(独立冗余磁盘阵列)是指将多个独立的物理磁盘组成一个独立的逻辑盘,数据在多个物理盘上分割交叉存储、并行访问,具有更好的存储性能、可靠性和安全性
- 分级
- RAID0:无冗余和无校验的磁盘阵列
- RAID1:镜像磁盘阵列
- RAID2:采用纠错的海明码的磁盘阵列
- RAID3:位交叉奇偶校验的磁盘阵列
- RAID4:块交叉奇偶校验的磁盘阵列
- RAID5:无独立校验的奇偶校验磁盘阵列
- 在RAID1~RAID5方案中,无论何时有磁盘损坏,都可随时拔出受损的磁盘再插入好的磁盘,而数据不会损坏,提升了系统的可靠性
- RAID0把连续多个数据块交替地存放在不同物理磁盘的扇区中,几个磁盘交叉并行读写,不仅扩大了存储容量,而且提高了磁盘数据存取速度,但RAID0没有纠错能力
- 为了提高可靠性,RAID1使两个磁盘同时进行读写,互为备份,若一个磁盘出现故障,可从另一磁盘中读出数据,两个磁盘当一个磁盘用,意味着容量减少一半
- 总之RAID通过同时使用多个磁盘,提高了传输率;通过在多个磁盘上并行存取来大幅提高存储系统的数据吞吐量;通过镜像功能,提高安全可靠性;通过数据校验,提高容错能力
3.2 固态硬盘SSD
- 固态硬盘是一种基于闪存技术的存储器。一个SSD由一个或多个闪存芯片和闪存翻译层组成,闪存芯片替代传统旋转磁盘中的机械驱动器,而闪存翻译层将来自CPU的逻辑块读写请求翻译成对底层物理设备的读写控制信号,闪存翻译层相当于磁盘控制器
- 一个闪存由B块组成,没块由P页组成。数据是以页为单位进行读写的。只有在一页所属的块整个被擦除后才能写这一页
- SSD优缺点
- 优点:由半导体存储器构成,没有移动的部件,因此随机访问时间比机械磁盘快很多,也没有任何机械噪声和振动,能耗更低,抗震性好,安全性高
- 缺点:SSD也容易磨损
3.3 例题
- (2013)某磁盘的转速为10000转/分,平均寻道时间为6ms,磁盘传输速率是20MB/s,磁盘控制器延迟为0.2ms,读取一个4KB的扇区所需的平均时间为()
A. 9ms B. 9.4ms C. 12ms D. 12.4ms
解答:平均存取时间 = 寻道时间 + 旋转延迟 + 传输时间 + (磁盘控制器延迟)。寻道时间 = 6ms;转一圈用时6ms,找扇区的延迟时间一般用旋转半周的时间作为平均值来估算,因此旋转延迟时间 = 3ms;读取4KB的扇区所需时间 = 4KB/(20MB/s) = 0.2ms。因此总的平均存取时间 = 6ms + 3ms + 0.2ms + 0.2ms = 9.4ms - (
P
114
P_{114}
P114)某个磁盘有4个记录面,存储区域内半径为10cm,外半径为15.5cm,道密度为60道/cm,外层位密度为600bit/cm,转速为6000转/分。假设每个扇区的容量为512B,每个磁道有12个扇区,寻道的平均等待时间为10.5ms,试计算磁盘平均存取时间。
解答:平均存取时间 = 寻道时间 + 旋转延迟 + 传输时间。寻道时间 = 10.5ms;旋转延迟也就是找扇区时间,转一圈用时10ms,因此旋转延迟时间为5ms;一共有12个扇区,那么磁头扫过一个扇区用时10/12=0.83ms。因此磁盘平均存取时间 = 10.5ms + 5ms + 0.83ms = 16.33ms
4.高速缓冲存储器
4.1概述
- 程序访问的局部性原理(资料
P
116
P_{116}
P116)
- 时间局部性
- 在最近的未来要用到的信息,很可能是现在正在使用的信息
- 空间局部性
- 在最近的未来要用到的信息,很可能与现在正在使用的信息在存储空间上是邻近的。因为指令通常是顺序存放、顺序执行的,数据一般也是以向量、数组等形式簇聚得存储在一起的
- 时间局部性
- 高速缓冲技术就是利用局部性原理,(将CPU最近要用到的)把程序中正在使用的部分数据放在一个Cache中,使CPU的访存操作大多数针对Cache进行,从而提高程序的执行速度
Cache的基本工作原理
- 块(Cache块又称Cache行)
- 主存和Cache被划分为大小相等的块,每个块由若干字节组成
- 任何时刻都有一些主存块在缓存块中,Cache块中保存主存中最活跃的若干块的副本
- Cache按某种策略,预测CPU在未来一段时间内欲访问的数据,将其装入Cache
- Cache与主存之间以字块传送
- CPU欲读取主存中某字时:
- 命中:所需的字在Cache中
- 将访存地址转换为Cache地址,直接对Cache进行读操作
- 不命中:所需的字不在Cache中
- 将该字所在的主存块一次性地从主存调入Cache。若此时Cache已满,则需根据某种替换算法,用这个块替换原来Cache中某块的信息
- 注意:CPU与Cache之间的数据交换以字为单位,Cache与主存之间的数据交换以Cache块为单位
- 命中:所需的字在Cache中
- 命中率:CPU要访问的信息已经在Cache中的比率
- 在一个程序执行期间,
N
c
N_c
Nc:访问Cache的总命中次数;
N
m
N_m
Nm:访问主存的总次数;
h
h
h:命中率
- h = N c N c + N m h = \cfrac{N_c}{N_c + N_m} h=Nc+NmNc
-
t
c
t_c
tc:命中时的Cache访问时间;
t
m
t_m
tm:未命中时的主存访问时间;
t
a
t_a
ta:Cache-主存系统的平均访问时间
- t a = h t c + ( 1 − h ) t m t_a = ht_c + (1-h)t_m ta=htc+(1−h)tm
- 在一个程序执行期间,
N
c
N_c
Nc:访问Cache的总命中次数;
N
m
N_m
Nm:访问主存的总次数;
h
h
h:命中率
4.2 Cache的基本结构
基本结构
- Cache存储体
- Cache存储体以块为单位与主存交换信息,为加速Cache与主存之间的调动,主存大多采用多体结构,且Cache访存的优先级最高
- 地址映射变换机构
- 作用:将CPU送来的地址转换为Cache地址,主要是主存块号与Cache块号间的转换
- 若转换后的Cache块已于CPU欲访问的主存块建立了对应关系,则命中
- 若未命中,则CPU在访问主存时,不仅将该字从主存取出,同时将它所在的主存块一并调入Cache
- 替换机构
- 按一定的算法策略进行替换
- 注:Cache对用户是透明的,即用户编程时所用的地址是主存地址,用户不知道这些主存块是否已经调入Cache中,将主存块调入Cache的任务由机器硬件自动完成
- Cache读写操作
- 读操作
- CPU发出主存地址后,先判断该存储字是否在Cache中。命中则访问Cache;没有命中,一方面要访问主存,将该字传送给CPU,同时要将该字所在的主存块调入Cache(若Cache满,执行替换算法)
- 写操作(分为写命中情况和写不命中情况)
- Cache写命中时(即要被修改的单元在Cache中)
- 全写法(写直达、写通法 write-through)
- 将数据同时写入Cache和主存。所以当某一块需要替换时,不必把这一块写回主存直接替换覆盖即可
- 优点:实现简单,能随时保持主存数据的正确性
- 缺点:增加了访存次数,降低了Cache效率
- 改进:写缓冲
- 为减少全写法直接写入主存的时间损耗,在Cache和主存之间添加一个写缓冲。CPU同时将数据写入Cache和写缓冲(FIFO队列),写缓冲再控制将数据写入主存
- 回写法(写回法 write-back)
- 只把数据写入Cache,而不立即写入主存,只有当此块被换出时才写回主存
- 减少了访存次数,但存在Cache与主存数据不一致的隐患
- 改进:设置修改位(脏位)
- 为减少写回主存的开销,每个Cache块设置一个修改位。若修改位为1,说明该块被修改过,在替换时需要写入主存;若修改位为0,说明该块没有被修改,替换时无需写入主存
- 全写法(写直达、写通法 write-through)
- Cache写不命中时
- 写分配法:加载主存中的块到Cache中,然后更新这个Cache块
- 非写分配法:只写入主存,不进行调块
- 非写分配法通常和全写法合用,写分配法通常和回写法合用
- Cache写命中时(即要被修改的单元在Cache中)
- 读操作
Cache改进
- 单一缓存和两级缓存
- 单一缓存
- 在CPU和主存之间只设置一个缓存
- 若将这个缓存直接与CPU制作在同一个芯片内,就称为片内缓存
- 两级缓存
- 在主存和片内缓存之间再加一级缓存,称为片外缓存
- 单一缓存
- 统一缓存和分立缓存
- 统一缓存:指令和数据都存放在同一缓存内的Cache
- 分立缓存:指令和数据分别存放在两个缓存中
4.3 Cache和主存的映射方式
直接映射
- 主存中每个块只能装入Cache中的唯一位置
- 若产生块冲突,原来的块无条件被移出,无需替换算法
- Cache块号 = 主存块号 mod Cache总块数
- 地址结构
标记(t位) | Cache块号(c位) | 块内地址(b位) |
---|
- 访存过程
- 先根据访存地址中间的c位,找到对应的Cache块
- 将Cache块中的标记和主存地址的高t位进行比较,若相等且有效位为1,则命中,此时根据主存地址中低位的块内地址,在对应的Cache块内存取信息
- 若不相等或有效位为0,不命中,此时CPU从主存中读出该地址所在的块,并送入对应的Cache块中,将有效位置1,并将标记设置为地址中的高t位,同时将该地址中的内容送入CPU
全相联映射
- 主存中的每一块可以装入Cache中的任何位置
- Cache块中的标记用于指出该块取自主存的哪一块,所以CPU访存时需要与所有Cache块的标记比较
- 地址结构
标记 | 块内地址 |
---|
组相联映射
- 将Cache分为Q个大小相等的组,每个主存块可以装入固定组内的任意一块。即组间采用直接映射,组内采用全相联映射
- 每组内有几块就称为几路组相联映射
- 地址结构
标记 | 组号 | 块内地址 |
---|
- 访存过程
- 先根据访存地址中间的组号找到对应的Cache组
- 将对应Cache组中的每个块的标记与主存地址的高位标记进行比较
- 若有一个相等且有效位为1,则访问Cache命中
- 若都不相等或虽然相等但有效位为0,则不命中
替换算法
- 随机算法
- 先进先出算法
- LRU 近期最少使用算法
4.4 例题
存储系统的容量
- (
P
123
P_{123}
P123)在高速缓冲存储器中,主存容量是12MB,Cache容量为400KB,则该存储系统的容量为()
A. 12MB+400KB B.12MB C.12MB-12MB+400KB D.12MB-400KB
解答:A为干扰项,各层次的储存系统不是独立工作的,三级结构的存储系统是围绕主存储器来组织、管理和调度的存储器系统,它们既是一个整体,又要遵循系统运行的原理,其中包括包含性原则。由于Cache中存放的是主存中某一部分的副本,所以不能认为总容量为两个层次容量的简单相加。选B
Cache地址格式
- (
P
124
P_{124}
P124)假设主存地址位数为32位,按字节编址,主存和Cache之间采用全相联映射方式,主存块大小为一个字,每字32位,采用write back方式和随机替换策略,则能存放32K字数据的Cache的总容量至少应()位
A. 1536K B.1568K C.2016K D.2048K
解答:由题可知,按字节编址,每块4B,所以块内地址为2位。采用全相联映射的方式,主存地址只有两个字段,因此标志占30位。需要设置一位有效位;因为write back法,故需要一位修改位;采用随机替换策略,所以不用设置替换控制位;数据项有32位。因此每个Cache行的总位数为 1 b i t ( 有 效 位 ) + 1 b i t ( 脏 位 ) + 30 b i t ( 标 记 位 ) + 32 b i t ( 数 据 位 数 ) = 64 b i t 1bit(有效位)+1bit(脏位)+30bit(标记位)+32bit(数据位数)=64bit 1bit(有效位)+1bit(脏位)+30bit(标记位)+32bit(数据位数)=64bit,所以Cache的总容量 32 K × 64 b i t = 2048 K b i t 32K \times 64bit = 2048Kbit 32K×64bit=2048Kbit - (2021)若计算机主存地址为32位,按字节编址,Cache数据区大小为32KB,主存块大小为32B,采用直接映射方式和回写(write back)策略,则Cache行的位数至少是()
A. 275 B. 274 C. 258 D. 257
解答:按字节编址,一块32B,因此块内地址占5位;Cache一共有1K行,因此Cache的行号占10位;主存地址32位,因此剩下的17位是标记位。每个Cache行需要设置一个有效位;采用write back策略,需设置一位脏位。因此Cache行总位数为 1 b i t ( 有 效 位 ) + 1 b i t ( 脏 位 ) + 17 b i t ( 标 记 位 ) + 32 × 8 b i t ( 数 据 位 ) = 275 b i t 1bit(有效位)+1bit(脏位)+17bit(标记位)+32\times 8bit(数据位)=275bit 1bit(有效位)+1bit(脏位)+17bit(标记位)+32×8bit(数据位)=275bit
注意:标志位的位数的确定。
不命中Cache时损失的机器周期
- (
P
124
P_{124}
P124)假定CPU通过存储器总线读取数据的过程为:发送地址和读命令需要1个时钟周期,存储器准备一个数据需要8个时钟周期,总线上每传送1个数据需要1个时钟周期。若主存和Cache之间交换的主存块大小为64B,存取宽度和总线宽度都为8B,则Cache的一次缺失损失至少为()个时钟周期
A. 64 B.72 C.80 D.160
解答:一次损失需要从主存中读取一个主存块(64B),每个总线事务读取8B,所以需要8个总线事务。每个总线事务所用的时间为1(发送地址和读命令)+8(准备一个数据)+1(总线传输一个数据) = 10个时钟周期,因此共需要80个时钟周期 - 假定采用多模块交叉存储器组织方式,存储器芯片和总线支持突发传送,CPU通过存储器总线读取数据的过程为:发送首地址和读命令需要1个时钟周期,存储器准备第一个数据需要8个时钟周期,随后每个时钟周期总线上传送1个数据,可连续传送8个数据(即突发长度为8)。若主存和Cache之间交换的主存块大小为64B,存取宽度和总线宽度都是8B,则Cache的一次缺失至少损失()个时钟周期。
A. 17 B.20 C.33 D.80
解答:一次缺失需要从主存读出一个主存块(64B),每个突发传送总线事务可读取 8 B × 8 = 64 B 8B \times 8 =64B 8B×8=64B,因此只需要一个突发传送总线事务。每个突发传送总线事务所用的时间为 1 ( 发 送 首 地 址 和 读 命 令 ) + 8 ( 准 备 第 一 个 数 据 ) + 1 × 8 ( 总 线 传 送 八 个 数 据 ) = 17 1(发送首地址和读命令)+8(准备第一个数据)+1\times 8(总线传送八个数据) = 17 1(发送首地址和读命令)+8(准备第一个数据)+1×8(总线传送八个数据)=17个时钟周期
注意:主要在于总线是怎么传送数据的
Cache地址与主存地址的映射
- (
P
123
P_{123}
P123)某32位计算机的Cache容量为16KB,若主存和Cache地址映象采用直接映象方式,则主存地址为0x1234E8F8的单元装入Cache的地址是()
A.00010001001101 B.01000100011010 C.10100011111000 D.11010011101000
解答:由选项可知采用字节编址。因为采用直接映射方式,所以主存地址的低14位就是Cache地址,选C
根据C语言程序判断访存过程
- (2016)有如下C语言程序段:
for (k=0; k<1000; k++)
a[k] = a[k] +32;
若数组a和变量k均为int型,int型数据占4B,数据Cache采用直接映射方式,数据区大小为1KB,块大小为16B,该程序段执行前Cache为空,则该程序段执行过程中访问数据a的Cache缺失率为()
A. 1.25% B. 2.5% C. 12.5% D. 25%
解答:(1)数组顺序存储,一个元素占4B,一块16B,因此一块里可以存放4个元素;(2)在访问a[0]时,不命中,从主存中调入a[0]所在的块,这个块包含a[0],a[1],a[2],a[3],所以之后访问a[1],a[2],a[3]都命中;(3)需要注意的是,语句a[k]=a[k]+32;需要读一次,写一次,也就是说,一共要访问2000次;(4)因此访问a的Cache的缺失率 =
250
2000
×
100
%
=
12.5
%
\cfrac{250}{2000}\times 100\% = 12.5\%
2000250×100%=12.5%
错误原因:忽略了写操作。
综合题
解答:
(1)A是虚拟页号,页大小为8KB,页内地址占13位,剩余的19位为虚页号,因此A占19位;
B是TLB项的标记字段,其内容是虚页号,因此B占19位;
C是物理地址的实页号,D是页内地址占13位,因此实页号占11位,因此C占11位,D占13位;
E是主存块号标记字段,F是Cache组号,G是块内地址。一块64B,因此块内地址占6位,Cache一共
2
9
2^9
29组,因此组号占9位,标记字段占24-9-6=9位,因此E占9位,F占9位,G占6位
(2)将4099转化为二进制:00 0001 0000 0000 0011B,因为4099是主存块号,因此低6位的块内地址没有体现,因此对应的Cache组号为0 0000 0011B=3,所映射的Cache组号为3;对应的H字段内容为00 0001 000B
(3)处理缺页的开销大,因为缺页处理要访问磁盘,Cache缺失只要访问主存,访问磁盘的开销要远大于访问主存的开销
(4)若采用直写策略,要同时写快速存储器和慢速存储器,而写磁盘比写主存慢很多,所以在Cache-主存层次上,Cache可以采用直写策略,而在主存-外存层次上,修改页面内容时总是采用回写策略
5.虚拟存储器
5.1概述
- 引入
- 主存和辅存共同构成了虚拟存储器,二者在硬件和系统软件的共同管理下工作
- 对于应用程序员而言,虚拟存储器是透明的
- 虚拟存储器有主存的速度和辅存的容量
- 基本概念
- 虚拟存储器将主存或辅存的地址空间统一编址,形成一个大的地址空间,在这个地址空间内,用户可以自由编程
- 虚地址 & 实地址
- 虚地址:用户编程允许设计的地址,也称逻辑地址,对应的存储空间称为虚拟空间或程序空间
- 实地址:实际的主存单元地址,也称物理地址,对应的是主存地址空间
- 虚地址要远大于实地址
- CPU访问
- CPU使用虚地址时,由辅助硬件找出虚地址和实地址之间的对应关系,并判断这个虚地址对应的存储单元内容是否已在主存中
- 若在主存中,则通过地址转换,CPU直接访问主存
- 若不在主存中,则把这个字所在的一页或一段调入主存中再访问,若主存满,则执行替换算法
- 一些补充说明
- 虚拟存储器是将辅存中经常访问的数据副本放到主存中
- 缺页而访问辅存的代价很大,提高命中率是关键,因此虚拟存储器机制采用全相联映射
- 在处理一致性问题时,采用回写法
5.2页式虚拟存储器
- 概述
- 页式虚拟存储器以页为基本单位。虚拟空间和主存空间被划分为大小相同的页
- 虚拟地址分为两个字段:虚页号和页内地址
- 虚拟地址到物理地址的转换是由页表实现的
- 页表是一张存放在主存中的虚页号和实页号的对照表,一般长久的保存在内存中
- 页表
-
有效位:表示对应页面是否在主存
- 1:已经调入主存,此时页表项存放的是该页的物理地址
- 0:未调入主存,此时页表项可以存放该页的磁盘地址
-
脏位:表示页面是否被修改过
-
引用位:也称使用位,用来配合替换策略进行设置
-
地址变换
-
取出页表基址寄存器中的页表首地址,根据虚拟地址的高位部分的虚拟页号找到对应的页表项
-
若装入位为1,则取出物理页号,和虚拟地址的低位部分的页内地址拼接,形成实际的物理地址
-
若装入位为0,则需操作系统进行缺页处理
- 快表 TLB
- 快表中存放的是页表项,它是为了减少访问主存的次数
- 快表通常采用全相联或组相联的方式
- 每个TLB项由页表表项内容加上一个TLB标记字段组成,TLB标记用来表示该表项取自页表中哪个虚页号对应的页表项。因此,全相联方式下TLB标记就是该页表项对应的虚页号;组相联方式下TLB标记就是对应虚页号的高位部分,而虚页号的低位部分用于选择TLB组的组索引
- 具有TLB和Cache的多级存储系统
-
CPU访存情况
TLB | Page | Cache | 说明 |
---|---|---|---|
命中 | 命中 | 命中 | TLB命中则Page一定命中,信息在主存,就可能也在Cache |
命中 | 命中 | 缺失 | TLB命中则Page一定命中,信息在主存,也可能不在Cache |
缺失 | 命中 | 命中 | TLB缺失但Page可能命中,信息在主存,就可能在Cache |
缺失 | 命中 | 缺失 | TLB缺失但Page可能命中,信息在主存,也可能不再Cache中 |
缺失 | 缺失 | 缺失 | TLB缺失则Page也可能缺失,信息不在主存,也不一定在Cache |
5.3段式虚拟存储器
- 概述
- 段式虚拟存储器中的段是按程序的逻辑结构划分的,各个段的长度因程序而异
- 虚拟地址分为两部分:段号和段内地址
- 虚拟地址到实地址的转换是由段表实现的
- 段表是程序的逻辑段和在主存中存放位置的对照表。段表的每行记录与某个段对应的段号、装入位、段起点和段长等信息。段表中要给出各段的起始地址和段的长度
- 地址转换
-
取出段表基址寄存器中段表的首地址,与虚拟地址中的段号拼接形成对应的段表行
-
根据该段表行的装入位判断该段是否已经调入主存
-
若已调入主存则从段表中读出该段在主存中的起始地址,与段内地址拼接得到对应的主存实地址
- 优点:段的分界与程序的自然分界相对应,因而具有逻辑独立性,易于编译、管理、修改和保护,也便于多程序的共享
- 缺点:由于段长度可变,分配空间不便,容易在段间留下碎片
5.4 段页式虚拟存储器
- 把程序按逻辑结构划分成段,每段再划分为固定大小的页,主存空间也划分为大小相等的页,程序对主存的调入、调出仍以页为基本单位
- 每个程序对应一个段表,每个段对应一个页表,段的长度必须是页长的正数倍,段的起点必须是某一页的起点
- 虚地址分为段号、段内页号、页内地址
- CPU访存:先根据段号得到段表地址;从段表中取出该段的页表起始地址,与虚地址的段内页号合成,得到页表地址;从页表中取出实页号,与页内地址拼接形成主存实地址
- 优点:兼具页式和段式虚拟存储器的优点,可以按段实现共享和保护
- 缺点:在地址变换过程中需要两次查表,系统开销大
5.5虚拟存储器与Cache比较
- 相同点
- 最终目标都是为了提高系统性能,两者都有容量、速度、价格的梯度
- 都把数据划分为小信息块,并作为基本的传送单位,虚拟存储系统的信息块更大
- 都有地址映射、替换算法、更新策略等问题
- 依据程序的局部性原理应用“快速缓存的思想”,将活跃的数据放在相对高速的部件中
- 不同点
- Cache主要是解决系统速度,虚拟存储器是为了解决主存容量
- Cache全由硬件实现,是硬件存储器,对所有程序员透明;而虚拟存储器由OS和硬件共同实现,是逻辑上的存储器,对系统程序员不透明,对应用程序员透明
- 虚拟存储器不命中时对系统性能影响更大
- Cache不命中时,CPU可以和主存直接通信;虚拟存储器不命中时,只能先由硬盘调入主存,不能直接和CPU通信
例题
对概念的理解
- (
P
141
P_{141}
P141)关于虚拟存储器,下列说法正确的是()
I. 虚拟存储器利用了局部性原理
II. 页式虚拟存储器的页面若很小,主存中存放的页面数较多,导致缺页频率较低,换页次数减少,最终可以提升操作速度
III. 页式虚拟存储器的页面若很大,主存中存放的页面数较少,导致页面调度频率较高,换页次数增加,降低操作速度
IV.段式虚拟存储器中,段具有逻辑独立性,易于实现程序的编译、管理和保护,也便于多道程序共享
A. I、III、IV B. I、II、III C. I、II、IV D.II、III、IV
解答:首先I、IV明显是正确的,关键看II、III。对于II,若页面很小,虚拟存储器中包含的页面数会过多,使得页表体积过大,导致页表本事占据的存储空间过大,使操作速度变慢。对于III,若页面很大,主存中的页面数会很少,每次页面装入的时间会变长,每当装入新的页面时,速度会变慢,因此III正确。选A - (
P
141
P_{141}
P141)虚拟存储器中的页表有快表和慢表之分,下列关于页表的叙述正确的是()
A. 快表和慢表都存储在主存中,但快表比慢表容量小
B. 快表采用了优化的搜索算法,因此查找速度快
C. 快表比慢表的命中率高,因此快表可以得到更多的搜索结果
D. 快表采用相联存储器器件组成,按照查找内容访问,因此比慢表查找速度快
解答:快表采用高速相联存储器,它的速度快来源于硬件本身,而不是依赖搜索算法来查找的;慢表存储在内存中,通常是依赖于查找算法。快表和慢表的命中率没有必然联系,快表仅是慢表的一部分拷贝,不能够得到比慢表更多的结果。选D
综合题
解答:
(1)虚拟地址24位;页面大小4KB,因此页内地址占12位,那么高12位就是虚页号;物理地址占20位,页内地址12位,因此高8位表示页框号。
(2)因为采用直接映射方式,因此物理地址划分为主存块号标记字段(12位),Cache块号字段(3位),块内地址字段(5位):
主存块号标记 | Cache块号 | 块内地址 |
---|
(3)虚拟地址001C60H对应的虚页号为:001H,在页表中其有效位为1,因此虚拟地址001C60H对应的页面在主存中;该页面对应的页框号为04H,因此物理地址为04C60H;04C60H = 0000 0100 1100 0110 0000B,对应的Cache块号为011B=3,3号Cache对应的有效位为1,标记为105H,105H
≠
\neq
= 04CH,因此没有命中
(4)由于TLB采用四路组相联,TLB被分为2组,一组有4个页表项。因此虚页号的高11位为TLB标记字段,低1位为TLB组号。虚拟地址024BACH = 0000 0010 0100 1011 1010 1100B,虚页号为 0000 0010 0100B,对应的组号为0B,TLB标记为 0000 0010 010B=012H,查找第0组,发现有标记为012H的页表项,且其有效位为1,则024BACH所在的页面在主存中
更新文档
更新日期 | 更新内容 |
---|---|
2022/6/23 | 订正文中的格式错误 |