计算机组成原理-笔记
作者:互联网
第三章 存储器
3.1.1存储器的分级结构
-
基于程序的局部性原理:某一段时间内频繁访问某一局部的存储器地址空间,对其范围之外的地址空间则很少访问的现象。(时间局部性,空间局部性)
时间局部性:最近被访问的信息可能还被访问
空间局部性:最近被访问信息的邻近地址的信息也可能被访问
-
多级存储系统的组成
内存(内存储器):存储正在执行的程序指令和数据;容量小、速度快、价格高
外存(辅存):CPU不能直接访问,存储容量大、价格便宜、速度低;
Cache:存放内存中正在被使用的信息快;在CPU和内存之间;
3.1.2 存储器的分类
-
按存储介质分
半导体存储器:用半导体器件(MOS管)组成的存储器;(系统主存Cache)
磁表面存储器:用磁性材料(磁化作用)做成的存储器;(软盘、硬盘、磁带)
光盘存储器:用光介质(光学性质)构成的存储器;(光盘)
-
按存取方式分
随机存储器:存取时间和存储单元的物理地址无关;(半导体存储器)
顺序存储器:存取时间和存储单元的物理地址无关;(磁带)
半顺序存储器:存取时间部分依赖于存储单元的物理位置;(磁盘存储器)
-
按内容的可变性分
只读存储器 ROM --> read only memory
随机读写存储器 RAM --> random access memory
-
按信息易失性分
易失性存储器:断电后信息即消失(半导体存储器)
非易失性存储器:断电后仍然能保存信息(磁盘光盘)
-
按在计算机系统中的作用分
主存储器:能被CPU直接访问,速度快,用于保存系统当前需要的所有程序和数据(半导体存储器)
辅助存储器:不能被CPU直接访问,速度较慢,用于保存系统中所有的程序和数据(磁盘光盘)
高速缓存存储器(Cache):能被CPU直接访问,速度快,用于保存系统当前运行中频繁使用的程序和数据(半导体)
控制存储器:CPU内部的存储器
速度:控制存储器 > 高速缓冲存储器 > 主存储器 > 辅助存储器
材质: 半导体 半导体 半导体 磁盘光盘
3.1.3 主存储器的技术指标——存储容量
存储容量:指存储器能存放二进制代码的总数。
存储容量=存储单元个数 × 存储字长
存储容量=存储单元个数 × 存储字长 / 8 B(字节)
3.1.3 主存储器的技术指标——存储速度
-
存取时间:从启动一次访问操作到完成该操作所需要的时间,以纳秒(ns)为单位,分为写入时间和读出时间
-
存取周期:存储器连续启动两次独立访问操作所需要的最小时间间隔,以纳秒为单位。
存取周期 = 存取时间 + 回复时间
-
存储器带宽:每秒从存储器进出信息量的最大数量。单位:bit/s或Byte/s,位/秒或字节/秒
存储器带宽 = 每周期的信息量 / 周期时长
3.2 SRAM存储器
随机存储器{ 静态RAM SRAM --> Static Random-Access-Memory
{ 动态RAM DRAM --> Dynamic Random-Access-Memory
静态RAM 主要用于构成Cache
优点:访问速度快,不掉电就可以永久保存信息
缺点:集成度低,功耗大,价格高
动态RAM 主要用于构成主存
优点:集成度高,功耗约为SRAM的1/6,价格低
缺点:访问速度慢,电容放电会导致信息丢失,因此需要定期充电,刷新存储单元
SRAM存储器的组成
-
存储体:用来存储数据
-
地址译码器:将CPU发出的地址信号转换成存储单元选通信号的电路
-
移码驱动器:用于增强移码输出选择线的驱动能力,驱动方式:
单译码:一个地址对应一个存储单元
双译码:被选单元有x,y两个方向确定
-
I/O控制电路,一般包括读写电路和放大电路
3.3 DRAM存储器
DRAM需要定期刷新存储器,以保持信息
刷新原因:DRAM的基本存储元——电容,会随着时间和温度而减少
刷新:在固定时间内对所有存储单元,通过“读出-写入”的方式恢复信息的操作过程
刷新方式:以矩阵的行为单位刷新
刷新周期:从上一次刷新完成到下一次刷新完成
DRAM的刷新方式
集中式刷新:在一个刷新周期内,利用一段固定时间,依次对存储矩阵的所有行逐一刷新,在此期间停止对存储器的读/写操作;
缺点:存在死区时间,影响CPU访问
分散式刷新:在一个刷新周期内,分散地刷新存储器的所有行;
既不会产生明显的读写停顿,也不会延长系统的存取周期
3.3.5 存储器容量的扩展
位扩展:存储单元数不变,每个单元的位数增加(字长);
扩展方法:
地址线:各芯片的地址线直接与CPU地址线连接;
数据线:各芯片的数据线分别与CPU数据线的不同位连接;
片选及读写线:各芯片的片选及读写信号直接与CPU的访存及读写信号连接;
CPU对该存储器的访问是对各位扩展芯片相同地址单元的同时访问。
字扩展:每个单元位数不变,总单元个数增加
地址线:各芯片的地址线与CPU的低位地址线直接连接;
数据线:各芯片的数据线直接与CPU数据线连接;
读写线:各芯片的读写信号直接与CPU的读写信号连接;
片选信号:各芯片的片选信号由CPU的高位地址和访存信号产生;
CPU对该存储器的访问是对某一字扩展芯片的一个单元访问
一般会借助2-4译码器或3-8译码器辅助片选
如果是字位同时扩展,则先进行位扩展,再进行字扩展
3.4 只读存储器和FLASH存储器
3.4.1 只读存储器
掩模式ROM
定义:数据在芯片制造过程中写入,不能更改;
优点:可靠性、集成度高,价格便宜;
缺点:通用性差,不能改写内容;
一次编程ROM(PROM)
定义:用户第一次使用时写入确定内容;
优点:用户可根据需要对ROM编程;
缺点:只能写入一次,不能更改;
多次编程ROM
定义:可用紫外光照射(\(EPROM\))或电擦除(\(E^2PROM\))多次改写其中内容;
优点:通用性较好,可反复使用;
3.4.2 FLASH存储器
Flash存储器
一种高密度、非易失性的读/写半导体存储器;
以E2PROM为基础,电擦除方式修改其内容的;(注意课本上的错误,不是 \(EPROM\);)
\(E^2PROM\)以字节为单位更新数据,而闪存则以块为单位。
目前数码产品中用的都是闪存卡;
U盘、CF卡、SM卡、SD/\(MMC\)卡、记忆棒、TF卡……
虽然外观、规格不同,但是技术原理都是相同的;
闪速存储器的可擦写次数一般在1万次以上,也有人说有的U盘可多达100万次左右(无法核实)。
3.5 并行存储器
3.5.1 双端口存储器(空间实现加速)
空间并行技术:同一个存储体使用两组相互独立的读写控制线路,可并行操作;(会发生冲突)
读写特点:访问不同存储单元时可以同时访问,访问同一存储单元时,会发生冲突,可使用BUSY信号控制先后顺序
显卡上的存储器一般是双端口存储器
3.5.2 多模块交叉存储器(时间实现加速)
存储器的模块化组织方式
顺序方式:通过直接增添模块来扩充存储器容量比较方便,各模块串行工作,存储器带宽受限
交叉方式:块数据传送时,可以大大提高存储器带宽,模块间的依赖性性强,且不宜进行存储器容量的扩充
多模块交叉存储器在CPU所访问连续存储空间时,主存的访问速度将会大幅度提高
顺序方式(高位交叉方式)
每个模块中的地址是连续的
某个模块进行存取操作时,其他模块不工作,某一个模块出现故障时,其他模块正常工作
存储单元地址:高位——模块号, 低位——模块内的字号
交叉方式(低位交叉方式)
每个模块的地址单元是不连续的,连续的单元的地址分布在相邻的不同模块中;
对于数据成块传送,各模块可以实现多模块流水式并行存取;
存储单元地址:低位——模块号, 高位——模块内的字号
交叉式存取图解
访存冲突:但是低位交叉存储可能导致访存冲突,当访存地址在相邻的四次访存中,出现在同一存储块内,就会发生访存冲突。
3.6 高速缓冲存储器Cache
使用Cache的原因:CPU速度越来越快,主存与CPU之间速度差距越来越大,影响CPU工作效率
Cache的作用:
在CPU和主存之间加一块高速的\(SRAM\)(Cache);
主存中将要被访问的数据提前送到Cache中;
CPU访存时,先访问Cache,若没有再进行数据调度。
使用Cache的依据:程序的局部性原理
CPU访问Cache或者主存时,数据交换单位按“字”交换,此处的字指:数据线的位数
Cache与主存交换数据以块为单位,Cache的一块也称作一行,Cache每一行都设置有标记,CPU访问数据时先访问标记
相邻层之间数据的传递
Cache的基本构成
存储体:基本单位为字,若干个字构成一个数据块
地址映射变换机构:用于将主存地址转换为Cache地址,已利用CPU发出的主存地址访问Cache
替换机构:更新Cache中存储数据的机制
相联存储器:即Cache的块表,快速指示所要访问的信息是否在Cache中
以及读写控制逻辑
Cache的命中率:命中率是指CPU要访问的信息在Cache中的比率;(一般>95%)
\[命中率 = 访问信息在Cache中的次数/访问总次数 * 1 \]\[失效率:1 - 命中率 \]影响命中率的主要因素
Cache 容量:过小时,局部信息装不完,命中率低。
过大时,对提高效率不明显,且成本高。
Cache中块的大小:
一般用一个主存周期所能调出的单元数(字或字节)作为一个块大小。
Cache/主存系统的平均访问时间
\[t_a = ht_c + (1 - h)t_m\tag{1} \]\[t_a表示Cache/主存系统的平均访问时间\tag{2} \]\[h 表示Cache的命中率\tag{3} \]\[t_c 和 t_m分别表示Cache的访问时间和主存的访问时间\tag{4} \]-
Cache的读操作
- 查找相联存储器,判断所要访问的信息是否在Cache中;
- 若命中,经地址变换机构,变换为相应的Cache地址;
- CPU直接读取Cache获取数据;
- 若未命中,则CPU访问主存,并判断Cache是否已满;
- 若Cache未满,将该数据所在块从主存中调入Cache;
- 若Cache已满,使用某种替换机制,使用当前数据块替换掉Cache中的某些块。
-
Cache的写操作
- 查找相联存储器,判断所要访问的信息是否在Cache中;
- 若命中,经地址变换机构,变换为相应的Cache地址;
- 使用某种写策略将数据写入Cache或主存。
- 若未命中,则使CPU直接写主存数据;
- 同时根据写策略,决定是否将该块内容调入Cache;
Cache的替换策略
1. 最不经常使用算法(LFU)
- 替换原则
- 将一段时间内被访问次数最少的那行数据替换出去;
- 使用方法
- 每行设置一个计数器,从0开始计数;
- 每访问一次, 被访行的计数器增1;
- 当需要替换时,将计数值最小的行换出,同时将这些行的计数器都清零。
- 特点
- 这种算法将计数周期限定在对这些特定行两次替换之间的间隔时间内,不能严格反映近期访问情况。(可能某个块刚被调入,计数值比较低,很容易被替换出去)
2. 近期最少使用算法(LRU)
- 替换原则
- 将近期内长久未被访问过的行替换出去。
- 使用方法
- 每行也设置一个计数器;
- 每访问一次,被访行的计数器清零,其它各行计数值加1;
- 当需要替换时,将计数值最大的行换出。
- 特点
- 这种算法保护了刚调入到Cache中的新数据行,使Cache的使用率较高。
3. 随即替换算法
- 替换原则
- 从特定的行位置中随机地选取一行换出。
- 特点
- 在硬件上容易实现,且速度也比前两种策略快。
- 但降低了命中率和Cache工作效率。
Cache的写策略
1. 写回式
- 写入策略
- 只修改Cache的内容,而不立即写入主存;
- 只有当此行被换出时才写回主存。
- 优点
- 减少了访问主存的次数;
- 缺点
- 存在Cache与主存不一致性的隐患。
- 实现该方法时,Cache行必须配置一个修改位,以反映此行是否被CPU修改过。
2. 全写式
- 这种策略又称写透式
- 写入策略
- Cache与主存同时发生写修改,因而较好地维护了Cache与主存的内容的一致性。
- Cache中无需设置修改位以及相应的判断逻辑。
- 缺点是降低了Cache的功效。
- 每次同时写入主存和Cache,使写入速度变低。
3. 写一次法
- 写入策略
- 基于写回法,并结合全写法的写策略;
- 写命中与写未命中的处理方法与写回法基本相同,只是第一次写命中时要同时写入主存。
- 该写入策略适用于包含多个Cache的系统中;
- 第一次Cache写命中时,将数据写入主存和另一个Cache中;
- 使系统中的其它Cache可以及时更新或废止该块内容,从而维护系统中该块数据的一致性。
Cache与主存的地址映射
-
地址映射
主存中数据块调入Cache中时,主存数据块与Cache行之间的映射关系;
-
地址变换
CPU访存时,将主存地址按映射函数关系变换成Cache地址的过程;
-
地址映射的方式
全相联映射、直接映射、组相联映射;
全相联映射(Associate Mapping)
映射关系:主存中任意字块可以调进Cache中任一行中;
地址映射:主存中的数据块调入Cache时,可以调入Cache中的任一空行;其中,主存块号存于Cache的行的标记中。调入的同时,将主存标记(即主存块号)和Cache的行号同时写入块表。
地址变换:
- CPU访存时,发出主存地址;
- 将主存标记作为关键字,送入块表中检索每一个单元;
- 命中时,读出对应单元中的Cache行号;
- 使用Cache行号和主存地址中的块内地址访问Cache;
全相联映射示意图
全相联映射地址变换示意图
全相联映射主存地址格式
主存地址格式:前 m 位是主存块号,也称为主存标记,后 b 位是块内地址,总位数位 m + b 位
Cache地址格式:前 c 位是Cache行号,后b位是块内地址,总位数为 c + b 位
块表的基本结构:
- 单元数目与Cache的行数一致
- 每个单元保存:主存块号和Cache行号
块表的大小应为 \(2^c * (m + c)\) 位
全相联映射的特点
优点
灵活性好(最理想)
Cache中只要有空行,就可以调入所需要的主存数据块;
缺点
成本高
块表单元字长为m+c位,需要较大容量的Cache块表;
速度太慢
访问Cache时,需将所有标记比较一遍,才能最后判出所需主存中的字块是否在Cache中;
一般较少使用。
直接映射(Direct Mapping)
- 映射关系:主存中每一块数据只能调入到Cache中特定的块(行)中;相当于将主存分成了若干区。映射函数为:
Cache行号为 i,主存块号为 j ,c是Cache行地址的位数,2^c即表示Cache有多少行
-
地址映射:主存中数据块调入Cache中时,只能调入特定的行;同时,将主存标记写入块表中与Cache行地址相同的单元(意思是,Cache中一个行,在块表中有一个专门的对应存储空间,此时只需将主存块号的前 m - c位存储到块表中对于Cache的位置即可,假设主存块号位数为m,则主存标记的位数为m-c位。)
-
地址变换:
- CPU访存时,发出主存地址;
- 从主存地址中截取出Cache行号,访问块表的对应单元;
- 若该单元中数据与主存标记相同,则命中,否则未命中;
- 命中时,使用Cache行号和块内地址访问Cache;
直接相联映射示意图
Cache和主存地址格式
主存地址有 m + b 位, Cache地址有 c + b 位
解释:
m 表示主存的块号
c 位Cache行号
b位块内地址
Cache地址格式:
主存地址格式:
主存中每 2 的 t 次方个块对应同一Cache行(块)
块表基本结构
- 单元数目与Cache行数保持一致
- 每个单元只保存 主存标记
块表的大小为:
\[2^c \times (m - c) bit \]直接相联映射Cache的特点
- 特点
- 一个主存块 只能调入Cache的一个特定行中 。
- 优点
- 该映射函数实现简单,查找速度快;
- 主存地址的中间c位即为Cache的行地址;
- 在块表对应单元中,使用高t位地址(主存标记)进行比较,决定是否命中;
- 缺点
- 灵活性差;
- 主存的2t个字块只能对应唯一的Cache字块,即使Cache中别的字块空着也不能占用。
组相联映射(Set-associate Mapping)
组相联映射是直接映射和全相联映射的一种折中方案。
- 映射关系:将Cache中的行分成若干组,主存中的每一块只能映射到Cache的特定组中,但是可以调入特定组的任一行中。组间为直接映射,组内为全相联映射。
设Cache有 u 组,每组 r 行,j 为主存块号,则映射函数如下:
\[组号:q = j \mod u \]当Cache一组中包含 r 行时,通常称为,r路组相联映射。
组相联映射示意图
主存地址格式:
Cache地址格式:
块表基本结构:
- 单元数目与Cache行数保持一致(但是)
- 每个单元存储 主存标记和Cache的组内行号
块表的大小为:
\[2^c \times (t + r) \]t 为主存标记的位数,r为行内组号的位数
地址映射:主存中的块调入到Cache中时,只能调入特定的组;在改组内,可选择任意行调入数据;调入的同时,将主存标记和Cache组内行号写入块表
地址变换:
- CPU访存时,发出主存地址;
- 从主存地址中截取出Cache组号,找到块表的对应组;
- 在组内,使用主存标记进行检索;
- 命中时,使用Cache组号、Cache组内行号和块内地址访问Cache;
例题
某系统的存储器为2MB,每字块为8个字,每字32位,若Cache为16KB,采用字节编址方式。
问:
(1)采用直接映射,主存地址格式是什么?
(2)采用全相联映射,主存地址格式是什么?
(3)采用16路组相联映射,主存地址格式是什么?
答:
- 2MB存储器共21位地址
- 16位块地址,3位块内字地址,2位字节地址
- 16KB的Cache共14位地址
- 9位行地址,3位行内字地址,2位字节地址
主存地址格式
直接相联映射:
全相联映射:
16路组相联映射:
标签:Cache,计算机,存储器,主存,笔记,访问,地址,原理,CPU 来源: https://www.cnblogs.com/paper-plane/p/16526775.html