计算机存储器与存储结构

目录

  • 一、概述
    • 存储器分类
    • 存储系统的分级结构
    • 主存的性能指标
  • 二、随机存取存储器
    • 静态随机存取存储器(SRAM)
    • 动态随机存取存储器(DRAM)
    • CPU 与存储器的连接
  • 三、只读存储器
  • 四、高速存储器
  • 五、高速缓冲存储器
    • Cache 基本原理
    • 主存与 Cache 的地址映射
    • 替换算法
  • 六、虚拟存储器
    • 虚拟存储器的基本概念
    • 页式虚拟存储器
    • 段式虚拟存储器
    • 段页式虚拟存储器

一、概述

存储器分类

1、按存储介质分类
用来记录存储信息的物质称为存储介质。根据存储介质的不同,可以把存储器分为:

  1. 半导体存储器:存储介质为 TTL 或 MOS 半导体器件。一般是大规模、超大规模集成电路芯片用作内部存储器,如内存条。
  2. 磁表面存储器:存储介质为磁性材料,一般用作外部存储器,如磁盘、磁带等。
  3. 光材料存储器:存储介质为金属或磁性材料,但都是通过激光束来读/写信息,如光盘。

2、按存取方式分类
按照存储器存取方式的不同,可以将存储器分为:

  1. 随机存取存储器(RAM):存储器中任何单元都可以被随机存取,每个存储单元的存取时间都相同,且存取时间与存储单元的物理地址无关。例如,主存中的 RAM 是随机存取存储器。
  2. 顺序存取存储器:只能按某种顺序读/写存储单元的存储器,存取时间和存储单元的物理地址有关。所以,这类存储器只能用平均存取时间作为衡量存取速度的指标,如磁带和部分光盘就是这样一类存储器。
  3. 直接存取存储器:若存储器存取数据时,第一步直接指向整个存储器中的某个区域(如磁盘上的磁道);第二步在该区域内顺序检索或等待,直至找到目的地后再进行读/写操作,则将它们称为直接存取存储器,如磁盘和部分光盘就是这样一类存储器。
  4. 只读存储器(ROM):若存储器中的内容不能被刷新,各存储单元的内容只能读出不能写入,则称为只读存储器 ROM。半导休 ROM 通常充当主存中存放重要系统程序的存储器。

3、按信息的可保护性分类
根据存储器中信息的可保护性,可以将存储器分为:

  1. 易失性存储器:断电后信息即消失的存储器。—般的半导体存储器除 ROM 外大部分是易失性存储器。
  2. 非易失性存储器:断电后仍能保存信息的存储器,如磁盘、磁带和光盘。非易失性存储器的内容可以不依赖于计算机的运行而存在,因此主要用于计算机的外存,用来保护长久使用的信息。ROM 也是一种特殊的非易失性存储器。

4、按所处位置及功能分类
按存储器所处的位置及功能,可以将其分为:

  1. 内部存储器:又称内存,位于主机内部,其容量小,速度快,能被 CPU 直接访问。包括高速缓冲存储器和主存储器,一般用半导体材料大规模集成。
  2. 外部存储器:又称辅存或后援存储器,位于主机的外部。目前常用的外部存储器包括硬盘、光盘和 U 盘。

存储系统的分级结构

对存储器的要求是容量大、速度快、成本低,但是在一个存储器中要求同时兼顾这三方面是困难的。为了解决它们之间的矛盾,目前在计算机系统中通常采用高速缓冲存储器、主存和外存三级存储器体系结构,称为存储器系统

计算机存储器与存储结构_第1张图片

1、高速缓冲存储器
高速缓冲存储器(Cache)是处于主存储器和 CPU 之间的一个快速小容量的存储器,用来保存 CPU 正在运行的程序和数据中的活跃部分。与主存储器相比,它的存取速度快,但存储容量小,位成本较高。
2、主存储器
主存储器简称主存,它介于 Cache 与外部存储器之间,用来保存 CPU 正在运行和将要运行的程序和数据。由于它是计算机系统的主要存储器,其性能在很大程度上影响了整个计算机系统的性能。所以,要求它取适当的存储容量与速度,使系统具有合理的性价比。
3、外存储器
外存储器简称外存,用来存放当前暂不参与运行的程序和数据,以及一些需要永久性保存的信息。外存也是计算机中重要的外部设备。CPU 不能直接访问外存,外存的信息必须调入主存后才能被 CPU 处理。和主存相比,其容量大、速度慢、每位价格低。

上述三种类型的存储器形成了计算机的多级存储器体系,各级存储器承担的职能各不相同。其中:

  • Cache 主要强调快速存取,以便使存取速度和 CPU 的运算速度相匹配;
  • 外存主要强调大的存储容量,以满足计算机的大容量存储要求;
  • 而主存主要强调合理的性价比;

因此,这正好解决了存储器系统设计中的速度、容量和成本三者之间的矛盾。

由 Cache、主存和外存组成的三级存储器系统,通常又可以分为两个存储层次:

  1. Cache/主存层次(Cache 存储系统)
  2. 主存/外存层次(虚拟存储系统)

Cache 存储系统是为了解决 CPU 和主存之间速度的不匹配而提出来的。在 Cache 和 主存之间增加辅助硬件,让它们构成一个整体。从 CPU 来看,这一存储层次的平均速度高于主存,接近于 Cache,其容量和价格却接近于主存。为了追求高速,Cache 存储系统的功能(包括管理在内)全部由硬件实现,因而它对各类程序员来说都是透明的。
虚拟存储系统是为解决主存容量不足而提出来的。在主存和外存之间,增加辅助的软、硬件,让它们构成一个整体。从 CPU 来看,这一存储层次的平均速度接近主存的速度,容量和价格接近于外存。由于虚拟存储系统需要通过操作系统来调度,因此它对系统程序员是不透明的,但是对应用程序员是透明的。

主存的性能指标

  • 存储容量:存储容量是指存储器芯片上能存储的二进制位数。如果一芯片上有 N 个存储单元,每个单元可存放 M 位二进制数,则该芯片的容量用 N×M 表示。
  • 存取时间:存取时间是指将数据写入或读出存储器所需要的时间,一般以 ns(纳秒)为单位。存储器芯片的手册中一般要给出典型存取时间或最大存取时间。在芯片外壳上标注的型号往往也给出了时间参数,例如 2732A-20,表示该芯片的存取时间为 200ns。
  • 存储周期:存储周期是指连续启动两次读或写操作所需间隔的最小时间。存储周期等于存取时间加 上两次读或写操作间的稳定时间。通常,存储周期略大于存取时间。
  • 存储器带宽:存储器带宽是单位时间里存储器所存取的信息量,通常以位/秒(b/s)或字节/秒(B/S)为度量单位。宽带是衡量数据传输速率的重要技术指标。

二、随机存取存储器

随机存取存储器(RAM)可分为两种:

  • 静态随机存取存储器(SRAM)
  • 动态随机存取存储器(DRAM)

静态随机存取存储器(SRAM)

1、基本存储单元
—个基本存储元能够存储 1 位二进制信息,能够读出和写入。它的基本结构是由几个反相器和控制门组成一个可控制的双稳态触发器:

计算机存储器与存储结构_第2张图片

一般每个存储元有三个能传输信号的接线端。选择接线端,用于控制这个存储元是否被选中;读/写控制接线端,用于控制对这个存储元是读操作还是写操作;数据接线端,用于输入或输出 1 位二进制数。
通常可将若干存储元组成一个存储单元,一个存储单元能够存放一个或几个字节的二进制信息。每个存储单元都有一个编号(地址),用以唯一标识存储单元的位置。信息按地址存入指定的存储单元中,相应地,也按地址从指定的存储单元中取出。
2、SRAM 存储器的组成
一个 SRAM 存储器由存储体、地址译码器、读/写放大器与 I/O 电路和控制逻辑等组成。

计算机存储器与存储结构_第3张图片

  • 存储体:存储体是所有存储单元的集合体。
  • 地址译码器:地址译码器的功能是通过把二进制表示的地址转换成输出端的有效电平来选中所要访问的存储单元。

地址译码器有两种方式:单译码方式和双译码方式。

  1. 单译码方式:适用于小容量的存储器,其地址译码器只有一个,译码输出叫字选线,每根字选线选择相应字(相应存储单元)的所有位。
  2. 双译码方式:可以减少选择线的数目,分成 X 方向和 Y 方向两个译码器。
  • 读/写电路与 I/O 电路:该电路对写入存储单元的信号进行驱动或将存储单元中读出的信号进行放大整形,并且具有数据缓冲的作用。
  • 控制逻辑:控制该芯片是否己被选中。目前一个芯片的存储容量是有限的,所以需要一定数量的芯片按一定方式进行连接后才能组成一个完整的存储器。

动态随机存取存储器(DRAM)

1、基本存储元
DRAM 的存储原理是:将存储信息以电荷的形式存于电容之中,这种电容可以是 MOS管栅极电容或是专用 MOS 电容。通常定义电容充电至高电平时为“1”状态,放电至低电平时为“0”状态。
采用存储电荷方式存储信息,不需要双稳态电路,因而可以简化结构。充电后 MOS 管断开,既可以使电容电荷泄放极少,又大大降低了芯片的功耗,使得集成度大大提高。但是电容总存在泄放,时间一长,所存的信息会丢失。所以,经过一定的时间就必须对所存的内容重新写一遍,也就是对存“1”的电容重新充电,称之为刷新。DRAM 采用“假读出”方式进行刷新。因为在读出过程中恢复了存储单元的 MOS 栅极电容电荷,并保持原单元的内容,所以读出的过程就是再生的过程。
2、DRAM 存储器的组成
DRAM 存储器的组成大体上与 SRAM 存储器类似,由存储体、地址译码器、读/写放大器、I/O 电路、刷新逻辑和控制逻辑等组成。
3、RAM 的读写时序
(1)写周期时序
地址总线发来的地址经地址译码器译码后,其输出线选中某个存储单元,同时待写入的数据由数据总线发来,通过读/写电路送到该存储单元,再由控制总线发来的写命令控制读/写电路对该存储单元进行写操作。
(2)读周期时序
地址总线发来的地址经地址译码器译码后,其输出线选中某个存储单元,再由控制总线发来的读命令控制读/写电路对该存储单元进行读操作。读出的数据经读/写电路放大与整形后送到数据总线上输出。

CPU 与存储器的连接

由于存储芯片的容量是有限的,主存储器往往是要由一定数量的芯片构成。而由若干芯片构成的主存还需要与 CPU 连接,才能在 CPU 的控制下完成读/写操作。当 CPU 对存储器进行读/写时,其过程主要分为以下三步:
①由地址总线给地址信号;
②通过控制总线发出相应的读操作信号或写操作信号;
③在数据总线上实现数据传送。
因此,CPU 与存储器的连接也要实现对应的三类信号的连接,即地址线的连接、控制线的连接、数据线的连接。

三、只读存储器

只读存储器的最大特点是只读不写,具有非易失性,因此 ROM 通常用来保存一些不让用户修改或需要永久保存的系统稈序。ROM 工作时只能读出,不能写入。那么,ROM 中的内容是如何事先存入的呢?我们把向 ROM 写入数据的过程称为对 ROM 进行编程,根据编程方法的不同,ROM 通常分为以下几类:
1、掩模式 ROM
这类 ROM 所存入的数据,在芯片制造过程中就已经确定了,因而使用时只能读出,不能改写。它的优点是可靠性高,集成度高,价格便宜,适宜大批量生产;缺点是不能重写。这类器件只能专用,可向生产厂家定制。
2、—次编程 ROM(PROM)
PROM 在产品出厂时,所有存储元均置成“0”(或均为“1”)。用户根据需要可自行将其中某些存储元改为“1”(或改为“0”)。它们只能进行一次性改写,一旦编程完毕,其内容便是永久性的,无法进行更改。由于可靠性差,加上只能一次性编程,目前已经被市场淘汰。
3、多次可编程 ROM
这类 ROM 有光擦除编程只读存储器(EPROM)和电擦除编程只读存储器(EEPROM)两类。这两类器件可以分别用紫外光照射或电的方法擦除原来写入的数据,然后再用电的方法重新写入新的数据,可重复使用。
4、闪速存储器(Flash)
前面介绍的 EEPROM 可在线编程,但其最重要的缺点就是编程时间太长。尽管EEPROM 有按页编程功能,但编程时间仍长得令人无法忍受,尤其是在编程大容量芯片时更是这样。为此,人们研制出新型的闪速(Flash)EEPROM。它的存储元电路是在 CMOS 单晶体管 EPROM 存储元基础上制造的,因此具有非易失性。在断电时,它也能保留存储内容,这使它优于需要持续供电来存储信息的易失性存储器,如静态和动态 RAM。
由于闪速存储器具有随机存取的特点,又具有 EEPROM 高密度性、非易失性的特性,因此它成为替代便携式微机中的软磁盘的一种理想工具。例如,目前广泛使用的 U 盘。

四、高速存储器

介绍三种高速存储器:双端口存储器、多模块交叉存储器和相联存储器。
1、双端口存储器
所谓双端口存储器,即一个存储器具有两个端口(端口 1 和端口 2)。双端口存储器有两组数据总线、地址总线和控制总线,从而形成了两个端口。每个端口都有各自独立的地址寄存器(MAR)、地址译码器、数据缓冲器(MDR)和读/写控制电路,从而可以通过两个端口同时对存储器进行读/写操作,以提高存储器的存取速度。

计算机存储器与存储结构_第4张图片

2、多模块交叉存储器
假设有一个主存,容量为 1MB,其编址从 00000〜FFFFFH,如图(a)所示。若 该主存由两个容量为 512KB 的存储器组成,第一个存储器的编址为 00000〜7FFFFH,第二个存储器的编址为 80000〜FFFFFH,如图(b)所示,我们称这样的编址方法为顺序编址。现在,换一种编址方法,第一个存储器都是偶地址,第二个存储器都是奇地址,如图(c)所示,我们称这样的编址方法为交叉编址。假如把这种编址方法推广到主存由多个存储器组成的情况下,并把每一个存储器都叫做模块,即有多模块顺序编址存储器和多模块交叉编址存储器两种。

计算机存储器与存储结构_第5张图片

3、相联存储器
(1)相联存储器的原理
前面介绍的存储器都是按地址访问的,而相联存储器则是按内容访问的。
(2)相联存储器的应用
在 Cache 中,相联存储器用于存放在 Cache 中的主存单元的地址。在虚拟存储器中,相联存储器用于存放段表、页表和快表等,这一内容在后文将会讲到。实现相联存储器的器件都是高速器件,结构复杂,成本较高,特别是比较电路不能做得很大,因此相联存储器的容量往往较小。

五、高速缓冲存储器

存储器速度的提高始终不如 CPU 来得快,目前存储器和 CPU 之间的速度差距不但没有缩小,反而有越来越大的趋势。因此,如何提高存储器的速度是个老问题,解决的方法多种多样,例如前面介绍的双端口存储器、多模块交叉存储器和相联存储器等。本节介绍另一种提高存取速度的方式,即采用 Cache 存储系统。

Cache 基本原理

1、Cache 的功能
Cache 是一种高速缓冲存储器,是为了解决 CPU 和主存之间速度不匹配而采用的一项重要技术,使得 CPU 访问 Cache/主存层次的平均速度接近(略慢)于 Cache 的速度,以加快 CPU 执行程序的速度。随着半导体器件集成度的不断提高,目前 Cache 已置入到 CPU中,从而能够组成两级以上的 Cache 系统。
2、程序局部性原理
根据大量典型程序的运行分析表明,当 CPU 从主存中取出指令和数据时,在一个较短的时间间隔内,由程序产生的地址往往局限在主存空间的某个很小的区域内。这种对局部范围的存储器地址频繁访问,而对此范围以外的地址甚少访问的现象,称为程序访问的局部性。
高速缓冲技术就是利用程序的局部性原理,把程序中正在使用的部分(活跃块)存放在一个高速的容量较小的 Cache 中,使 CPU 的访存操作大多数针对 Cache 进行,从而使程序的执行速度大大提高。
要实现上述目的,就需要将 CPU 所要读取的主存单元的内容预先读取到 Cache 中。由于程序的局部性,即程序总是按顺序编写和编址的,并依次存放在主存中。执行一条指令后一般是执行紧接着的那条指令,只有遇到转移指令时才会跳到另一个区域,但跳转之后又会顺序执行。此外,当执行一个循环程序时,会在一块小的区域内重复循环执行若干指令。而且对于数据的存储,一般也是以向量、数组、树、表等形式成簇地存储在一起的。因此,只要采取一定的预读算法,可以使 Cache 具有很高的命中率。
3、Cache 的工作原理
下图所示为 Cache 的基本结构。Cache 和主存都被分成若干个大小相等的块,每块由若干字节组成。由于 Cache 的容量远小于主存的容量,所以 Cache 中的块数要远少于主存中的块数,它保存的信息只是主存中最活跃的若干块的副本。因此,需用 Cache 的标记字段指出主存的哪些块存放在 Cache 中。

计算机存储器与存储结构_第6张图片

当 CPU 要从主存中读取一个字时,先把这个字的地址传给 Cache,并检查这个字是否在 Cache 中,即用主存地址的块号为索引访问 Cache 的标记,并将取出的标记和主存地址的标记相比较。若相等,称为 Cache 命中,就从映像表中获得该字在 Cache 中的地址,并把这个字直接从 Cache 送到 CPU 中;若不相等,称为 Cache 未命中,则把这个字的地址传给主存,从主存中读出这个字,同时把这个字附近一小块地址单元中的内容取到 Cache中,以便下次访问的字能在 Cache 中找到。由此可见,CPU 与 Cache 之间的数据交换是以字为单位,而 Cache 与主存之间的数据交换则是以块为单位。
4、Cache 的命中率
增设 Cache 的目的是让 CPU 直接访问 Cache,而尽量不去直接访问主存,即 Cache 的命中率应接近于 1。

主存与 Cache 的地址映射

为了把主存块放到 Cache 中,必须应用某种方法(函数)把主存地址定位到 Cache 中,称为地址映射。“映射”一词的物理含义是确定位置的对应关系。这样,当 CPU 访问主存储器时,它所给出的主存地址会自动变换成 Cache 的地址。由于采用全硬件实现,这个地址变换过程很快,软件人员丝毫未感觉到 Cache 的存在,这种特性称为 Cache 的透明性。
假设某机主存容量 1MB,被分为 2048 块,每块 512B;Cache 容量为 8KB,被分为 16 块,每块也是 512B。下面以此为例介绍三种基本的地址映射方法。
1、直接映射
2、全相联映射
3、组相联映射

替换算法

采用全相联映射或组相联映射方法组织 Cache 时,当一个新的主存块需要复制到 Cache 中,而 Cache 的可用位置已被占满时,就产生了替换算法的问题。常用的方法有下述三种。
1、最不经常使用(LFU)算法
LFU(Least-frequently Used)算法认为,应将一段时间内被访问次数最少的那块从Cache 中置换出去。
2、近期最少使用(LRU)算法
LRU(Least-recently Used)算法将近期内长久末被访问过的 Cache 块置换出去。
3、随机替换
最简单的替换算法是随机替换算法。该算法完全不管 Cache 块过去、现在及将来的使用情况,简单地根据一个随机数选择一块替换掉。

六、虚拟存储器

虚拟存储器的基本概念

虚拟存储器是建立在主存/外存层次上的,由操作系统存储管理软件及附加硬件装置(存储器管理部件 MMU)组成的存储体系。它以透明的方式给用户提供了一个访问速度接近(略慢)于主存储器,而存储空间比实际主存空间大得多的虚拟存储器。此时,程序中的地址称为虚拟地址(虚地址)或逻辑地址,程序的地址空间称为虚拟地址空间。
物理地址(实地址)由 CPU 地址引脚送出,它是用于访问主存的地址。虚拟地址是程序员使用的地址。工作在虚拟地址模式下的 CPU 能理解这些虚拟地址,并将它们转换成物理地址。因此,虚拟存储器不仅解决了存储容量大、存取速度快和成本低三种需求之间的矛盾,而且也是一种有效的存储体系管理方式。
在实际的物理存储层次上,所编程序和数据在操作系统管理下,先送入磁盘,然后操作系统将当前运行所需要的部分调入主存,供 CPU 使用,其余暂不运行部分留在磁盘中,故虚拟地址空间的大小实际上要受到外部存储器容量的限制。
程序运行时,由辅助硬件找出虚地址和实地址之间的对应关系,并判断这个虚地址指示的存储单元内容是否己装入主存。如果已在主存中,则通过地址映射(变换),CPU 可直接访问主存的实际单元;如果不在主存中,则把包含这个字的一块调入主存后再由 CPU 访问。 如果主存已满,则由替换算法从主存中将暂不运行的一块调回外存,再从外存调入新的一块到主存。从原理上看,主存/外存层次和 Cache/主存层次有很多相似之处,它们采用的地址映射方法及替换策略从原理上看是相同的,且都基于程序局部性原理。它们遵循的原则是:
(1)把程序中最近常用的部分驻留在高速存储器中。
(2)—旦这部分变得不常用了,把它们送回到低速存储器中。
(3)这种换入换出是由硬件或操作系统完成的,对用户是透明的。
(4)力图使存储系统的性能接近高速存储器,价格接近低速存储器。
事实上,前面提到的各种控制方法是先应用于虚拟存储器中,后来才发展到 Cache/主存层次中去的。不过 Cache/主存的控制完全由硬件实现,所以对各类程序员是透明的;而虚拟存储器的控制是软、硬件相结合的,对于设计存储管理软件的系统程序员来说是不透明的,对于应用程序员来说是透明的。为了进行虚地址和实地址的转换,可把虚拟地址空间和实际主存地址空间划分成“块”,以块为单位传送,常采用段、页或段页这样的逻辑“块”。

页式虚拟存储器

以页为基本单位的虚拟存储器叫页式虚拟存储器。虚存空间和主存空间都分成同样大小的页,分别称为虚页和实页。各类计算机页面大小设置一般在 512B 到几 KB。页面从 0 开始顺序编号,叫页号,分别称为虚页号和实页号。虚拟地址分为虚页号和页内地址两部分,物理地址分成实页号和页内地址两部分。实存与虚存的页内地址长度相同,因此两者页面大小相同。虚存空间比主存大,所以虚页号长度要比实页号的长,而页号的长度取决于存储容量。
为实现地址变换,通常需要建立一张虚地址页号与实地址页号的对照表,称为页表,记录程序的虚页面调进主存时被安排在主存中的位置。页表是存储管理软件根据主存运行情况自动建立的。若计算机采用多道程序工作方式,则可为每个用户作业建立一个页表,硬件中设置一个页表基址寄存器,存放当前所运行程序的页表的起始地址。
页表中的每一行对应一个虚页号,称为一个登记项,其内容包含该虚页所在的主存页面地址(实页号),还包含装入位、修改位、替换控制位等组成的控制字段。若装入位为“1”,表示该虚页内容已从外存调入主存,页面有效;若装入位为“0”,表示该页面不在主存中,于是要启动 I/O 系统,把该页从外存中调入主存后再供 CPU 使用。修改位指出虚页内容在主存中是否被修改过,如修改过,该页被新页替换时,要把修改的内容写回虚存。替换控制位与替换策略有关,如采用在 Cache 中叙述过的 LRU 算法,它可用作计数位(计数器),记录该页在主存时被 CPU 访问的历史,即反映该页在主存的活跃程度。登记项中还可根据要求设置其他控制位,具体变换过程如下图所示。

计算机存储器与存储结构_第7张图片

程序投入运行时,由存储管理软件把该程序的页表存放在主存中的地址装入页表基址寄存器中,由基址寄存器的内容和虚页号得到页表索引地址。根据这个索引地址可读到一个页表项,检测该项中装入位的状态,若为“1”,表示该页已装入主存中,则可将该项中的实页号取出作为主存高位地址,再与虚地址中的页内地址相拼接,就产生完整的实地址。CPU通过此实地址访问主存。若页表放在主存中,则对于 CPU 的每次访问请求,至少访问两次主存,使执行速度减半;若页面失效,还要进行页面替换和页表修改,则访问主存的次数就更多了。为了提高操作速度,许多计算机将页表分为快表和慢表两种。将当前最常用的页表信息存放在快表中,作为慢表局部内容的副本。快表很小,存储在高速相联存储器中,可按虚页号名字进行查询,迅速找到对应的实页号。如果计算机采用多道程序工作方式,则慢表可有多个,但全机只有一个快表。采用快、慢表结构后,访问页表的过程与访问 Cache 的工作原理很相似,即根据虚页号同时访问快表和慢表,若该页号在快表中,就能迅速找到实页号并形成实地址。
从上述工作过程可以看出,页式虚拟存储器的管理是采用软硬件结合的方法来实现的。分工的原则是:因每次访存时都要进行虚实地址变换,速度应越快越好,所以应由硬件实现,包括地址转换硬件、存储页表的高速存储器等;而内、外存之间的页面调动是不经常发生的,加上外存工作本来就比较慢,可以由软件实现。总之,应在速度与实现的复杂性之间权衡利弊后进行软硬件分工。
页式虚拟存储器的每页长度是固定的,页表的建立很方便,新页的调入也容易实现。但是由于程序不可能正好是页面的整倍数,最后一页的零头将因无法利用而造成浪费。同时,页不是逻辑上独立的实体,使程序的处理、保护和共享都比较麻烦。

段式虚拟存储器

段式虚拟存储器是一种能与模块化程序相适应的虚拟存储器。程序中的每个模块作为一个段,用段号表示程序各段的编号,各段的长度不等。各段仍以虚地址编址,虚地址由段号和段内地址组成。程序运行时,以段为单位整段地从外存调进主存,一段占据—个连续的主存空间。CPU 访问时,仍需要进行虚实地址的变换。
为了将虚拟地址变换成主存实地址,需要一个段表。每个程序段在段表中都占有一登记项,内容包括段号、段起点、段长、装入位等。段号指虚拟段号,装入位为 1,表示该段已装入主存;段起点指出该段调进主存时存放的实地址;段长指该段的长度。由虚地址向实地址的变换如下图所示。

计算机存储器与存储结构_第8张图片

段表由存储管理软件设置,段表的起始地址放在段表基址寄存器中。CPU 访问主存时,将虚地址中的虚段号与段表起始地址相拼接,得到段表中相应项的地址,从该项内容中取出该段在实存中的起点(首地址)与虚地址中的段内地址相加,最后得到要访问的信息的实地址。由于段的分界与程序的模块自然分界相对应,所以具有逻辑独立性,便于程序的编译、管理、修改和保护,也便于多道程序共享。但是,因为段的长度参差不齐,起点和终点不定,给主存空间分配带来了麻烦,容易在段间留下不能利用的零头,从而造成浪费。

段页式虚拟存储器

为充分发挥段式和页式虚拟存储器各自的优点,可把两者结合起来,形成“段页式虚拟存储器”的方式,即每个程序按模块分段,每段再划分为页,页面大小与实存页面相同,虚地址的格式包括段号、页号和页内地址三部分,实地址则只有页号和页内地址。虚存与实存之间信息调度以页为基本传送单位。每个程序有一张段表,每段对应有一张页表。CPU 访问时,由段表指出每段对应的页表的起始地址,而每一段的页表可指出该段的虚页在实存空间的存放位置(实页号),最后与页内地址拼接,即可确定 CPU 要访问的信息的实存地址。
这是一种较好的虚拟存储器管理方式,但要经过两级查表才能完成地址转换,费时要多些。

你可能感兴趣的:(计算机基础,linux,windows)