4. 存储体系

存储体系的含义(答)

存储体系(即存储层次)是让构成存储体系的几种不同的存储器( <math xmlns="http://www.w3.org/1998/Math/MathML"> M M </math>M1 ~ <math xmlns="http://www.w3.org/1998/Math/MathML"> M M </math>Mn)之间,配上辅助软、硬件或辅助硬件,使之从程序员的角度来看,它们在逻辑上是一个整体。

让存储层次的等效访问速度是接近于 <math xmlns="http://www.w3.org/1998/Math/MathML"> M M </math>M1的,容量是 <math xmlns="http://www.w3.org/1998/Math/MathML"> M M </math>Mn的,每位价格是接近于 <math xmlns="http://www.w3.org/1998/Math/MathML"> M M </math>Mn 的。

基本的二级存储体系是虚拟存储器和Cache 存储器,这是存储体系的两个不同的分支。

虚拟存储器(填)

是因为主存容量满足不了要求提出来的。在主存和辅存之间,增设辅助的软、硬件设备,让它们构成一个整体,所以也称为主存 ------ 辅存存储层次。

Cache 存储器 (选,填)

因主存速度满足不了要求而引出了Cache 存储器。在CPU 和主存之间增设高速、小容量、每位价格较高的Cache,用辅助硬件将Cache 和主存构成一个整体,称为 Cache 存储器(或称为Cache ------ 主存存储层次)。

虚拟存储器通过增设地址影像表机构来实现程序在主存中的定位。根据存储影像算法的不同,可有多种不同的存储管理方式的虚拟存储器,其中主要有段式、页式和段页式三种:(答)

  1. 段式管理。段表长度字段指明该道程序所用段表的行数,即程序的段数。
  2. 页式管理。页式存储是把主存空间和程序空间都机械地分成固定大小的页(页面大小随计算机而异,一般在512B到几KB 之间),按页顺序编号。这样,任一主存单元的地址 <math xmlns="http://www.w3.org/1998/Math/MathML"> n n </math>np就有了实页号 <math xmlns="http://www.w3.org/1998/Math/MathML"> n n </math>nv 和页内位移 <math xmlns="http://www.w3.org/1998/Math/MathML"> n n </math>nr两个字段组成。每个独立的程序也有自己的虚页号顺序。
  3. 段页式管理。段页存储是把实(主)存机械地等分成固定大小的页,把程序按模块分段,每个段有分成与实主存页面大小相同的页。

在虚拟存储器中,每次访问一次主存都要进行一次程序地址向实(主)存地址的转换。段页式的主要问题是地址变换过程至少需要查表两次,即查段表和页表。

提高页表的空间利用率的方法有(答)

整个多用户虚拟存储空间可对应 2u个用户,但主存最多同时只对其中N个用户(N道程序)开放。由于 N x 2 <math xmlns="http://www.w3.org/1998/Math/MathML"> N N </math>Nv 中使得页表绝大部分行中的实页号 <math xmlns="http://www.w3.org/1998/Math/MathML"> n n </math>nv 字段及其他字段都无用,这会大大降低页表的空间利用率。

一种解决办法是将页表中装入为 "0" 的行用实页号 <math xmlns="http://www.w3.org/1998/Math/MathML"> n n </math>nv 字段存放该程序此虚页在辅存中的实地址,以便调页时实现用户虚页号到辅存实地址的变换。

另一种方法是把页表压缩成只存放已装入主存的那些虚页与实页位置的对应关系,我们称它为想联目录表法,简称目录表法。该表采用按内容访问的相联存储器构成。

替换算法(答)

替换算法的确定主要看主存是否有高的命中率,也要看算法是否便于实现,辅助软、硬件成本是否低。目前已研究过多种替换算法,如随机算法、先进先出算法、近期最少使用算法等。

  1. 先进先出算法

    选择最早装入主存的页作为被替换的页。这种方法实现方便,主要操作系统为主存管理所设的主存页面表中给每个实页配一个计数器字段。每当一页装入主存时,该页的计数器清零,其他已经装入主存的那些页的计数器都加 "1" 。需要替换时,就把计数器值最大的页的页号就是先进入主存而现在准备替换掉的页号。

  2. 近期最少使用算法

    选择最少访问的页作为被替换页。这种算法能比较正确的反映程序的局部性。一般来说,当前最少使用的页,未来也很少被访问。但完全按照此算法实现比较困难,需要为每个实页都配一个很长的计数器。

  3. 根据未来实际使用情况将未来的近期里不用的页替换出去,一定会有最高的主存命中率,这种算法称为优化替换算法。它是在时刻 t 找出主存中每个页将要用的时刻 <math xmlns="http://www.w3.org/1998/Math/MathML"> t t </math>ti,然后选择其中 <math xmlns="http://www.w3.org/1998/Math/MathML"> t t </math>ti + t 最大的那一页作为替换页。优化算法是一种理想算法,可以被用来作为评价其他算法好坏的标准。

根据各道程序运行中的主存页面失效率低于某个值时,就自动增加分配给该道程序主存页数,以提高命中率;当主存页面失效率低于某个值时,就自动减少分配该道程序的主存页数,以便释放出这部分主存页面位置供其他程序用,从而使整个系统总的主存命中率和主存利用率得到提高。我们称此算法为页面失效频率算法。

高速缓冲存储器

高速缓冲(cache)存储器是为弥补主存速度不足,在处理机和主存之间设置一个高速、小容量的Cache ,构成Cache ------ 主存存储层次,使之从CPU 角度来看,速度接近于 Cache ,容量确实主存的。(填)

对 Cache 存储器而言,地址的影像就是将每个主存块按某种规则装入Cache 中;地址的变换就是每次访 Cache 时怎样将地址变成Cache 地址。(填)

提高Cache 存储器的预取算法为:(答)

Cache 所用的取算法基本上是按需取进法,即在Cache 失效时才将要访问的字所在的块取进。适当选择好 Cache 的容量、块大小、组相连的组数和组内块数,是可以保证较高的命中率的。如果再采用信息块要用之前的预取进 Cache 的预取算法,还可能再进一步提高命中率。

三级存储体系

目前,多数计算机系统既有虚拟存储器又有Cache 存储器。程序用虚地址访存,要求速度接近于 Cache ,容量是辅存的。这种三级存储体系可以有3种形式。

  1. 物理Cachae 。物理地址Cache 是由 "Cach ------ 主存"和 "主存 ------ 辅存" 两个独立的存储层次组成。

    CPU 用程序虚拟地址访存,经存储管理部件 MMU 中的地址变换部件变换成主存物理地址访Cache 。如果命中Cache ,就访Cache ;如果不命中Cache,就将该主存物理地址的字和含该字的主存的一个块与 Cache 某相应块交换,而所访问的字直接与 CPU 交换。

  2. 虚地址 Cache 。虚地址Cache 是将 Cache ------ 主存 ------ 辅存直接构成三级存储层次形式。

    CPU 访存时,直接将虚地址送存储管理部件MMU 和Cache。如果Cache 命中,数据与指令就直接与CPU 传送,如果Cache 不命中,由存储部件将虚地址变换成主存物理地址访主存,将含该地址的数据块或指令块与Cache 交换的同时,将单个指令和数据与CPU 之间传送。

  3. 全Cache。全Cache 是最近出现的组织形式,尚不成熟,尚未商品化。它没有主存,只用Cache 与辅存中的一部分构成 "Cache ------ 辅存" 存储体系。全Cache 存储体系系统的等效访问时间要接近于 Cache 的,容量是虚地址空间的容量。

相关推荐
小马哥编程11 小时前
【软考架构】第七章 系统架构设计基础知识-7.2基于架构的软件开发方法:Architecture-Based Software Design,ABSD
架构·系统架构
西陵11 小时前
Nx带来极致的前端开发体验——任务编排
前端·javascript·架构
LQ深蹲不写BUG15 小时前
微服务的保护方式以及Sentinel详解
微服务·云原生·架构
失散1315 小时前
分布式专题——1.2 Redis7核心数据结构
java·数据结构·redis·分布式·架构
布列瑟农的星空15 小时前
大话设计模式——观察者模式和发布/订阅模式的区别
前端·后端·架构
睡觉的时候不会困19 小时前
MySQL 高可用方案之 MHA 架构搭建与实践
数据库·mysql·架构
lssjzmn1 天前
性能飙升!Spring异步流式响应终极指南:ResponseBodyEmitter实战与架构思考
java·前端·架构
许泽宇的技术分享1 天前
Text2Sql.Net架构深度解析:从自然语言到SQL的智能转换之道
sql·架构·.net
libokaifa1 天前
C++ 基础学习
前端·架构·github