1、存储的层次化结构
在辅存里的数据要调入主存后才能被CPU访问
主存——辅存:实现虚拟存储系统,解决了主存容量不够的问题
Cache——主存:解决了主存与CPU速度不匹配的问题
2、存储器的分类
按层次分类
高速缓存和主存储器能被CPU直接读写,辅助存储器需读入主存或高速缓存才能够被CPU读写。
按存储介质分类
按存取方式分类
⭐存取速度:RAM>DAM>SAM⭐
按信息的可更改性
按信息的可保存性
3、存储器的性能指标
存取时间Ta——存取时间是指从启动一次存储器操作到完成该操作所经历的时间,分为读出时间和写入时间。
存取周期Tm——存取周期又称为读写周期或访问周期。它是指存储器进行一次完整的读写操作所需的全部时间,即连续两次独立地访问存储器操作(读或写操作)之间所需的最小时间间隔。
主存带宽Bm——主存带宽又称数据传输率,表示每秒从主存进出信息的最大数量,单位为字/秒、字节/秒(B/s)或位/秒(b/s)
1、存储器的组成
⭐数据总线宽度=存储字长⭐
地址总线连接CPU,需要查询的数据地址存入MAR地址寄存器,当传入过来的电平稳定后,控制电路打开译码器开关,选择线路,有几个存储单元就有多少个地址,选择地址后通高电平,当存储单元中的每位电平输出到MDR数据寄存器中并且稳定后,控制电路允许数据传输到数据总线中。CS和CE为芯片选择信号,一个内存条中有多个存储芯片块,当CS或CE通低电平时表示选择该块存储芯片。一个存储芯片中至少有一条读写控制线。
⭐总容量=存储单元个数x存储字长=2nx8bit;⭐
⭐⭐芯片引脚数目=片选线+读写控制线+地址总线+数据线+供电引脚+接地引脚⭐⭐
2、⭐寻址⭐
当存储器总容量为1KB时
⭐按字节寻址⭐:1K个单元,每个单元1B
按字寻址:256个单元、每个单元4B
按半字寻址:512个单元、每个单元2B
按双字寻址:128个单元,么个单元8B
⭐RAM芯片——易失性,断电后数据消失⭐
1、⭐⭐高频考点:DRAM和SRAM的对比⭐⭐
核心区别——存储元不一样
DRAM&SRAM
2、⭐DRAM的刷新⭐
DRAM电容上的电荷只能够维持1~2ms,即使不断电,超过维持时间信息也会自动消失,所以每隔一段时间必须刷新,一般为2ms。
刷新由存储器独立完成,不需要CPU控制。
分散刷新
集中刷新
⭐异步刷新⭐
3、DRAM的地址复用技术
⭐先发送行地址,再发送列地址,然后在进行查询,分两次发送能够减少地址线,引脚数目减半。⭐
⭐⭐ROM芯片——非易失性,断电后数据不会丢失⭐⭐
1、了解各种ROM
2、计算机内部重要的ROM
主板上的BIOS芯片(ROM),存储了“自举装入程序”,负责引导装入操作系统(开机)
注意,BIOS也是属于主存的一部分。
1、位扩展
2、⭐字扩展⭐
线选法&译码片选法
注:线选法的地址空间不连续,译码片选法地址空间连续,使用译码器控制地址。
3、字位同时扩展
4、译码器
注意译码器的接口是高电平有效还是低电平有效,接口带圈圈的则代表低电平有效。
片选有效信号与**MREQ(有横杠,低电平有效)**有关,因为只有当CPU访问内存时,才要求选中存储芯片。若CPU访问I/O,则MREQ(有横杠)为高,表示不要求存储器工作。
存取周期:可以连续读/写的最短时间间隔
DRAM芯片的回复时间比较长,有可能是存取时间的几倍(SRAM的恢复时间较短)
作用:⭐优化多核CPU访问一根内存条的速度⭐。
需要有两组完全独立的数据线、地址线、控制线。CPU、RAM中也要有更复杂的控制电路。
两个端口对同一主存操作有以下4种情况:
⭐解决办法⭐:置”忙“信号为0,由判断逻辑决定暂时关闭一个端口(即被延时),未被关闭的端口正常访问,被关闭的端口延长一个很短的时间段后再访问。类似操作系统的”读者-写者问题“。
1、多体并行存储器
高位与低位交叉编制的区别就是存储体号在地址编号的高位还是低位。
假设每个存储体存取周期为T,存取时间为r,假设T=4r,若需要连续访问00000、00001、00010、00011、00100四个存储单元时的,高位和低位交叉编址的区别。
因为是连续访问连续的地址,一个存储体,读完之后,需要3r的时间进行恢复,所以高位地址连续地址存储在一个存储体中,需要等待存储体恢复,得到的时间就是要5T,低位交叉编址存储体地址以行排列,连续的地址在不同存储体商,当1r读取完抵第一个存储体上的数据后,可以直接访问下一个准备好的存储体进行访问,无需等待,需要的耗时就是2T。
⭐低位交叉编址存储体读取n各存储字耗时=T+(n-1)r⭐
⭐⭐存取周期为T,存取时间(总线传输周期)为r,为了使流水线不间断(可以一直存取),应保证存储体数m>=T/r⭐⭐
2、 单体多字存储器
计算机的外存储器又称为辅助存储器,目前主要使用磁表面存储器。
所谓“磁表面存储”,是指把某些磁性材料薄薄地涂在金属铝或塑料表面上作为载磁体来存储信息。磁盘存储器、磁带存储器和磁鼓存储器均属于磁表面存储器。
⭐每次读和写都是以1bit进行的。⭐
优点
缺点
1、磁盘设备的组成
磁盘驱动器:核心部件是磁头组件和盘片组件,温彻斯特盘是一种可移动头固定盘片的硬盘存储器。
磁盘控制器:是硬盘存储器和主机的接口,主流的标准由IDE、SCSI、SATA等
2、磁盘的性能指标
4、硬盘的工作过程
硬盘的主要操作是寻址、读盘、写盘。每个操作都对应一个控制字,硬盘工作时,第一步是取控制字,第二步是执行控制字。
硬盘属于机械式不见,其读写操作是串行的,不可能在同一时刻读写同步,也不可能在同一时刻读两组数据或写两组数据。
是将多个独立的物理磁盘组成一个独立的逻辑盘,数据在多个物理盘上分割交叉存储、并行访问,具有更好的存储性能、可靠性、和安全性。
⭐自上向下可靠性越高。⭐
1、工作原理
当一个应用程序被启动时,系统将程序指令代码等信息从辅存中存入的主存中,但是CPU的运行速度很快,主存的速度相对较慢,所以会有一个Cache高速缓冲器,Cache将该程序当前需要重复调用的指令内容存入到Cache中,CPU从Cache抽调指令和数据进行处理。
实际上,Cache被集成在CPU内部,Cache用SRAM实现,速度快,成本高。
2、局部性原理
如上图所示,数据在内存中是连续存在,相邻部分的数据元素很有可能被访问到,将这些存放到Cache中,这既是空间局部性。而for循环中的sum在接下来的循环中还是会被访问到,所以这个求和指令会被放入Cache中,这就是时间局部性。
3、⭐⭐性能分析⭐⭐
设 tc 为访问一次Cache所需时间,tm 为访问一次主存所需时间。
命中率H:CPU欲访问的信息已在Cache中的比率
缺失(未命中)率M=1-H
Cache——主存系统的平均访问时间t为:
1、全相联映射(随意放)
优点:Cache存储空间利用充分,命中率高;
缺点:查找”标记“最慢,有可能需要对比所有行的标记
2、直接映射(只能放固定位置)
当对应Cache块有内容时,即使别的Cache块有空闲位也不能放置,只能对对应的空闲块进行覆盖。
若Cache总块数=2n,则主存块号末尾n位直接反映它在Cache中的位置
,将主存块号的其余位作为标记即可。
优点:对于任意一个地址,只需要对比一个”标记“,速度最快;
缺点:Cache存储空间利用不充分,命中率低
3、组相联映射(可放到特定分组)
优点:另外两种方式的折中,综合效果较好。
这一小节和操作系统页面置换算法很像,挺简单的。
1、随机算法(RAND)
若Cache已满,则随机选择一块替换
实现简单,但完全没有考虑局部性原理,命中率低,实际效果很不稳定。
其实就是当Cache块满了就随机换掉一块。
2、先进先出算法(FIFO)
若Cache已满,则替换最先被调入的Cache的块。
如上图,当第4号块存入Cache后,Cache块满了,后面访问块5的时候,已经没有Cache块可以用了,于是将最先放入的块1替换掉。
实现简单,最开始按#0#1#2#3放入Cache,之后轮流替换#0#1#2#3。FIFO依然没考虑局部性原理,最先被调入的Cache的块也有可能是被频繁访问的。容易出现抖动现象。
抖动现象:频繁的换入换出现象(刚被替换的块又很快被调入)。
3、⭐⭐近期最少使用(LRU)⭐⭐
为每一个Cache块设置一个"计数器”,用于记录每个Cache块已经有多久没被访问了。当Cache满后替换“计数器”最大。(近期没有被访问过的先换出去)
基于“局部性原理”,近期被访问过的主存块,在不久的将来也很有可能被再次访问,因此淘汰醉酒没被访问过的块是合理的。LRU算法的实际运行效果优秀,Cache命中率高。若被频繁访问的主存块数量>Cache行的数量,则有可能放生“抖动”,如{1,2,3,4,5,1,2,3,4,5,1,2,……}
4、最不经常使用算法(LFU)
为每一个Cache块设置一个“计数器”,用于记录每个Cache块被访问过几次。当Cache满后替换“计数器”最小的。(Cache块被访问的次数最小的)
曾经被经常访问的主存块在未来不一定会用到,并没有很好的遵循局部性原理,因此实际运行效果不如LRU。
1、写回法
当CPU对Cache写命中时,只修改Cache的内容,而不立即写入主存,只有当此块被换出时才写回主存。
设置一位“脏位”表示该Cache块是否被修改过。
减少了访存次数,但存在数据不一致的隐患
2、全写法(写直通法)
当CPU对Cache写命中时,必须把数据同时写入写入Cache和主存,一般使用写缓冲。
写缓冲使用SRAM实现,写入速度块。使用写缓冲,与CPU写的速度很快,若写操作不频繁,则效果好。若写操作很频繁,可能会因为写缓冲饱和而发生阻塞。
1、写分配法
当CPU对Cache写不命中时,把主存中的块调入Cache,在Cache中修改。通常搭配写回法一起使用。
2、非写分配法
当CPU对Cache写不命中时,只写入主存,不调入Cache。通常搭配全写法使用。
现代计算机常采用多级Cache
离CPU越近的速度越快,容量越小
离CPU越远的速度越慢,容量越大
1、基本概念
分页:将程序分成大小相等的页面。
页是存储系统:一个程序(进程)在逻辑上被分为若干个大小相等的“页面”,“页面”大小与“块”的大小相同。每个页面可以离散地放入不同的主存块中。
逻辑地址(虚地址):程序员视角看到的地址
物理地址(实地址):实际在主存中的地址
CPU执行的机器指令中,使用的是”逻辑地址“,因此需要通”页表“将逻辑地址转为物理地址。
⭐页表的作用⭐:记录了每个逻辑页面存放在哪个主存块中。
2、地址变换过程(增加TLB)
概念
快表是一种”相联存储器“,可以按内容寻访。
快表使用SRAM,慢表使用DRAM。
快表只能保存慢表的某一部分信息,跟Cache一样,当存满的时候要进行替换。
⭐注意区别⭐:快表中存储的是页表项的副本:Cache中存储的是主存块的副本。
3、小节总结
⭐逻辑地址=逻辑页号+页内地址(虚地址=虚页号+页内地址)⭐
⭐物理地址=主存块号+页内地址(实地址=实页号+页内地址)⭐
虚拟存储器系统和上面的主存和Cache的存储方式很相似,是辅存和主存之间的存储过程。辅存内的数据遵循局部性原则存入主存,原理基本相似。
1、页式虚拟存储器
将辅存中某程序进行分块,然后局部性原则放入主存,页面替换算法原理也类似。同样也有”脏位“等字段。
主存——辅存:实现了虚拟存储系统,解决了主存容量不够的问题
Cache——主存:解决了主存与CPU速度不匹配的问题。
2、段式虚拟存储器
按照功能模块拆分,每个段长都不一样。
因为每一个段长不一样,所以段表中有段长字段,而且主存地址中不再分块。
3、段页式虚拟存储器
把程序按逻辑结构分段,每段再划分为固定大小的页,主存空间页划分为大小相等的页,程序对主存的调入、调出仍以页尾基本传送单位。每个程序对应一个段表,每段对应一个页表。
虚拟地址:段号+段内页号+页内地址。