CO-3-存储系统
2021-07-29 20:19:29 0 举报
AI智能生成
计算机组成原理 第三章 存储系统 知识点梳理
作者其他创作
大纲/内容
读取是破坏性的,需要重写
成本低,集成度高,功耗低,慢
即使不断电,电容电荷也只能维持2ms
栅极电容
适合用于主存:DRAM
A高B低:1A低B高:0
需要两根线读写数据,读取不破坏原数据
成本高,功耗高,集成度低,快
只要不断电,触发器状态不改变
双稳态触发器
适合用于Cache:SRAM
存储元件不同导致性能差异
硬件自动完成,无需CPU控制
默认一般2ms刷新一次,一次刷新一行(行列地址的行)
集中刷新(有死区)每2ms逐行刷新一次
分散刷新(无死区,但存取周期变长)每存取一次刷新一次,每次刷新新的一行
既避免了CPU连续等待时间过长又充分利用2ms刷新周期减少了刷新次数
异步刷新(有死区,但是缩短了)利用专用电路每隔一段时间t刷新一行t=2ms/行数
专用刷新电路,读一行重新写入,占用一个读写周期要在2ms内保证每行至少刷新一次
DRAM的刷新
SRAM行列地址同时发送,需要占用n位地址线
引脚减半
RAS/CAS线也可整合为1根
片选线借用行选通/列选通实现
DRAM行列地址分两次分别发送,占用n/2位地址线并引入新的行选通/列选通控制线RAS、CAS
DRAM的地址线复用技术
SRAM和DRAM高频考点
高位作为片选线和控制线
任何时候地址总线引出的线,都是低位接入芯片地址线
:高电平有效:低电平有效
存储器芯片的信号线一般有:span class=\"equation-text\" data-index=\"0\" data-equation=\
单块芯片↔CPU
所谓位扩展,就是扩展了每个存储芯片的位数,字数不变(8K*4b→8K*8b)
不同芯片的读出数据可以同时经由DB传输
同时读取不同芯片的同一个地址的数据
数据总线宽度>存储芯片字长→位扩展法
可以理解为在“有多少字”这一维度上扩展了芯片的容量。实际上增加了主存的字数(8K*8b→16K*8b)
额外的地址线1对1地连接对应的存储芯片
地址空间不连续
线选法
额外的地址线产生的种组合与等量的芯片一一对应
需要一个n-译码器
地址空间连续。但电路复杂(译码器)
片选法
数据总线宽度=存储芯片字长→字扩展法
字位扩展法
多块存储芯片↔CPU
通常译码器(如)还有类似的使能引脚,可以提供:全1,全0,是否接受输入的功能
芯片是考点
CPU的AB产生地址信号后,可能不稳定,CPU可以等AB稳定后再向译码器发出(主存访问请求)信号以保证译码器选片是稳定的
译码器补充
主存↔CPU连接
任何一个主存块,可以存在任何一个Cache块中
用地址的块号部分,逐个检查Cache中的标记
若存在,且有效位=1,则命中
按地址的块内地址访问Cache块内数据
CPU访问时...
查找标记最慢,最慢要对比所有块的标记
存储空间利用充分,命中率高
全相联映射
任意主存块只能存放在某个特定的Cache块
目标Cache块号=主存块数%Cache总块数
借此可以优化标记(去掉标记低n位(反正一样))
主存块号也可分为标记、Cache块号两部分
当Cache块数为时,主存块号低n位直接对应其在Cache中的位置
速度最快
即使Cache有空位,数据也不一定能调入Cache,命中率低
空间利用率低
用主存地址块号的低n位,查找对应的Cache块
若有,且标记位与原块号(标记位部分)相同,且有效位=1,则命中
直接映射
任意一部分主存快只能存放在某组特定的Cache块
组号=主存块号%组数,目标Cache块号=目标Cache组空位
折中
主存块号也可分为标记、Cache组号两部分
当每组块数为时,主存块号低n位对应其在Cache中的组号
用主存地址块号的组号部分,寻找目标Cache组
若Cache组内有标记位与原块号(标记位部分)相同,且其有效位=1,则命中
组相联映射按Cache每组块数,可称为n路组相联映射
用于标记当前Cache块内数据来自于哪个主存块
初始为0,但并非意味着保存了0号主存的数据
标记
用于表示标记是否有效,1有效
有效位
Cache与主存的映射方式(3)
只有Cache全满才需要替换
要在全局选择替换对象
全相联
需要算法
对应位置非空则直接替换
组满需要替换
在分组内选择替换对象
组相连
场景
若已满,随机选择一个替换
不考虑局部性原理,导致H降低,效果不稳定
随机RAND
不考虑局部性原理,即使最先调入Cache访问也可能最频繁
实现简单
刚被换出的块很快又被换入,频繁换出换入导致抖动
抖动
先进先出FIFO
设置计数器记录块“已经未被访问”的时间,替换时替换计数器最大的
考虑了局部性原理,命中率高
若频繁访问的主存块数量大于Cache块数则还是存在抖动
为Cache块添加一个计数器位
命中时,命中块计数器清零,比其原值低的其他计数器+1,其余不变
未命中但还有空闲块时,新装入块记为0,其余非空闲+1
未命中且无空闲块时,计数器最大的调出,新装入置0,其余全+1
访问时...
机器实现
若未命中,从访问点往前看每个块最后一次被访问的位置,远者换出
手算技巧
近期最少使用LRU
设置计数器记录块“已经访问”次数,替换时替换计数器最小的
若一段时间内频繁访问,则计数器非常大,不再访问后也会长时间占据Cache
即不遵循时间局部性
并非效果更佳
新调入时,计数器=0,每访问其一次,其计数器+1
存在多个最小时,按行递增或FIFO进行替换
替换时替换计数器最小的
最近不经常使用LFU
算法
Cache替换算法(4)
只修改Cache,当换出时再写回主存
当cache被写过,脏位为1表示写过
Cache块脏位
写回法
用SRAM实现的FIFO队列
CPU向Cache和写缓冲写入数据
CPU完成写入后去执行其他工作
此时专用电路控制写缓冲将数据写回主存
写操作不频繁,效果好写操作频繁,写缓冲饱和导致阻塞
同时修改使用写缓冲
全写法写直通法
写命中目标主存单元在Cache有副本
先将目标块调入Cache
CPU在Cache中写完
搭配写回法使用
写分配法
直接写回主存
搭配全写法使用
非写分配法
写不命中目标主存单元在Cache无副本
通常用于Cache到主存
通常用于各级Cache之间
Cache写策略(2*2)
块式存储要求数据必须存放在连续的物理块中,这导致了主存利用率的下降
将进程分为与物理块等大的“页面”,并进行编号,允许离散的存储到主存中
背景
逻辑页号:页内地址
程序员使用的地址:(逻辑地址)虚地址
主存块号:块内地址
实际主存中的地址:(物理地址)实地址
虚地址 & 实地址
指明页表在主存中的存放地址
页表基址寄存器(CPU)
记录逻辑页号和主存块号的对应关系
逻辑页号:主存块号
页表项
把该项对应的块放入Cache
把该项放入快表
页表项被访问时...相当于一次访存(慢)
页表(慢表)
快表项
直接得到主存块号
查询成功(命中)...
Cache存主存块的副本
快表存页表项的副本(很小)
与Cache的区别
替换
快表TLBSRAM相联存储器
Cache中寻找副本...
...
得到物理地址后...
页式存储器
由于程序运行可以只将部分内容调入内存,用户感知的内存容量比实际内存容量大
辅存→内存
有效位为1表示页面已经调入主存
增加有效位
有效位为0时去外存中调取
增加外存块号
用于页面替换算法(参照OS)
记录页面访问次数
增加访问位
脏位
改进页表
虚拟页式存储器
段的大小不总一样
分段需要按照逻辑
交由OS确定将哪一段调入主存
段内地址
段号
虚拟地址
段号:段首址:装入位:段长
段表
段式虚拟存储器
先按逻辑结构将程序分段
每段再继续分页
段号:端内页号:页内地址
段页式虚拟存储器
虚拟存储器(3)
虚拟存储系统和OS.ep3高度重合
BIOS也看做主存的一部分,虽然用的是ROM芯片
一般BIOS和RAM是统一编址的
实现虚拟存储系统
解决了主存容量不足的问题
主存↔辅存:硬件+OS(负责页面置换算法)
解决了主存与CPU速度不匹配的问题
Cache↔主存:硬件自动完成
Cache和主存均可直接被CPU读写
层次结构
半导体:一般比较快
磁性材料
光存储器:CD
介质
随机存取(RAM)
顺序存取(SAM)(Sequential Access Memory)(磁带)
直接存取(DAM):直接选取区域,再顺序读取(磁盘)
相联存储(CAM):通过内容直接检索到存储位置,无需指定地址(快表)
存取方式
亦称串行存取
读写
ROM也不是完全不能写,比较麻烦耳
EPROM
BIOS是ROM,存储的“自举装入程序”负责引导装入操作系统(开机)
U盘是ROM(Flash)
只读(ROM)
信息可更改性
易失性(Cache)
非易失性
信息可保存性
破坏性读出(DRAM):需要重写
非破坏性读出(SRAM、磁盘、光盘)
读出是否破坏原数据
分类
字数×字长
字节数
存储容量
字和字节不一样字长由系统规定字节固定8bit
存取周期:启动一次存储器到完成操作经历的时间,分为读出时间和写入时间
=存取时间+恢复时间
存取周期:亦称读写周期/访问周期,指进行一次完整的读写操作的全部时间,即连续两次独立访问(R/W)之间需要的最小时间间隔
数据传输率即是:主存带宽,单位为字/秒,字节/秒,位/秒
存储速度:数据传输率=数据宽度/存储周期
单位成本:每1bit需要的价格
度量性能的指标
基本概念
物理结构:电容(接地)+MOS(输入电压达到阈值导通(电容充电),否则断开)
用电容是否保存电荷表示1/0
存储元
半导体元件原理
多个存储元的排列(字选线接MOS,位线读数据)(一次读一行)
存储字长:字长为一行的bit数(图中为8)
存储字
总容量=存储字数×存储字长
有时记为a×b位的芯片
存储体(存储矩阵):多个存储字的排列
基本结构
n位地址,个存储字
行列地址:存储字的排列从一维到二维,分行列地址,由行译码器、列译码器共同完成译码寻址,可减少字选线的数量(√n)
译码器:根据MAR送来的地址,将其转化为某一位具体字的字选线导通
位线读出的数据传送到MDR中
数据总线宽度=字长
CPU通过数据总线从MDR中取走数据
:低电平有效表示磁存储芯片启用
两种方案引脚数不同
读写控制线span class=\"equation-text\" data-index=\"0\" data-equation=\
控制电路:控制整个流程
工作逻辑
现代计算机通常已经把MAR,MDR集成在CPU内部,存储芯片只需要普通的寄存器用于暂存输入输出数据
封装好的结构:每一根线都会引出一根金属引脚
存储芯片原理
按字节寻址1K单元,每单元1B
按字寻址:256单元,每单元4B
按半字寻址:512单元,每单元2B
按双字寻址:128单元,每单元8B
对于一个总容量1KB,字长为4B的存储器
寻址方式
主存储器的基本组成
生产中直接写入,任何情况不可重写
可靠性高
掩膜式只读存储器MROM
可用专门的PROM写入器写入,但只能写一次
可编程只读存储PROM
允许写入,也允许用某种方式擦除,可多次重写
紫外光照8-20min,全部擦除:UVEPROM
电擦除特定字:EEPROM(EPROM)
可擦除可编程只读存储EPROM
写比读慢,先擦再写
发展自EEPROM,可多次快速擦写
存储元使用单个MOS管,位密度高于RAM
闪存Flash
控制单元与Flash不同存储介质类似
SSD
外框
ROM非易失性只读存储器
U盘是ROM
DRAM读取是破坏性的,需要重写,导致恢复时间过长(数倍于存取时间),从而延长存取周期
提升主存速度:需求
即两组完全独立的数据线、地址线
CPU、RAM中控制电路更复杂
优化多核CPU访问同一内存的速度
不同地址存取
同时读
同时写
一读一写
冲突控制(OS线程安全)
无冲突
禁止此操作
双端口RAM
即位扩展
一次读一行,不能拆分:灵活性较差
单体多字存储
跳跃访问也有很好的性能
跳跃访问不符合程序读写的局部性,实际性能不稳定
用高位区分具体访问哪个内存条:高位交叉编址
连续访问性能很好
满足即可保证流水线不间断,尽量取等以免闲置。
用低位区分具体访问哪个内存条:低位交叉编址
内存内地址连续编号:高位交叉编址
内存间同位置地址连续编号:低位交叉编址
注意地址编号
可以逐字读取,灵活性很好
多体并行存储
两种方式都可以有很好的性能,只要搭配对应的访问方式
每个存储体存取周期为T,存取时间为r,设T=4r :可见效率提高了
内存主频=1/T
低位交叉编址的多体存储——双通道内存:实际应用
多模块存储器解决恢复时间长的问题
双端口RAM & 多模块存储器
匹配内存和CPU的速度差距
目标
最近未来用到的指令和数据很可能与正在使用的在存储空间上临近
空间局部性
最近未来用到的指令和数据很可能是现在正在使用的信息
时间局部性
程序局部性原理
基于
每次被访问的块一定被立即调入Cache
映射方式
把CPU目前访问的地址“周围”部分数据放到Cache中
替换算法
若Cache已满?
Cache写策略
如何保存Cache中数据和主存中的一致性?
离CPU越近,越快,越小离CPU越远,越慢,越大
多级Cache
实现
OS中,主存中的一块通常称为“页、页面、页框”
Cache中的块也称“行”
编址方案采用:块号+块内地址高位块号,低位块内地址
内存地址分块
CPU欲访问的信息已在Cache中的比例
缺失率M=1-H
命中率H
设为访问一次Cache所需时间为访问一次主存需要的时间
不允许同时访问,先访问Cache,再访问主存:平均访问时间
若cache命中则立即停止访问主存
允许同时访问:平均访问时间
性能
Cache基本原理
存储系统
0 条评论
下一页