赞
踩
注意:
主存---辅存(即虚拟存储器)
:解决主存容量不够的问题。cache---主存
:解决主存与CPU速度不匹配的问题。- cache和主存都可以直接与CPU交换数据,而辅存必须先加载到主存后才能被CPU访问。
- cache-主存是由
硬件
自动完成,所以其数据交换对任何程序员都是透明
的。
主存-辅存是由硬件+操作系统
完成,所以其数据交换并不是对任何程序员都透明。
- 按存储介质分类
- 半导体存储器(主存、cache)
- 磁表面存储器(磁盘、磁带)
- 光存储器(光盘)
- 按存取方式分
- 按地址寻址
- 随机存储器(RAM): 读取任何一个存储单元所花时间相同,与存储单元所在物理位置无关。比如,内存
- 动态随机存储器(DRAM):用做主存
- 静态随机存储器(SRAM):用做Cache
特别的,ROM也能随机存储
- 顺序存储器(SAM): 读取一个存储单元所需时间取决于其物理位置。比如,磁带, CD-ROM
CD-ROM != ROM
- 直接存储器(DAM):既有随机存储,又有顺序存储的特性。先直接选取信息所在区,然后顺序存取。比如,磁盘。
- 按
地址
或者内容
寻址
- 相联存储器:可以按照地址,也可以按照内容检索到存储位置进行读写,比如,
快表
、相联Cache
- 按信息的可更改性分
- 只读存储器(ROM): 只能读,不能写。
引导程序
就存放在ROM中- 读写存储器:即可读,又可写。
- 一个例题:
- 按信息的可保存性分
- 断电后
- 易失性存储器:信息丢失。
- 非易失性存储器:信息不丢失。 ROM
- 读取信息后
- 原存储信息被破坏,需要重写。比如DRAM芯片
- 原存储信息不被破坏,比如SRAM芯片、磁盘、光盘
- 性能指标
- 容量
- 价格
- 存储速度 = 存储字长/存储周期
注意:
- 存取时间不等于存取周期,前者小于后者。
存取时间
:从存储器读出或者写入一次
信息所需要的平均时间。
存取周期
:连续
两次访问存储器之间所必须的最短时间间隔。- DRAM需要进行
刷新
操作,所以其恢复时间会比较长。- 恢复时间内CPU不可以对该存储体进行访问【如果有多个存储器,但是能对其他存储器进行访问】
- 计算存储速度:
注意:
- 集成度:DRAM比较慢,需要集成。
- 发热量:SRAM有六个触发器,所以功耗大。
- 刷新:DRAM是电容,电荷会慢慢消失,所以需要刷新,保持电容电荷。
- 地址复用:地址线引脚数目减半,先传行地址,再传列地址,需要两次。但是会增加行通线和列通线(
并用片选线代替行通线
)
一般规则每一个
SRAM或者DRAM:地址线数 + 数据线数 + 1根片选 + 读写线数(1/2根)
【做题时,默认DRAM使用地址复用,而SRAM没有,这是考点】
- 看清题目
· 刷新的分类
- 分散刷新
- 集中刷新
- 异步刷新
- 注意:
- 刷新是由
存储器独立完成
的,并不需要CPU控制
,即对CPU透明- 刷新是以
行
为单位,故刷新时只需要行地址
- 一次完整的刷新过程占用一个存取周期。
注意:
分散刷新 = 透明刷新
,机器的存取周期中的存取时间用来读写,恢复时间用来刷新,因此不存在死时间
。集中刷新
和异步刷新
都存在死时间
,异步刷新缩短了死时间。- 在工作中DRAM的内容会产生变化。-----错误,可以通过刷新机制解决。
- 刷新周期通常是
下取整
注意:
随机存取
与随机存储器(RAM)
不同,只读存储器(ROM)也是随机存取的。因此,支持随机存取的存储器不一定是RAM
why: 如果数据总线的位数大于单块存储芯片的位数,则需要进行位扩展,从而充分利用总线位数,提高系统效率。
注意:位扩展的各芯片,
地址线并联相同
(A, CS, WE),只有数据线不同
。
注意:线选法是一个地址线中多出的A,每个A对应一个字扩展芯片的CS,用做片选。其余相同
注意:线选法是一个地址线中多出的A,用门电路连接字扩展芯片。能够连接更多的芯片
习题:
- 给出容量算芯片数
- 算地址所在芯片
- 判断扩展方式
综合例题:
- 双端口RAM、多模块存储器都是
提高CPU访存的速度
。
- 双通道:RAM是指同一个存储器有左右两个
独立编址
,分别具有两组相互独立的地址线、数据线和读写控制线,允许两个独立的控制器同时异步
的访问存储单元。
注意:
- 若发生冲突,则对一个CPU发送
“忙=0”
信号,使得该CPU暂停访存- 速度 * n
- 单体多字存储器:若有m个存储器,则存储单元m个字,
总线宽度也扩展为m个字
。- 缺点:灵活性不高。只有一系列访问地址存放在一个存储单元内,否则效果不明显。如下图,访问这四个连续的字,CPU需要读取两次,而低位交叉比较灵活,可以克服这个缺点。
- 多体并行存储器:
总线宽度不会扩展
,为单个存储器长度。
高位交叉编址 = 顺序方式
- 优点:当一系列访问地址不连续访问,并且在不同的存储模块内时,则可以并行访问,加快CPU访存速度
- 缺点:当一系列访问地址连续,会在一个或两个存储体内,不能被并行访问
低位交叉编址 = 交叉方式
- 优点:当一系列访问地址连续,或不连续当时在不同的存储模块中时,都可以并行访问
- 缺点:当一系列访问地址恰好在一个存储模块中时,不能并行访问
- 注意:
一系列访问地址可能是连续的也可能是不连续的
;
不连续时,也可能在不同的存储模块中
, 从而并行访问
- 注意:
低位交叉编址的存储体个数 >= T/r
,最好是相等
- 低位交叉编址的时间计算,画流水线图
- 低位交叉编址存储次数的判断
- 交叉方式中地址访问的冲突问题:
连续m个中相同则冲突
。
- 综合例题
for循环
数组
注意:
for循环
访问数组
,则同时满足时间局部性和空间局部性原理
CPU
与主存速度不匹配的问题, 即加速CPU对主存的访存操作。cache
由SRAM(静态随机存储器)
组成,通常放在CPU内部。主存物理地址【CPU只发送主存物理地址】
,查找地址映射表
判断改地址所在块是否被调入cache。若调入,则直接从cache中存取数据;若不在,则直接访问主存,并且同时将改主存物理地址所在块
的数据复制一份到cache中。时间局部性
和空间局部性
原理】注意:
- 通常主存的“块”又叫
页/页面/页框
,cache的块又叫行
- 将主存块复制到cache时,要标记主存块的信息,即
标记位
【标记位数与映射方式有关】。然后再用1位
来表示有效位
,
每一个行都有一个标记位,这与映射方式无关
如下图所示:
注意:标记项 = 标记Tag + 有效位 [ + 脏位 + 替换算法位]
- cache总位数或容量的计算
- 求cache地址:
cache地址 = 所在块 + 块内地址
- Cache只是副本,用来加速。存储系统指主存和辅存,故
存储系统容量 = 主存+辅存
- 主存中指令和数据一起存放在内存中,而
cache中指令和数据是分离
----->为了减少指令流水线资源冲突
通常使用平均访问时间
来衡量cache的性能:
注意:
- cache的平均访问时间有两种公式,注意看清题目给的是同时还是非同时。
- 根据程序求缺失率【
关键:a = a +1 是两次访问存,一次读,一次写
、a = 3一次写
】
注意:若给定一段程序,求cache命中率,只算访问数组,其他变量不看
cache块号 = 主存块号 % cache块总数
组号 = 主存块号 % 分组数
。注意:
没说按字寻址时,都默认按字节寻址。
注意:全相联映射中,cache的标记信息为对应主存块号。
CPU
访问想访问主存信息时:
CPU
会遍历所有cache块的标记位
,看是否等于主存地址高22位
cache
命中。优点:cache空间利用充分,命中率高
缺点:查找标记最慢。
注意:全相联映射的任意放,指的不是随机放,而是某个主存块在不同的时间可能对应不同的cache块。做题时,其是
顺序扫描
,第一个空cache则存放数据。
注意:和直接映射类似,只有当cache的组数为
2^n
时,才可以优化cache的标记位数。
CPU
访问想访问主存信息时(拿上图举例):
cache
组。组内某个标记匹配且有效位=1,则
cache`命中。组相联映射是全相联映射与直接映射的结合,所以其综合效果最好。
- 注意:
n路组相联指一组有n个行
,而不是n组- 例题:
- 求组号
- 给出地址序列,求命中率
- 求标记位
- 综合应用
注意:只有当cache的块数为
2^n
时,才可以优化cache的标记位数。
CPU
访问想访问主存信息时(拿上图举例):
cache
块。前19位
与cache行中的标记位
相等且有效位=1,则cache
命中。优点:查找标记快
缺点:cache空间利用率低,命中率低
- 例题:
- 标记位 = 主存位 - 组位 - 块内位
标记位 = 主存容量 / cache容量
【因为其是1路组相联,2组位*2块内位 = cache容量】
Cache
很小,主存很大。如果Cache
满了怎么办?这就需要相应的块被替换,具体有RAND
、FIFO
、LRU
、LFU
。
注意:由于直接映射的位置是固定的,所以
直接映射不需要考虑替换算法
,只有全相联映射和组相联映射才考虑替换算法【在cache块满的情况下才考虑】。
上图是手算结果。
注意:
- 其符合程序的局部性原理,所以其效果是最好的。
- 标记位 + 有效位 +
记数位
【记数位位数 = n,cache块数 = 2^n】- 采用计数器,计数器标记的是
未被访问次数
,故取最大
替换
不可以手算,得采用计数器
注意:
- count标记的是被访问次数。
- count可能会不断增大,变为一个很大的数,故
计数位不能确定
注意:
- 以上
都
可能发生抖动
现象:频繁的换入换出现象。- 只有
LRU
用到了程序的局部性原理,其他的都没有,所以其效果最好。- 若Cache块的总数为2^n,则
LRU
的计算器的位数 = n
CPU修改了cache中数据副本,如何确保主存中数据母本的一致性?这就需要用到写策略:
- 写命中: CPU对某个地址要进行写,且该地址的数据已经被复制到cache中。
- 写不命中: CPU对某个地址要进行写,而该地址的数据没有被复制到cache中。
- 写回法:当CPU对cache写命中时,只修改cache的内容,而不修改内存的内容,只有当此块被换出的时候才写回主存。
- 优点:减少了CPU访问主存的次数,适用于
写操作密集的情况
- 缺点:存在数据不一致的问题
- 注意: 写回法的cache还需要增加一个标记位,即
脏位
,为1表示要写回。
- 全写法:当CPU对cache写命中时,将数据同时写入cache和主存
- 缺点:增加了CPU访问主存的次数
- 优点:能保证数据的一致性,适用于
安全性高,不允许由数据不一致的情况
- 注意:全写法通常搭配
写缓冲
使用。
注意:
- 如果使用写缓冲,则CPU是将数据直接写入cache和写缓冲区,在CPU做其他事情的时候,由一个专门的电路将写缓冲中的数据写入到主存中。
- 使用写缓冲有一个缺点,就是在CPU频繁写的时候,回使得写缓冲饱和,使得CPU阻塞,不得不停下手中的事情,来立即写回数据。
当CPU对Cache写不命中时只写入主存,把主存中的块调入Cache
,在Cache中修改。通常搭配写回法
使用。
缺点:每次不命中,CPU都需要从主存中读取一块
当CPU对Cache写不命中时只写入主存,不将主存中的数据调入Cache
。通常搭配全写法
使用。
注意:非写分配法,只有
读
未命中才调入Cache
注意:
- 总线带宽 = 位数 /
实际的时间开销而不是总线周期
- 总线的突发传送:没给数据,则默认送首地址即可连续传送
一个块
- 记住突发传送的过程,
分三步
。- 主存采用交叉方式,关于时间的计算是
流水线模式
。
虚拟二字的含义:传统的存储系统有一次性 和 驻留性
两个问题,虚拟存储器就是解决这两个问题,变为多次性 和 对换性
,从而从逻辑上扩充了主存容量。
而虚拟存储器一定采用页式、段式、段页式管理方式,因为只有这样才能满足多次性和对换性。因此,其能够很好的满足程序的空间局部性原理
(页式、段式、段页式管理方式又叫请求页式、请求段式、请求段页式,区别是一般页式存放所有的块,故其页表要比虚拟的大且不会发生缺页情况,因为前者一次装入全部程序)
注意:
- 一次性:作业必须一次性全部装入内存后才能运行
- 驻留性:一旦作业被装入内存,则会一直占据内存,直至运行结束。
- 多次性和对换性需要解决2个问题:
- 进:如何判断缺页
- 出:若内存空间不够,OS如何将暂时不用的信息换出到外存。
虚拟页式存储:以分页式管理方式的虚拟存储器。
页式管理方式:一个进程在逻辑上被分为若干个大小相等的页面
,页面大小与主存块
的大小相同。每个页面可以离散
的放入不同的主存块中。
注意:
- 页表的标记项和cache地址映射表的3个字段一样。
- 虚拟存储器采用的
写回法
。- 页表存放在
主存
中。- 页表核心字段
逻辑页号 + 主存块号
页表不可很大
—>缺页率高,也不可很小
—>页表占的空间大,都会使得速度变慢- 执行某条程序,缺页引起中断,中断处理完后,
返回到缺页的指令执行,而不是缺页指令的下一条指令
- 缺页处理后,页表的修改
每次将程序加载到主存的位置是不一样的,我们不可能提前预知进程被放在哪里,所以指令的地址码使用的是逻辑地址
。
注意:
页表寄存器
逻辑地址--->物理地址--->cache/主存
页表缺失,则TLB和cache一定缺失
注意:
- 快表是类似于cache的存在,故其也有三种映射方式。但是,映射方式只会影响
标记字段位数(即逻辑块号)
,不会影响页框号字段。- 快表中逻辑块号字段是隐藏表示,但是页表是直接表示。
页式方式只是满足了程序空间局部性
原理,创建快表满足程序时间局部性
原理。
注意:
- 访问快表比慢表(即页表)更快的原因:
- 快表是放在一个
SRAM
存储器中- 快表是一种
“相联寄存器”
,可以按内容和地址寻址,而根据内容逻辑号查找对应的主存号会更快。- 若快表没命中,会访问页表,并将信息复制到快表中。
注意:
- 段表是
段基址 + 段长
- 段表核心字段:
逻辑段号 + 段基址 + 段长
注意:段表存放在
段表寄存器
缺点:地址变换过程中需要两次查表,系统开销较大。
程序先分段,再分块:虚拟地址 = 段号 + 段内页号 + 页内地址
注意:
- 段表的字段变为了标识页表,即
段表字段
充当页表寄存器
的作用。若假设程序被分为n段,则该程序总共存在1个页表,n个页表- 段页式先分段后分页,类似于多级页表,故次级页表一个占一个块,段号中用
页表存放块号
来代替页表基址。
注意:只有
FIFO
算法会产生Belady
异常。(Belady异常:所分配的物理块数增大,但是缺页故障数不减反而增加的异常。)
例题:
- 相同:
- 都把数据划分为小的信息块,并作为基本的传递单位(只是对象不同,cache划分对象为主存,而虚存划分对象为磁盘程序,故一般虚存的块更大)
- 都有地址映射、替换算法、更新策略等。
- 都应用了程序的局部性原理.。虚存的页式,段式,段页式都满足
空间局部性
,若增加快表,则满足时间局部性
。- 不同
- 虚存主要解决主存容量,cache解决CPU与主存速度不匹配
- cache全部由硬件组成,对
所有程序员透明
。
虚存由os和硬件组成,故其对系统程序员不透明,对应用程序员透明
- 对不命中的影响。CPU速度是主存的10倍,主存速度是辅存的100倍,故不命中时,对虚存的影响更大。
- CPU可以和主存直接相连,不命中时,CPU可以直接访问主存;但是,CPU不与辅存相连,虚存不命中时,只能从辅存中读数据到主存。
注意:
a = a + 1
是一次读 + 一次写
注意:换出的页框即换入的页框,记得都要修改
注意:虽然不知道虚拟页号所映射的主存块号,但是虚拟地址中的页内地址包括了cahce的组号,依旧可以求解。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。