【计算机组成原理】存储器层次结构总结——基本知识要点汇总

halo~我是bay_Tong桐小白
本文内容是桐小白个人对所学知识进行的总结和分享,知识点会不定期进行编辑更新和完善,了解最近更新内容可参看更新日志,欢迎各位大神留言、指点

【更新日志】

最近更新:

  • 更新内容——主存储器与CPU的连接新增例题与步骤总结(2020.11.22)
  • 更新内容——并行存储器(2020.10.19)
  • 更新内容——Cache的基本工作原理(2020.10.30)
  • 更新内容——Cache和主存间的映射方式(2020.10.30)
  • 更新内容——Cache中内存块的替换算法、写策略(2020.10.31)
  • 新增内容——相联存储器CAM(2020.10.31)
  • 新增内容——多Cache存储结构(2020.10.31)
  • 更新内容——虚拟存储器的基本概念(2020.10.31)
  • 更新内容——更新主存储器部分概念(2020.11.2)
  • 新增内容——SRAM、DRAM的单译码与双译码结构(2020.11.2)
  • 更新内容——更新多Cache存储结构部分内容(2020.11.3)
  • 更新内容——更新虚拟存储器基本概念部分内容(2020.11.3)
  • 更新内容——页式虚拟存储器、段式虚拟存储器、段页式虚拟存储器(2020.11.7)
  • 更新内容——TLB快表(2020.11.7)
计算机统考408考纲要求

2021计算机统考408考纲计算机组成原理学科考察目标

  • 理解单处理器计算机系统中各部件的内部工作原理、组成结果以及相互连接方式,具有完整的计算机系统的整机概念
  • 理解计算机系统层次化结构概念,熟悉硬件与软件之间的界面,掌握指令集体系结构的基本知识和基本实现方法
  • 能够综合运用计算机组成的基本原理和基本方法,对有关计算机硬件系统中的理论和实际问题进行计算、分析,对一些基本部件进行简单设计,并能对高级程序设计语言(如C语言)中的相关问题进行分析

2021计算机统考408计算机组成原理考纲变动情况
在这里插入图片描述
2021计算机统考408考纲对存储器层次结构部分考察要求

在这里插入图片描述

存储器的分类

传统计算机:以运算器为核心的冯诺依曼体系
改进计算机:以存储器为核心的冯诺依曼体系

基本分类:

  • 按照在计算机中作用的不同
    在这里插入图片描述
    (主存储器简称主存,用于存储程序和数据,CPU可直接随机地进行读写访问。主存一般由半导体MOS存储器组成)
    (主存的特点:容量小、速度快、成本高)

  • 按照存储信息的材料或介质:磁表面存储器、磁芯存储器、半导体存储器(目前广泛采用)、光盘存储器

  • 按照存取信息的方式:
    在这里插入图片描述

  • 按照信息保存的时间分类:易失性存储器、非易失性存储器

  • 按照制造工艺的不同又可分为:
    1)双极性存储器:速度快、功耗大、价格贵、适用于高速缓存等
    2)MOS存储器:速度慢,但集成度高、功耗小、价格低、适用于大容量主存

存储器的层次化结构

存储器三个主要特性的关系
在这里插入图片描述
存储器的缓存——主存层次和主存——辅存层次
在这里插入图片描述

  • 缓存与主存之间主要解决速度问题(cpu和主存速度的不匹配),因此通过硬件方法实现(主存速度的更新换代远跟不上CPU的发展,速度差异存在“剪刀差”)
  • 主存与辅存之间主要解决容量问题,因此使用软硬件相结合的方法
  • 缓存与主存使用的是主存储器的地址,也就是实地址(也叫物理地址);主存与辅存构成虚拟存储器,使用的是虚地址(也叫逻辑地址),在下文虚拟存储器部分会进行详细阐述

存储系统层次结构
在这里插入图片描述

半导体内部存储器

主存储器概述

主存的作用:存放指令和数据,并能由CPU直接进行随机存取。主存储器也称内存储器和内存

相关基本概念:

  • 存储元:一个半导体触发器(电容)保存一个二进制数,称为存储元
  • 存储单元:八个触发器组成一个读写基本单元,称为存储单元,也即一个字节
  • 地址:每个存储单元都有一个编号,称为地址
  • 存储体:若干个存储单元构成的计算机的存储部件
  • MAR:存储器地址寄存器,接收由程序计数器的指令地址或来自运算器的操作数的地址,以确定要访问的单元
  • MDR:存储器数据寄存器,是向主存写入数据或从主存读出数据的缓冲部件

【MAR与MDR是主存和CPU之间的接口,从功能看属于主存,但通常放在CPU内】

【内容回顾:计算机中的位、字节、字、字长的关系】

  • 位或比特(bit)。一个电子线路单元称为一个“位”(bit),它有两个稳定的工作状态,分别以“0”和“1”表示。是计算机中最小的数据单位。
  • 字节(byte)。8位二进制数称为一个“字节”(byte,简写B)。它是计算机存储信息的基本单位,也是计算机存储空间大小的最基本容量单位。
  • 字(word)。若干个字节组成一个“字”(word)。一个“字”可以存放一条计算机指令或一个数据。
  • 字长。CPU内每个字可包含的二进制的长度称为“字长”(word size)。字长越长,在相同时间内就能传送越多的信息。微机的字长有16位(两个字节)、32位(四个字节)、64位(八个字节)等。

在这里插入图片描述

主存的基本组成

在这里插入图片描述
各部件信息交换主要依靠系统总线进行完成,系统总线分为地址总线(AB)、数据总线(DB)、控制总线(CB)【系统总线详细内容见后续文章】

主存技术指标

  • 存储容量:主存存放二进制代码的总位数
    例如:地址线10根,数据线8根,则芯片容量为 2^10 ✖ 8 = 8K 位
    在这里插入图片描述

  • 存储速度:

    • 存取时间:存储器的访问时间,指一次存储器的操作(读或写,分别对应取与存)到该操作完成所经历的时间(可分为读出时间、写入时间)
    • 存取周期:连续两次访问操作之间的最短时间间隔。不同于存取时间,对与主存而言,该时间段内不进行数据的读或写,用于存储器状态恢复。并为下一次有效的存取操作预留时间,该时间值略大于存取时间(可分为读周期、写周期)
      在这里插入图片描述
  • 存储器的带宽:单位时间内存储器所能传输的信息量,常用单位:位/秒、字节/秒。与存取时间的长短、一次传输的数据位的多少等因素有关。一般而言,存取时间短、数据位数多的主存对应的存储器带宽高

  • 存储器的可靠性:用平均故障间隔时间MTBF来衡量。MTBF,即两次故障之间的平均时间间隔。MTBF越长,表示可靠性越高,即保持正确工作的能力越强

主存中数据的存放

存储字长与数据字长

  • 存储字长:主存的一个存储单元所存储的二进制的位数
  • 数据字长(简称字长):计算机一次能处理的二进制的位数

计算机中的位、字节、字、字长的关系内容回顾见上文主存储器概述部分

数据存储与边界的关系(待更新……)

大端和小端数据存放方式

  • 大端/大尾方式:高位字节地址为字地址
  • 小端/小尾方式:低位字节地址为字地址(x86计算机采用的即为小尾方式)

在这里插入图片描述

静态存储器SRAM

静态随机存取存储器(Static Random-Access Memory,SRAM)是随机存取存储器的一种。所谓“静态”指这种存储器只要保持通电,里面储存的数据就可以恒常保持,不需要周期性充电更新

工作原理: 利用双稳态触发器,存储元是用双稳态触发器(六管 MOS)来记忆信息的,即使信息被读出,它仍保持其原状态而不需要再生(非破坏性读出);只要电源被切断, 原来的保存信息便会丢失,它是易失性半导体存储器。

一般用来组成高速缓冲存储器Cache。

优点: 不需要刷新电路只要保持通电即能保存它内部存储的数据,因此具有较高的性能

局限性: 集成度较低,功耗比DRAM大,相同容量的DRAM可以设计为较小的体积,而SRAM却需要很大的体积。同样面积的硅片可以做出更大容量的DRAM,因此SRAM显得更贵

RAM的结构
在这里插入图片描述
在这里插入图片描述

动态存储器DRAM

动态随机存取存储器(Dynamic Random Access Memory,DRAM)是一种半导体存储器,主要是利用电容内存储电荷的多少来代表一个二进制比特是1还是0。由于在现实中晶体管会有漏电电流的现象,导致数据毁损,因此DRAM需要周期性地进行充电刷新

工作原理: 利用电容。电容中有电荷则存储的内容为1,没有电荷则表示内容为0,是利用存储元电路中栅极电容 上的电荷来存储信息的。【采用地址复用技术,地址线是原来的1/2,且地址信号分行、列两次传送】

一般用来组成大容量主存系统,DRAM采用地址复用技术,地址线减半

刷新放大器:由于电容电荷容易流失,刷新放大器用来对电容的存储进行再生和更新。刷新与行地址有关,每一次刷新是刷新一整行的内容

动态RAM刷新的方式

假设存取周期为0.5us,刷新周期为2ms,以128*128矩阵为例

  • 分散刷新
    在这里插入图片描述
    存取周期扩大为为1us
    每一个微秒分为两部分,一部分用于对动态RAM的读写,一部分用于某一行的刷新,如此动态RAM刷新128行只需要128us,2ms内平均每一行被刷新15.6次
    无“死区”,是一种过度刷新,实际上动态RAM不需要这么频繁刷新,并且此方法存取周期扩大为原先两倍,CPU读写性能下降

  • 集中刷新
    在这里插入图片描述
    即2ms内对所有行都进行刷新
    对2ms这个时间段进行划分,可分为4000个存取周期
    前3872个周期允许CPU或I/O对动态RAM读出或者写入
    后128个周期专用于芯片的刷新操作
    也即这128个周期内无法对动态RAM进行读写操作,被称为死区
    死区为0.5us * 128 = 64us
    死时间率为128/4000 * 100% = 3.2%

  • 异步刷新(分散刷新与集中刷新相结合)
    在这里插入图片描述
    将2ms分为128份,每份为15.6us
    每隔15.6us刷新一行
    每行每隔2ms刷新一次,死区为0.5us
    若将刷新安排在指令译码阶段,则不会出现死区

  • 透明刷新方式
    由于译码期间不访问存储器,可利用这段时间对动态存储器进行刷新,而不占用CPU时间。由于这种刷新方式对CPU透明,所以称为透明刷新方式

动态RAM和静态RAM的比较

一般DRAM用来做主存,SRAM用来做缓存
在这里插入图片描述

DRAM比SRAM慢,可能的原因包括
在这里插入图片描述
【详细后续更新……】

只读存储器ROM

工作特点:非易失性存储器,工作时需要电源,当电源消失,存储的信息不会丢失

发展历程:

  • 早期的只读存储器——在厂家就写好了内容,不可编写和更改
  • 改进1——用户可以自己写——一次性编程不可擦除
  • 改进2——可以多次写——能对信息进行擦除但不方便且擦除设备为另外特定设备
  • 改进3——电可擦写——特定设备
  • 改进4——电可擦写——直接连接在计算机上

常见ROM列举:

  • 掩模ROM(MROM)不可编写和更改
  • PROM一次性编程
  • EPROM多次性编程,利用紫外线进行信息擦除,不方便
  • EEPROM多次性编程,电可擦写,可局部擦写也可全部擦写
  • FlashMemory闪速型存储器,有些设备可用它直接作硬盘,或者将它作为内存和硬盘间的缓冲

Flash存储器

FlashMemory:闪速型存储器,有些设备可用它直接作硬盘,或者将它作为内存和硬盘间的缓冲

现今闪存技术主要两大类:

  • NOR闪存:速度快,常用于存储程序代码,如嵌入式OS
  • NAND闪存:适用于大容量应用,如U盘,存储卡,移动硬盘等

不同ROM的特性比较:

  • EPROM价格便宜 集成度高
  • EEPROM电可擦写 比EPROM方便
  • FlashMemory比EEPROM速度快,具备RAM功能

主存储器与CPU的连接

半导体存储器结构
在这里插入图片描述
位扩展:用多个存储器件对字长进行扩充,增加存储字长,使其数据位数与 CPU 的数据线数相等。
在这里插入图片描述
连接方式:将多个存储芯片的地址端、片选端和读写控制端相应并联,数据端分别引出。

字扩展:增加存储器中字的数量,而位数不变。
在这里插入图片描述
连接方式:将芯片的地址线、数据线、读写控制线相应并联,而由片选信号来区分各芯片的地址范围。

字、位同时扩展
在这里插入图片描述
例题: 一个存储器系统包括4KB ROM和4KBRAM,分别用2K×8的2716芯片和2K×8的6116芯片组成,要求ROM的地址从4000H开始,RAM的地址从6000H开始。已知CPU选用8086,系统地址总线为A15~A0,数据总线为D7~D0。
1、画出存储器与CPU的连接图;
2、确定每个存储器芯片的地址范围。

1)写出对应的二进制地址码

  • ROM地址从4000H开始,总共要4KB(0——2^12-1),则地址范围
    0100 0000 0000 0000 ———— 0100 1111 1111 1111 共4KB
  • RAM地址从6000H开始,总共要4KB(0——2^12-1),则地址范围
    0110 0000 0000 0000 ———— 0110 1111 1111 1111 共4KB

2)确定芯片的数量及类型,由题意可知

  • ROM:2716芯片,容量大小2K X 8 = 2KB(即0——2^11-1)
  • RAM:6116芯片,容量大小2K x 8 = 2KB (即0——2^11-1)

需要2716芯片4KB / 2KB = 2片,需要6116芯片4KB / 2KB = 2片,则有

  • 第一片ROM地址范围:0100 0000 0000 0000 + 2^11-1 = 0100 0111 1111 1111
  • 第二片ROM地址范围:0100 1000 0000 0000 + 2^11-1 = 0100 1111 1111 1111
  • 第一片RAM地址范围:0110 0000 0000 0000 + 2^11-1 = 0110 0111 1111 1111
  • 第二片RAM地址范围:0110 1000 0000 0000 + 2^11-1 = 0110 1111 1111 1111

3)分配地址线与数据线

由以上条件可知:

需要2716芯片4KB / 2KB = 2片,需要6116芯片4KB / 2KB = 2片

ROM:2716芯片,容量大小2K(即2^11) X 8 = 2KB
RAM:6116芯片,容量大小2K(即2^11) x 8 = 2KB
在这里插入图片描述
4)确定片选信号
在这里插入图片描述
观察之前进行好的地址划分,可以发现高5位中,A15与A14、A12的信号是确认不变的
在这里插入图片描述
因此可将A15、A14与访存信号位作为译码器的使能端,A13、A12、A11用做地址片选
在这里插入图片描述
5)确定片选逻辑
在这里插入图片描述
由上分析可知,本题为8086CPU,访存控制信号为高电平1时CPU和存储器进行数据交流

又由地址分析得知信号位A15恒为0,低电平;信号位A14恒为1,高电平
为了让使能端信号组合为100使译码器正常工作,因此需要给A14接一个非门电路
在这里插入图片描述
由于信号A12恒为0,因此A13A12A11的组合共有4种,即000 001 100 101,对应译码结果分别为Y0(0000)、Y1(0001)、Y4(0100)、Y5(0101),译码器输出连到ROM与RAM的选通端CS非

完善线路,ROM有一个读控制端OE非,RAM有一个读控制端OE非,一个写控制端WE非,分别与对应信号线相连
在这里插入图片描述
步骤总结:

  • 写出对应的二进制地址码
  • 确定芯片的数量及类型
  • 分配地址线与数据线
  • 确定片选信号
  • 确定片选逻辑

并行存储器

由于CPU和主存储器在速度上不匹配,而且在一个CPU周期中可能需要用几个存储器字,这便限制了告诉计算。为了使CPU不至因为等待存储器读写操作的完成而无事可做,可采取加速CPU和存储器间有效传输的特殊措施:

  • 主存储器采用更高速的技术来缩短存储器的读出时间,或增加存储器的字长来增加一次读出的数据量
  • 采用并行工作的双端口存储器
  • 采用多模块交叉的存储技术
  • 采用高速缓冲存储器来缩短读出时间

双端口RAM

在这里插入图片描述

  • 同一个存储器有两个独立端口,分别具有两组相互独立的地址线、数据线和读写控制线
  • 允许两个独立的控制器同时异步地访问存储单元
  • 两个端口同时存取存储器的同一地址时,会因数据冲突造成数据存储或读取错误

多模块存储器

每个模块都有相同的容量和存取速度,各模块都有独立的读写控制电路、地址寄存器和数据寄存器,既能并行工作也能交叉工作

单体多字存储器

存储器只有一个存储体,每个存储单元存m个字,总线宽度也为m个字,一次并行读出m个字,地址必须顺序排列并处于同一存储单元

多体并行存储器

高位交叉编址
在这里插入图片描述
高地址体号、低地址为体内地址

低位交叉编址
在这里插入图片描述
低位地址为体号,高位地址为体内地址。程序连续存放在相邻体中

低位交叉编址流水线存储方式示意图
在这里插入图片描述
设模块字长等于数据总线宽度,模块存取一个字的存取周期为 T,总线传送周期为 r,m称为交叉存取度。

为实现流水线方式存取,存储器交叉模块数应大于等于:m=T/r
每经 r 时间延迟后启动下一个模块,交叉存储器要求其模块数必须大于或等于m
以保证启动某模块后经过 m×r 的时间后再次启动该模块时,其上次存取操作已经完成(即流水线不间断)

这样连续存取 m 个字所需的时间为 t1=T+(m-1)*r
顺序方式连续读取 m 个字所需时间为 t2=mT

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

高速缓冲存储器Cache

Cache存储器,电脑中为高速缓冲存储器,是位于CPU和主存储器DRAM(Dynamic Random Access Memory)之间,规模较小,但速度很高的存储器,通常由SRAM(Static Random Access Memory 静态存储器)组成。它是位于CPU与内存间的一种容量较小但速度很高的存储器。CPU的速度远高于内存,当CPU直接从内存中存取数据时要等待一定时间周期,而Cache则可以保存CPU刚用过或循环使用的一部分数据,如果CPU需要再次使用该部分数据时可从Cache中直接调用,这样就避免了重复存取数据,减少了CPU的等待时间,因而提高了系统的效率(引用自百度百科

Cache的基本工作原理

问题的提出: CPU与主存之间的速度存在差异,为避免CPU“空等”现象,解决CPU和主存(通常为DRAM)的速度匹配问题
在这里插入图片描述
原理依据: 程序访问的局部性原理

  • 时间局部性:当前正在使用的指令或数据在未来可能被再次使用
  • 空间局部性:当前正在使用的指令或数据以及它相邻的指令或数据在未来可能被使用

工作过程

  • 该部分最小研究单元为字,即CPU与Cache之间、CPU与主存之间的数据交换均是以字为单位的
    在这里插入图片描述

  • Cache与主存之间的数据交换以块为单位
    在这里插入图片描述
    在这里插入图片描述

  • 当CPU要读取主存中的一个字时,发出此字的内存地址到Cache和主存,此时,Cache控制逻辑(CAM,相联存储器,用于进行逻辑比较的存储器,通常按内容进行寻址)根据地址来判断这个字当前是否在Cache中

  • Cache命中与未命中:

    • 若CPU要访问的字所在主存块已被调入到缓存中,则称cache命中,即主存块与缓存块建立了对应关系,某一个主存块被装入到了缓存块当中,用标记位记录与某缓存块建立了对应关系的主存块号,此字可立即传送给CPU;
    • 若CPU要访问的主存块未被调入到缓存中,则称cache未命中,即主存块与缓存块未建立对应关系,则用主存读周期把此字从主存读出送到CPU,与此同时把含有这个字的整个数据块从主存读出送到Cache中
  • Cache命中率:即CPU欲访问的信息在Cache中的比率。Cache命中率与Cache的容量、块长有关。设Nc为Cache完成存取的总次数,Nm为主存完成存取的总次数,则Cache命中率 h = Nc / (Nc + Nm)

  • Cache-主存系统的效率:效率e与命中率有关。e =(访问cache的时间 / 平均访问时间)* 100%
    在这里插入图片描述
    因此e的取值范围在tc/tm到1之间【PS:此公式为访问Cache与访问主存并行执行,实际工作中CPU对Cache与主存的访问也是并行进行的,并非先访问Cache不命中再访问主存】

  • 将主存地址映射到缓存中定位称为地址映射;
    将贮存地址变换成缓存地址称为地址变换;
    当新的主存块需要调入缓存中,而它的可用位置又被占用时,需根据替换算法解决调入问题
    在这里插入图片描述

  • Cache的读操作
    在这里插入图片描述

  • Cache的写操作:主要有写直达法、写一次法、写回法等(详细见下文Cache写策略)

  • Cache的改进:
    1)增加Cache级数(即多个Cache进行工作)
    2)统一缓存与分立缓存(分立缓存即分立为指令Cache和数据Cache)
    (详细见下文多级Cache存储结构)

相联存储器CAM

概念: 相联存储器是一种按内容访问的存储器。可以实现逻辑比较以完成快速查找。它既可以按照地址寻址也可以按照内容寻址(通常时按照内容的某些字段),为了与传统寄存器做区别,称为按内容寻址的存储器,也称关联存储器

原理: 写入信息是按顺序写入,不需要地址;读出时要求中央处理单元给出一个关键字,用它和存储器中所有单元中的一部分信息进行比较。若它们相等,则将此单元中余下的信息读出。这是实现存储器并行操作的一种有效途径,特别适合于信息的检索和更新。即相联存储器的基本原理是把存储单元所存内容的某一部分作为检索项(即关键字项),去检索该存储器,并将存储器中与该检索项符合的存储单元内容进行读出或写入

作用: 主要用于cache中的读写查找,也用于虚拟存储器、快表、页表等的查找替换

基本结构
在这里插入图片描述
工作原理工程观
在这里插入图片描述

Cache和主存之间的映射方式

Cache容量很小,它保存的内容只是主存内容的一个子集。Cache与主存的数据交换以块为单位。地址映射即是应用某种方法把主存地址定位到Cache中。地址映射方式有直接映射、全相联映射、组相联映射

直接相联映射

直接相联映射需先理解几个概念,具体如下图所示
在这里插入图片描述

以一个例子来理解直接相联映射的工作过程,假设CPU传来要访问的字地址为0000101,具体如下图所示
在这里插入图片描述
通过这个例子可以体会到直接相联映射的一个优点:访问速度快,即每一主存数据块只能装入 Cache 中的对应位置。若这个位置已有内容,则产生块冲突,原来的块将无条件地被替换出去(无需使用替换算法)(即Cache对主存的块地址关系为一对多)

举另一个例子,这个例子为产生块冲突,且Cache仍有空余空间未利用的情况,具体如下图所示
在这里插入图片描述
在这里插入图片描述
此例可以体会到直接相联映射的局限性:虽然对Cache更新不需要使用替换算法,但空间利用率不高

即归纳为,直接相联映射:“对号入座”

全相联映射

全相联映射解决了直接相联映射的空间利用率不高的局限性,以一个例子进行说明,如下图所示
在这里插入图片描述
在这里插入图片描述
主存中任意位置块可以被对应至Cache任意位置块中(即Cache对主存的块地址关系为多对多)

由于每一次都要进行按内容寻址,因此全相联映射拥有访问速度慢的局限性

即归纳为,全相联映射:“随便坐”

组相联映射

组相联映射结合了直接相联映射与全相联映射的优点,并尽可能地减少了两者的局限性,具体如下图
在这里插入图片描述
组相联映射将 Cache 空间分成大小相同的组,主存的一个数据块可以装入到一组内的任何一个位置,即组间采取直接映射,而组内采取全相联映射

归纳为,组相联映射:“按号分组,组内随便坐”

计算地址总位数

以一题目为例,计算地址的总位数
在这里插入图片描述
在这里插入图片描述
三种映射方式比较
在这里插入图片描述
如果组相联中,把cache只分为一组,则组相联就变成了全相联
如果组相联中,把cache每一组只分一块,则组相联就变成了直接相联

在多层次的cache结构当中,三种映射方式的用途不同

  • 靠近CPU的cache层采用直接相联或路数(每组中的块数)较少的组相联——对速度要求高
  • 中间层次可以采用组相联
  • 距离CPU较远的层次可以采用全相联——对速度要求高不是很高,对命中率的要求高

Cache中内存块的替换算法

Cache工作原理要求它尽量保存最新数据,当新的主存块需要拷贝至Cache而此块已被占用产生冲突时则要产生替换

替换问题与采用的地址映射方式有关:

  • 对于直接相联映射的Cache只要把特定位置上的块内容换出Cache即可,不需要替换算法
  • 对于全相联映射和组相联映射Cache就要从存放主存块数据的若干行中选取一行换出,采用何种方式决定哪一行换出即为替换策略要考虑的问题

常用的替换策略:随即替换算法、先进先出算法、最不经常使用(LFU)算法、最近最少使用(LRU)算法

随机替换算法

从特定的行位置中随机地选取一行换出。在硬件上容易实现,且速度快

缺点:很可能刚换出的行马上又要使用,降低了命中率和Cache的工作效率

先进先出(FIFO)算法

常见于内存与辅存间的替换算法,每次有新的分页(分页是磁盘和内存间传输数据块的最小单位)需要调入时,会选择调入内存时间最久的分页换出,容易实现

缺点:这种绝对的公平方式容易导致效率的降低

【内存与辅存间的工作详细后续更新……】

最不经常使用(LFU)算法

LFU算法每行设置一个计数器,从0开始计数,每访问一次,被访行的计数器增1,当需要替换时将计数值最小的行换出,同时将这些行的计数器清零。LFU算法将一段时间内被访问次数最少的那行数据换出,不能严格反映近期访问情况

最近最少使用(LRU)算法

LRU算法每行设置一个计数器,Cache每命中一次,名中行计数器清零,其它各行计数器增1,当需要替换时,将计数值最大的行换出,即将近期内长久未被访问过的行换出。这种算法保护了刚拷贝到Cache中的新数据行,有较高的命中率。

Cache写策略

当CPU读取内存某个字时,如果该字在Cache中,则直接从Cache中读取,称之为读命中

当CPU写内存某个字时,如果该字在Cache中,称之为写命中;CPU是仅仅改写Cache的内容还是Cache和内存的内容同时修改,不同的写方法我们称为写操作策略

全写法(写直通法)

写操作时数据既写入Cache又写入主存。即

  • 当CPU对Cache写命中时,数据同时写入Cache与主存,较好地维护了Cache与主存内容的一致性。当Cache某一块需要替换时,不需要对主存执行写操作,更新策略比较容易实现
  • 当CPU对Cache写未命中时,直接向主存进行写入。Cache每行无需设置一个标志位,但失去了写缓存

写回法

允许一段时间内Cache的内容与主存的内容不一致,即写操作时只把数据写入Cache而不写入主存,当Cache数据被替换出去时才写回主存

每个Cache行必须设置一个标志位,以反映此块是否被CPU修改过

这种方法减少了访问主存的次数,但无法保证Cache与主存内容的实时一致。当多个处理器时,每一个处理器有一个各自的Cache,容易出现不同的Cache中副本不一致的问题

写一次法

只在第一次写命中时要同时写入主存,便于维护系统全部Cache的一致性(奔腾CPU采用了写一次法)

多Cache存储结构

近年来多Cache在计算机系统中已普遍采用。多Cache结构分两种,一种为多级Cache,即CPU和片外均设立Cache;另一种是指令和数据统一与独立分开的Cache

片内和片外两级Cache

  • 一级缓存Cache(L1)内置在CPU内部,与CPU同速运行,减少了对片外总线的访问,加快存取速度,可以有效地提高CPU的运行效率,提高系统性能。一级缓存越大,CPU的运行效率越高,但受到CPU内部结构的限制,一级缓存的容量都很小
  • 由于一级缓存的容量通常较小,为协调一级缓存与内存间的速度,在CPU片外与主存间再设置一个cache,这个cache即通常所说的cache,这里称为二级缓存Cache(L2)。二级缓存比一级缓存的速度相对来说会慢,但比一级缓存的容量要大
    在这里插入图片描述
  • 目前在Pentium II机中已经采用了三级缓存,多级缓存的使用大大提高了系统的性能
  • 现今一些计算机在辅存上还设有磁盘高速缓存
    在这里插入图片描述

统一和独立Cache

  • 统一Cache:L1 cache刚出现时,通常将指令和数据都存放其中,称为统一cache,统一cache的优点是设计和实现相对简单,而且由于指令和数据都在其中,命中率相对较高。但由于执行部件存取数据时,指令预取器又要从同一cache读指令,两者会发生冲突。采用独立cache结构则解决了这个问题
  • 独立cache:由于计算机系统结构中采用了一些新技术(如指令预取),需要将指令cache今儿数据cache分开设计,这就是独立cache结构(哈佛结构,将程序指令存储和数据存储分开的存储器结构,详细见百度百科
    在这里插入图片描述

虚拟存储器

问题提出: 电脑中所运行的程序均需经由主存执行,计算机主存容量有限,若执行的程序占用内存很大或很多则会导致内存消耗殆尽,而外存可以看作是无穷大,虚拟存储器的出现即为了将内存与外存结合起来,以缓解内存的紧张

虚拟存储器的基本概念

定义: 虚拟存储器不是任何实际的物理存储器,通常为计算机硬盘上匀出一部分硬盘空间来充当内存使用,即借助于磁盘等辅助存储器来扩大主存容量,以透明的方式给用户提供了一个比实际主存空间大得多的程序地址空间,使之为更大或更多的程序所使用

原理依据: 程序的局部性原理,即当程序要求运行时,不是将它全部装入内存,而是将其一部分需要执行的程序装入内存,另一部分暂时不装入内存,驻留于外存。这样在实际内存没有变化的情况下,会有更多的或更大的程序存入其中,使用者认为内存的总量为物理内存加用于驻留程序的外存

实质:用外存模拟内存

虚拟存储器中的3种地址空间:

  • 虚拟地址空间(也称虚拟空间):应用程序员用来编写程序的地址空间
  • 主存地址空间(也称物理地址空间或实地址空间)
  • 辅存地址空间:磁盘存储器的地址空间
  • 与之对应的3种地址:虚拟地址、主存地址、磁盘存储器地址(也称磁盘地址或辅存地址)

其它重要概念:

  • MMU: 内存管理单元,用于管理内存,完成虚拟地址向物理地址的转换(即管理虚拟存储器与物理存储器),是设计好的硬件电路
  • TLB: 快表,实质是一个相联存储器,为了提高虚存处理速度而设定的直接按内容进行查找的存储器
  • 页表:一种特殊的数据结构,放在系统空间的页表区,内存中的一块固定存储区,存放逻辑页与物理页帧的对应关系。每一个进程都拥有一个自己的页表,PCB(进程管理块)表中有指针指向页表。用于判断CPU要访问的内容是否在主存,并与MMU配合实现逻辑地址与物理地址间的转换
  • 虚拟存储器的地址映射与变换:通过MMU、TLB、页表(属于操作系统)、操作系统等配合完成

虚拟存储器依赖于程序的部分装入,程序的部分装入又依赖于对程序的分隔。根据对程序的分隔方式的不同,虚拟存储器可以分为:页式虚拟存储器、段式虚拟存储器、段页式虚拟存储器

页式虚拟存储器

在页式虚拟存储系统中,虚拟空间被分成大小相等的页,称为逻辑页或虚页。主存空间也被分成同样大小的页,称为物理页或实页或物理块或块【PS:这里的页/块与上文主存与cach进行数据交换的单位“块”无直接关联】
在这里插入图片描述
在这里插入图片描述
分页系统中,允许程序的每一页离散的存储在内存的任意物理块中,为了能在内存中找到每个页面所对应的物理块,为每一个程序建立一个反映逻辑页和物理块之间的映射关系的表,称为页表
在这里插入图片描述
具体实现:

页表命中
在这里插入图片描述
页表未命中
在这里插入图片描述
例题:
在这里插入图片描述

段式虚拟存储器

利用程序的模块化性质,将程序的逻辑空间划分为多个相对独立的部分,每一部分称为 段 。例如主程序段 (main) ,子程序段 (sub) ,数据段 (data) ,堆栈段 (stack) 。段作为信息的完整基本单位可以在内存-外存之间传送或者定位。每一个段有 段名,段基址,段长等信息。
在这里插入图片描述

段页式虚拟存储器

  • 分页系统中外存—内存之间调入和换出的基本单位都是长度固定的页面,分段系统中外存—内存之间调入和换出的基本单位都是长度可变的段,分页系统实现简单。
  • 分页系统中每页大小是固定的由系统决定,不是信息的完整单位,分段系统中每段大小是不固定,由用户编写的程序决定,是信息的完整单位,分段系统便于实现数据共享和保护。
  • 段页式虚拟存储器是段式虚拟存储器和页式虚拟存储器的结合。它把程序按逻辑单位分段以后,再把每段分成固定大小的页。程序对主存的调入调出是按页面进行的,但它又可以按段实现共享和保护,兼备页式和段式的优点。
    在这里插入图片描述

TLB快表

由于页表在内存中 , CPU 为了读取一条指令或数据,首先访问内存中的页表,从中找到指定页的物理块号,根据块号和块内地址形成的物理地址第二次读取内存获得需要的数据,如果发生缺页还要进行页面置换,使计算机的处理速度下降一半,因此引入快表 (TLB)
在这里插入图片描述
TLB: 快表,实质是一个相联存储器(CAM),为了提高虚存处理速度而设定的直接按内容进行查找的存储器。如果请求的虚拟地址在TLB中存在,CAM 将给出一个非常快速的匹配结果,之后就可以使用得到的物理地址访问存储器。如果请求的虚拟地址不在 TLB 中,就会使用标签页表进行虚实地址转换,而标签页表的访问速度比TLB慢很多。有些系统允许标签页表被交换到次级存储器,那么虚实地址转换可能要花非常长的时间

使用Cache的虚拟存储系统(更新中……)

Cache与虚存的比较

  • 出发点相同:为了提高存储系统的性能价格比而构造的分层存储体系,都力图使存储系统的性能接近高速存储器,而价格和容量接近低速存储器
  • 原理相同:程序局部性原理
  • 侧重点不同:Cache主要解决主存与CPU的速度差异问题;虚存主要解决存储容量问题
  • 数据通路不同:CPU与Cache和主存之间均有直接访问通路;虚存所依赖的辅存与CPU之间不存在直接的数据通路,主存不命中时只能通过调页解决,CPU最终还是要访问主存
  • 透明性不同:Cache的管理完全由硬件完成,对系统程序员透明;虚存管理由软件和硬件共同完成,由于软件的介入,虚存对实现存储管理的系统程序员不透明
  • 未命中时的损失不同:由于主存的存取时间时Cache存取时间的5~10倍,而主存的存取速度通常比辅存的存取速度快上千倍,因此主存未命中时系统的性能损失要远大于Cache未命中时的损失

持续更新中……
我是桐小白,一个摸爬滚打的计算机小白

猜你喜欢

转载自blog.csdn.net/bay_Tong/article/details/108737980