计算机组成原理—存储系统

  • Post author:
  • Post category:其他





目录



1. 存储系统的基本概念



2. 主存储器的组成



3.DRAM 和 SRAM



4. 只读存储器ROM



5.主存储器与CPU的连接



6.双端口RAM和多模块存储器



7. Cache的基本概念和原理



8.Cache和主存的映射方式



9.Cache替换算法



10.Cache写策略



11.页式存储器



12.虚拟存储器




1. 存储系统的基本概念




1)存储器的层次化结构


主存 — 辅存:实现虚拟存储系统,解决了主存容量不够的问题


Cache — 主存:解决了主存与CPU速度不匹配的问题


高速缓存和主存储器的数据可直接被CPU读写


辅助存储器的数据需要加载到主存中才能被CPU读写



2)按存储介质分类


存储器的功能:存放二进制信息


半导体存储器(主存,Cache) 磁表面存储器(磁盘,磁带) 光存储器(光盘)



3)按存取方式方式分类


随机存储器(RAM):读写任何一个存储单元所需时间都相同,与存储单元所在的物理位置无关


顺序存储器(SAM):读写一个存储单元所需时间取决于存储单元所在的物理位置


直接存取存储器(DAM):既有随机存取特性,也有顺序存取特性。先直接选取信息所在区域,然后按顺序方式存取


串行访问存储器:读写某个存储单元所需时间与存储单元的物理位置有关


相联存储器(CAM):即可以按内容访问的存储器,可以按照内容检索到存储位置进行读写,”快表”就是一种相联存储器



4)按信息的可更改性分类


读写存储器:即可读可写(磁盘,内存,Cache)


只读存储器:只能读,不能写(实体音乐专辑CD-ROM)



5)按信息的可保存性


断电后,存储信息消失的存储器 — 易失性存储器(主存,Cache)


断电后,存储信息依然保持的存储器 — 非易失性存储器(磁盘,光盘)


信息读出后,原存储信息被破坏 — 破坏性读出(如DRAM芯片,读出数据后要进行重写)


信息读出后,原存储信息不被破坏 — 非破坏性读出(如SRAM芯片,磁盘,光盘)



6)存储器的性能指标


存储容量:存储字数*字长


单位成本:每位价格 = 总成本 / 总容量


存储速度:数据传输率 = 数据的宽度 / 存储周期


主存带宽:主存带宽又称数据传输率,表示每秒从主存进出信息的最大数量,单位为字/秒,


字节/秒(B/s),或位/秒(b/s)



2. 主存储器的组成




1)基本的半导体元件及原理


存储元的组成:


电容放电:读取二进制位


电容充电:写入二进制位


注:MOS管可理解为一种电控开关,输入电压达到某个阈值时,MOS管就可以接通


存储单元和存储体



2)存储器芯片的基本原理



3)寻址



3.DRAM 和 SRAM



DRAM用于主存,SRAM用于Cache


DRAM芯片:使用栅极电容存储信息


SRAM芯片:使用双稳态触发器存储信息


核心区别:存储元不一样



DRAM存储元—栅极电容


1)


读出1:MOS管接通,电容放电,数据线上产生电流


读出0:MOS管接通后,数据线上无电流


2)


电容放电信息被破环,是破坏性读出,读出后应有重写操作,也称”再生”


3)


读写速度慢


4)


每个存储元制造成本更低,集成度高,功耗低


5)


电容内的电荷只能维持2ms,即便不断电,2ms后信息也会消失,2ms之内必须”刷新”一次(给电容充电)



SRAM存储元—双稳态触发器


1)


读出数据,触发器状态保持稳定,是非破坏性读出,无需重写


2)


读写速度快


3)


每个存储元制造成本更高,集成度低,功耗大


4)


只要不断电,触发器的状态就不会改变



SRAM和DRAM对比



DRAM的刷新


1)刷新周期:一般为2ms


2)以行为单位,每次刷新一行存储单元


3)采用行列地址,减少选通线的个数


存储单元一维排列


存储单元二维排列


刷新操作有硬件支持,读出一行的信息后重新写入,占用一个读写周期



刷新方式:


假设DRAM内部结构排列成 128*128 的形式,读写周期0.5us,2ms 共 2ms/0.5us = 4000个周期



思路一:分散式刷新


每次读写完都刷新一行  -> 系统的存取周期变为1us


前0.5us时间用于正常读写,后0.5毫秒用于刷新某行



思路二:集中式刷新


2ms内集中安排时间全部刷新 -> 系统存取周期还是0.5ms


有一段时间专门用于刷新,此时无法访问存储器,称为访存”死区”



思路三:异步刷新


2ms内每行刷新1次即可 -> 2ms内需要产生128次刷新请求


每隔2ms/128=15.6us 一次,每15.6us内有0.5us的”死时间”


“刷新”由存储器独立完成,不需要CPU控制



DRAM的地址线复用技术


为了减少地址线,可以先把行地址存到行地址缓冲器中,再把列地址存放到列地址缓冲区中,行列地址分两次送,可使地址线更少,芯片引脚更少(地址线,引脚数减半)



现在的主存通采用SDRAM芯片



4. 只读存储器ROM



RAM芯片 — 易失性,断电后数据消失


ROM芯片 — 非易失性,断电后数据不会丢失


ROM 分为: MROM,PROM,EPROM,闪存,SSD



MROM — 掩模式只读存储器


厂家按照客户需求,在芯片生产过程中直接写入信息,之后


任何人不可重写(只能读出)




可靠性,灵活性,生产周期长,只适合批量



PROM — 可编程只读存储器


用户可用专门的PROM写入器写入信息,


写一次之后就不可更改



EPROM — 可擦除可编程只读存储器


允许用户写入信息,之后用某种方法擦除数据,


可进行多次重写



UVEPROM — 用紫外线照射8~20分钟,擦除所有信息



EEPROM — 可用”电擦除”的方式,擦除特定的字



Flash Memory — 闪速存储器(U盘,SD卡就是闪存)


在EEPROM基础上发展而来,断电后也能保存信息,且


可进行多次快速擦除重写


每个存储元只需要单个MOS管,位密度比RAM高


注:由于闪存需要先擦除在写入,因此闪存的”写”速度要比”读”速度更慢



SSD — 固态硬盘


由控制单元+存储单元(


Flash芯片


)构成,与闪速存储器的核心区别在于控制单元不一样,但存储介质都类似,可进行多次快速擦除重写。SSD速度快,功耗低,价格高。目前个人电脑上常用SSD取代传统的机械硬盘


手机辅存也能使用Flash芯片,但相比SSD使用的芯片集成度高,功耗低,价格贵



计算机内重要的ROM



物理:



逻辑:


很多ROM芯片虽然名字是”Read-Only”,但更多ROM也可以”写”


RAM芯片是已失性的,ROM芯片是非易失性的


很多ROM也具有”随机存取”的特性



5.主存储器与CPU的连接



现在的计算机MAR,MDR通常集成在CPU内部。存储芯片内只需要一个普通的寄存器(暂存输入,输出数据)


数据总线宽度 > 存储芯片字长  — 位扩展


扩展主存字数 — 字扩展



存储器芯片的输入和输出信号



增加主存的存储字长 – 位扩展



CPU通过地址线把地址信息同时发送给这两个存储芯片,将会选中两个存储芯片的同一个位置的存储单元,同时读,同时写,存储字长由1位扩展到2位



增加主存存储字数 – 字扩展



线选法



线选法:


n条线路 -> n个选片信号


电路简单


地址空间不连续



码器片选法



2-4译码器



译码片选法:


n条线 -> 2^n 个选片信号


电路复杂


地址空间可连续



字位同时扩展



译码器



6.双端口RAM和多模块存储器



存取周期


存取周期:可以连续读/写的最短时间间隔



注:



DRAM芯片的恢复时间比较长,有可能是存取时间的几倍(SRAM的恢复时间较短)



双端口RAM


作用:优化多核CPU访问一根内存条的速度


条件:需要有两组完全独立的数据线,地址线,控制线。CPU,RAM中也要有更复杂的控制电路



两个端口对同一主存支持的操作:


1)两个端口同时对不同的地址单元存取数据


2)两个端口同时对同一地址单元读出数据



不支持的操作:


1)两个端口同时对同一地址单元写入数据


2)两个端口同时对同一地址单元,一个写入数据,另一个读出数据



解决方法




置”忙”信号为0,由判断逻辑决定暂时关闭一个端口(即被延时),未被关闭的端口正常访问,被关闭的端口延长一个很短的时间段后在访问



多体并行存储器



高位 :



低位:



连续访问:



取几个存储体


采用”流水线”的方式并行存取(宏观上并行,微观上串行)


宏观上,一个存储周期内,m体交叉存储器可以提供的数据量为单个模块的m倍


存取周期为T,存取时间为r,为了使流水线不间断,应保证模块数 m >= T/r


存取周期为T,总线传输周期为r,为了使流水线不间断,应保证模块数 m >= T/r



多模块存储器


多体并行存储器 :


每个模块都有自己的容量和存取速度。各模块都有独立的读写控制电路,地址寄存器和数据寄存器。他们既能并行工作,又能交叉工作


单体多字存储器:


每个存储单元存储m个字,总线宽度也为m个字,一次并行读出m个字


缺点:每次只能同时读取m个字,不能单独读取其中某个字


指令和数据在主存中必须是连续存放的



7. Cache的基本概念和原理




存储系统存在的问题


双端口RAM,多模块存储器提高了存储器的工作速度,但优化后速度与CPU差距依然很大,


可以采用更高速的存储单元,但这意味着存取器的成本提高,容量下降


基于程序访问的局部性原理:增加”Cache – 主存”层次



Cache的工作原理








实际上,Cache被集成在CPU内部,Cache用SRAM实现,速度快,成本高



局部性原理


空间局部性:在最近的未来要用到的信息(指令和数据),很可能与现在正在使用的信息在存储空间上是邻近的


时间局部性:在最近的未来要用到的信息,很可能是现在正在使用的信息


基于局部性原理,把CPU目前访问的地址”周围”的部分数据放到Cache中


“列优先”访问二维数组,空间局部性更差,速度可能要比”行优先”慢



性能分析


设tc为访问一次Cache所需时间,tm为访问一次主存所需时间


命中率H:CPU欲访问的信息已在Cache中的比率


缺失率:M = 1 – H


先访问Cache,若Cache未命中再访问主存


Cache—主存  系统的平均访问时间t为  t  =  Htc + ( 1 – H )( tc + tm )


同时访问Cache和主存,若Cache命中则立即停止访问主存


t  =  Htc + (1 – H)tm



Cache分块


界定CPU目前访问地址的”周围”部分数据


将主存的存储空间”分块”,主存与Cache之间以”块”为单位进行数据交换





:Cache块与主存块的大小相等,每次被访问的主存块,一定会被立即调入Cache



8.Cache和主存的映射方式




区分Cache中存放的主存块,给每个Cache块增加一个”标记”,记录对应的主存块号



全相联映射(随意放)


主存块可以放在Cache的任意位置


假设某个计算机的主存地址空间大小为256MB,按字节编址,其数据Cache有8个Cache块,块的大小为64B


Cache块的大小 == 主存块的大小


主存块数: 2^28 / 2^6  = 22


主存块内地址:6位



CPU访问主存地址


1)主存地址的前22位对比Cache中所有块的标记


2)若标记匹配且有效位 = 1,则Cache命中,访问Cache块内地址对应的存储单元


3)若未命中或有效位 = 0,则正常访问主存



优点:Cache存储空间利用充分,命中率高



缺点:查找标记慢,有可能需要对比所有行的标记



直接映射(只能放固定位置)


每个主存块只能放到一个特定的位置:


Cache块号  =  主存块号 % Cache总块数


如果Cache总数为2^n 则主存块号末尾n位直接反映它在Cache中的位置


1)主存块号%2^3,相当于留下最后3位二进制数


2)若Cache总块数 = 2^n,则主存块号末尾n位直接反映了它在Cache中的位置


3)将主存块号的其余位作为标记



CPU访问主存地址


1)根据主存块号的后3位确定Cache块


2)若主存块号的前19位与Cache标记匹配且有效位 = 1,则Cache命中,访问Cache块内地址对应的存储单元


3)若未命中或有效位 = 0,则正常访问主存



优点:对于任意一个地址,只需要对比一个”标记”,速度最快



缺点:Cache存储空间利用不充分,命中率低



组相联映射(可放到特定分组)


Cache块分为若干组,每个主存块可放到特定分组中的任意一个位置:


组号  =  主存块号 % 分组数


如果组数为2^n,则主存块号末尾n位直接反映了在Cache中的哪一组


主存块号%2^2,相当于留下最后两位



CPU访问主存地址:


1)根据主存块号的后2位确定所属分组号


2)若主存块号的前20位与分组内的某个标记匹配,且有效位 = 1,则Cache命中,访问Cache块内地址对应的存储单元


3)若未命中或有效位 = 0,则正常访问主存



优点:上两种方式的折中,综合效果较好



9.Cache替换算法




替换算法解决的问题



1)全相联映射


Cache完全满了才需要替换,需要在全局选择替换哪一块



2)直接映射(不需要替换算法)


如果对应位置非空,则毫无选择地直接替换,无需考虑替换算法



3)组相联映射


分组内满了才需要替换,需要在分组内选择替换哪一块



随机算法:若Cache已满,则随机选择一块替换


总结:实现简单,但完全没有考虑局部性原理,命中率低,实际效果很不稳定



先进先出算法:若Cache已满,则替换最先被调入Cache的块


抖动现象:频繁的换入换出现象(刚被替换的块很快又被调入)


总结:实现简单,最开始按 #0#1#2#3 放入Cache,之后轮流替换 #0#1#2#3


FIFO已然没有考虑局部性原理,最先被调入Cache的块也有可能是被频繁访问的



近期最少使用算法(LRU):为每一个Cache块设置一个”计数器”,用于记录每个Cache块已经有多久没被访问了。当Cache满后替换”计数器”最大的


总结:命中时,所命中的行的计数器清零,比其低的计数器+1,其余不变;


未命中且还有空闲时,新装入的行计数器置0,其余非空闲行全+1;


未命中且无空闲行时,计数值最大的行的信息块被淘汰,新装行的块的计数器置0,其余+1


Cache块的总数 = 2^n,则计数器只需n位。且Cache装满后所有计数器的值一定不重复


LRU算法:基于”局部性原理”,近期被访问过的主存块,在不久的将来很有可能被再次访问,因此淘汰最久没被访问过的块是合理的。LRU算法的实际运行效果优秀,Cache命中率高


若被频繁访问的主存块数量 > Cache行的数量,则有可能发生”抖动”



最经常使用算法(LFU):为每一个Cache块设置一个”计数器”,用于记录每个Cache块被访问过几次。当Cache满后替换”计数器”最小的


新调入的块计数器 = 0,之后每被访问一次计数器+1。需要替换时,选择计数器最小的一行


若有多个计数器最小的行,可按行号递增,或FIFO策略进行选择


LFU算法:曾经被经常访问的主存块在未来不一定会用到,并没有很好地遵循局部性原理,因此实际运行效果不如LRU



10.Cache写策略




1)写命中



写回法



:当CPU对Cache写命中时,只修改Cache的内容,而不立即写入主存,只有当此块被换出时才写回主存


减少了访存次数,但存在数据不一致的隐患



全写法



:当CPU对Cache写命中时,必须把数据同时写入Cache和主存


访存次数增加,速度减慢,但更能保证数据一致性


为了解决速度减慢的问题,一般使用写缓冲


使用写缓冲,CPU写的速度很快,若写的操作不频繁,则效果很好。若写操作很频繁,可能会因为写缓冲饱和而发生阻塞



2)写不命中



写分配法:



当CPU对Cache写不命中时,把主存中的块调入Cache,在Cache中修改。通常搭配



写回法



使用



非写分配法




当CPU对Cache写不命中时,只写入主存,不调入Cache,搭配



全写法



使用


只有”读”未命中时,才调入Cache



3)多级Cache



现代计算机常采用多级Cache


离CPU越近的速度越快,容量越小


离CPU越远的速度越慢,容量越大



11.页式存储器



页式存储系统:一个程序(进程)在逻辑上被分为若干个大小相等的”页面”,”页面”大小与”块”大小相同。每个页面可以离散地放入不同的主存块中



虚地址和实地址


逻辑地址(虚地址):程序员视角看到的地址


物理地址(实地址):实际在主存中的地址


CPU执行的机器指令中,使用的是”逻辑地址”,因此需要通过查页表,将逻辑地址转化为物理地址。页表的作用:记录每个逻辑页面存放在哪块主存中



地址变换过程


CPU查询页表实际上就是在进行访存操作,为了提高效率


将近期访问的页表项放入更高速的存储器,可以加快地址变换的速度



增加快表


区别:快表中存储的是页表项的副本;Cache中存储的是主存块的副本


快表是一种”相联存储器”,可以按内容寻访



总结:


逻辑地址 = 逻辑页号 + 页内地址


物理地址 = 主存块号 + 页内地址



12.虚拟存储器




页式虚拟存储器 — 拆分成大小相等的页面


基于程序的局部性原理,先把当前用到的页面调入主存,其余的放在外存中,等用到时在根据页表记录的外存块号将其调入主存中



存储器的层次化结构


主存 — 辅存: 实现虚拟存储系统,解决了主存容量不够的问题(操作系统决定,那些页面调入主存)


Cache — 主存:解决了主存与CPU速度不匹配的问题(硬件决定,哪些主存块调入Cache)



段式虚拟存储器 — 按照功能模块拆分


如:#0 段是自己写的代码    #1段是库函数代码    #2段是变量



段页式虚拟存储器 — 按照功能模块分段,再将各个段分页


把程序按逻辑结构分段,每段再划分为固定大小的页,主存空间也划分为大小相等的页,程序对主存的调入,调出仍以页为基本传送单位


每个程序对应一个段表,每段对应一个页表


虚拟地址:段号 + 段内页号 + 页内地址



版权声明:本文为LoveHoneyYou原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。