内部存储器——③主存储器

一、只读存储器ROM


即使电源断电,ROM中存储的信息也不会丢失。

(一)ROM的类型

ROM工作是只能读出,不能写入。 把向ROM写入的过程称为对ROM进行编程,根据编程方法的不同,通常可分为以下几类:

(1)掩膜式ROM(MROM)

它的内容是由半导体制造厂按用户提出的要求在芯片的生产过程中直接写入的。写入之后任何都无法改变。

(2)一次可编程ROM(PROM)

PROM允许用户利用专门的设备(编程器)写入自己的程序,一旦写入,其内容将无法改变。

(3)可擦除可编程ROM(EPROM)

EPROM不仅可以由用户利用编程器写入信息,而且可以对其内容进行多次修改。

EPROM又可分为两种:紫外线擦除(UVEPROM)和电擦除(EEPROM).

(4)闪速存储器

闪速存储器(Flash Memory,简称闪存)是一种允许在操作中被多次擦除或重写的只读存储器,它的主要特点是既可在不加电的情况长期保存信息,又能在线进行快速擦除与重写。兼备了EEPROM和RAM的有点。

1.EPROM

         EPROM由以色列工程师Dov Frohman发明,是一种断电后仍能保留数据的计算机储存芯片——即非易失性的(非挥发性)。它是一组浮栅晶体管,被一个提供比电子电路中常用电压更高电压的电子器件分别编程。一旦编程完成后,EPROM只能用强紫外线照射来擦除。通过封装顶部能看见硅片的透明窗口,很容易识别EPROM,这个窗口同时用来进行紫外线擦除。可以将EPROM的玻璃窗对准阳光直射一段时间就可以擦除。

(1)简介

         EPROM是一种具有可擦除功能,擦除后即可进行再编程的ROM内存,写入前必须先把里面的内容用紫外线照射它的IC卡上的透明视窗的方式来清除掉。这一类芯片比较容易识别,其封装中包含有“石英玻璃窗”,一个编程后的EPROM芯片的“石英玻璃窗”一般使用黑色不干胶纸盖住, 以防止遭到阳光直射。

(2)特点

        EPROM的编程需要使用编程器完成。编程器是用于产生EPROM编程所需要的高压脉冲信号的装置。编程时将EPROM的数据送到随机存储器中,然后启动编程程序,编程器便将数据逐行地写入EPROM中。

        一片编程后的EPROM,可以保持其数据大约10~20年,并能无限次读取。擦除窗口必须保持覆盖,以防偶然被阳光擦除。老式电脑的BIOS芯片,一般都是EPROM,擦除窗口往往被印有BIOS发行商名称、版本和版权声明的标签所覆盖。EPROM已经被EEPROM取代(电擦除只读寄存器)。

        一些在快闪记忆体出现前生产的微控制器,使用EPROM来储存程序的版本,以利于程式开发;如使用一次性可编程器件,在调试时将造成严重浪费 。

(3)工作原理

        EPROM是可编程器件,主流产品是采用双层栅(二层poly)结构,主要结构如图一所示。浮栅中没有电子注入时,在控制栅加电压时,浮栅中的电子跑到上层,下层出现空穴.由于感应,便会吸引电子,并开启沟道.如果浮栅中有电子的注入时,即加大的管子的阈值电压,沟道处于关闭状态.这样就达成了开关功能。

        如图二所示,这是EPROM的写入过程,在漏极加高压,电子从源极流向漏极沟道充分开启.在高压的作用下,电子的拉力加强,能量使电子的温度极度上升,变为热电子(hot electrON).这种电子几乎不受原子的振动作用引起的散射,在受控制栅的施加的高压时,热电子使能跃过SiO2的势垒,注入到浮栅中.

        在没有别的外力的情况下,电子会很好的保持着.在需要消去电子时,利用紫外线进行照射,给电子足够的能量,逃逸出浮栅。

        EEPROM的写入过程,是利用了隧道效应,即能量小于能量势垒的电子能够穿越势垒到达另一边.

        量子力学认为物理尺寸与电子自由程相当时,电子将呈现波动性,这里就是表明物体要足够的小就pn结来看,当p和n的杂质浓度达到一定水平时,并且空间电荷极少时,电子就会因隧道效应向导带迁移.电子的能量处于某个级别允许级别的范围称为"带",较低的能带称为价带,较高的能带称为导带.电子到达较高的导带时就可以在原子间自由的运动,这种运动就是电流。

EEPROM写入过程,如图3所示,根据隧道效应,包围浮栅的SiO2,必须极薄以降低势垒。源漏极接地,处于导通状态.在控制栅上施加高于阈值电压的高压,以减少电场作用,吸引电子穿越。

二、高速缓冲存储器


Cache是一种高速缓冲存储器,是为了解决CPU和主存之间速度不匹配而采用的一项重要技术。

1.访问局部性原理:

        在程序执行过程中, 处理器访问存储器中的指令和数据倾向于成块进行。 程序通常包含许多迭代循环和子程序,一旦进入了一个循环或子程序, 则需要重复访问一小组指令, 同样, 对于表和数组的操作, 包含存取一块块的数据字。 在一长段时间内, 使用的块是变化的, 而在一个小段时间内, 处理器主要访问存储器中的固定块。

2.功能:

        cache是一种高速缓冲存储器,是为了解决CPU和主存之间速度不匹配而采用的一项重要技术。cache是介于CPU和主存之间的小容量存储器,但存取速度比主存快。

3.基本原理

        Cache和主存都被分成若干个大小相等的块,每块由若干字节组成。由于cache的容量远小于主存的容量,所以cache中的块数要远小于主存的块数,它保存的信息只是主存中最急需执行的若干块的副本。

        CPU与Cache之间的数据交换是以块为单位的。当CPU读取主存中一个字时,便发出此字的内存地址到CACHE和主存。此时CACHE控制逻辑依据地址判断此字当前是否在CACHE 中,若是,为命中,此字立即传送给CPU;若非,为不命中则用主存读周期把此字从内存读出送到CPU,与此同时,把含由这个字的整个数据块从主存读出送到CACHE中。

图5.4-1 Cache 原理图

三、虚拟存储器


虚拟存储器是一个容量非常大的存储器的逻辑模型,不是任何实际的物理存储器。

虚拟存储器指的是主存——外存层次。它以透明的方式给用户提供 了一个比实际主存空间大得多的程序地址空间。

1.实地址与虚地址

        用户编制程序时使用的地址称为虚地址或逻辑地址。其对应的存储空间称为虚存空间或逻辑地址空间;而计算机物理内存的访问地址则称为实地址或物理地址,其对应的存储空间称为物理存储空间或主存空间。程序进行虚地址到实地址转换的过程称为程序再定位。

2.虚存的访问过程

        每次访存是,首先判断该虚地址所对弈的部分是否在实存中,如果是,则进行地址转换并用实地址访问主存;否则,按照某种算法将辅存中的部分程序调度进内存,再按同样的方法访问主存。

3.cache与虚存的异同

在三级存储体系中 ,cache-主存和主存-辅存这两个存储层次有许多相同点:

(1)出发点相同:二者都是为了提高存储系统的性能价格比而购置的分层存储体系,都力图使存储系统的性能接近高速存储器,而价格和容量接近低速存储器。

(2)原理相同:都是利用了程序运行时的局部性原理吧最近常用的信息块从相对慢速而大容量的存储器调入相对高速而小容量的存储器。

(3)侧重点不同:cache主要解决主存与CPU的速度差异问题;而就性能价格比的提高而言,虚存主要是解决存储容量问题。

(4)数据通路不同:CPU与cache和主存之间均有直接访问通路,cache不命中时可直接访问主存,而虚存所一栏的辅存与CPU之间不存在直接的数据通路,而主存不命中时只能通过调页解决,CPU最终还是要访问主存。

(5)透明性不同:cache的管理完全有硬件完成,对系统程序员和应用程序员均透明;而虚存管理由软件(操作系统)和硬件共同完成,由于软件的介入,虚存对实现存储管理的系统程序员不透明,而支队应用程序员透明。

(6)未命中时的损失不同:由于主存的存取时间是cache的存取时间的5-10倍,而主存的存取速度通常比辅存的存取速度快上千倍,故主存未命中时系统的性能损失要远岛屿cache未命中时的损失。

四、辅助存储器


辅助存储器用于存放当前不需要立即使用的信息,一旦需要, 则与主存成批地交换数据, 它作为主存的后备和补充, 是主机的外部设备。 辅助存储器的特点是容量大、成本底、通常在断电后仍然保存信息。

辅助存储器的种类•磁表面存储器-磁盘-磁带光存储器光盘

磁盘由一组绕轴旋转的盘片组成,盘片的数量为1~20片。磁盘系统的转速一般在每分钟3600转到12000转之间,即3600rpm~ 12000rpm。

1.辅助存储器的技术指标

(1)存储密度:单位长度或单位面积的磁层表面所能存储的二进制信息量。可用道密度和位密度来表示。

(2)磁道的单位长度所能记录二进制信息的位数为位密度或线密度。

(3)存储容量:磁盘的存储容量是指所能存储的二进制信息总量。一般用字节表示。

          磁盘存储器含有格式化和非格式化容量两个指标。

                  格式化容量按某种特定的记录格式所能存储信息的总量。

                  非格式化量指磁记录表面全部可利用的磁化单元总数。一般格式化容量相当于非格式化容量的70%。

(3)寻址时间:包括两部分:一是找道时间;二是等待时间。

          找道时间:磁头寻找目标磁道所需要的时间。

          等待时间:磁头从目的道等待需要访问的扇区恰好旋转到它的正下方所经历的时间。

所需扇区转到磁头之下所需要的时间称为旋转时间。平均延迟是磁盘转半圈的时间,所以对大部分磁盘的平均旋转时间TAR为:

数据传输率:磁盘存储器在单位时间内向主机传送数据的字节数,称为数据传输率。

举例:

         磁盘组有6片磁盘,每片有两个记录面,最上最下两个面不用,存储区域内径550px,外径825px,道密度为40道/cm, 内层位密度400位/cm,转速2400转/分。问:

(1)共有多少个柱面?

(2)盘组总存储容量是多少?

(3)数据传输率是多少?

(4)采用定长数据块记录格式,直接寻址的最小单位是什么?寻址命令中如何表示磁盘地址?

(5)如果某文件长度超过一个磁道的容量,应将它记录在同一个存储面上,还是记录在同一个柱面上?

解:(1) 有效存储区域=16.5-11=5.5(cm)

                 道密度=40道/cm

                  40*5.5=220道

                  即220个柱面.

      (2) 内层磁道周长==2*3.14*11=69.08(cm)

                 每道信息量=400位/cm*69.08=27632=3454位

                 每面信息量=3454B*220=759880B

                 盘组总容量=759880*10=7598800B

      (3) 磁盘数据传输率Dr=rN=2400/60*3454=13816B/s

五、主存储器的基本组织  


1.存储器的基本组织

(1)  与CPU的连接:主要是 地址线、控制线、数据线 的连接。

(2)   多个芯片连接 :存储器容量与实际存储器的要求多有不符。 如前所述存储器芯片有不同的组织形式,如1024*1、1024*4、4096*8等;       实际使用时,需进行字和位扩展(多个芯片连接),组成 你所需要的实际的存储器,如 1K*8、4K*8  等的存储器。

2.位扩展法

说明:当芯片的容量和主存容量相同,而位数不足时,就要对位数进行扩展。

方法:将多片存储芯片的地址端、片选端和读/写控制端各自并联在一起,而他们的数据端分别引出,连到存储器不同位的数据总线上。只加大字长,而存储器的字数与存储器芯片字数一致, 对芯片没有片选要求。

某机字长32位,存储容量1MB,若按字编址,它的寻址范围是0~256kb

假设机器字长是n位,

按字编制:由于机器一字为n位,则一字也为nbits=n/8 字节;

按半字编制:由于机器一字为n位,,则半字为n/2 bits = n/16 字节;

按双字编制:由于机器一字为n位,,则双字为n*2 bits = n/4 字节;

通过上述方法得出 计算机的单位 字/半字/双字,然后采用主存容量/ 单位 = 寻址范围了。

例如:

        用8k*1的芯片组成8k*8的存储器需 8 个芯片

        地址线——需 13 根    8k=2^13所以需要13根地址线

        数据线—— 8根            8位意味着8根数据线

        控制线—— WR接存储器的WE                                  

3.字扩展法

说明:当芯片字长与主存相同,而容量不足时,就需要用几片存储器芯片组成合起来对存储空间即地址空间进行扩展,称为字扩展。

方法:将各芯片的地址线,数据线、读/写线分别并联在一起,片选信号单独连接,用来区分各片地址,用高位地址经过译码而产生的输出信号作为各个芯片的片选信号,用低位地址作为各芯片的片内地址。

例如:

用16K*8位的芯片组成64K*8位的存储器需4个芯片

    地址线—— 共需16根

    片内:(214 = 16K) 14根,片选:2根

    数据线—— 8根

    控制线 —— WE

地址分配表

4.字位同时扩展法

        一个存储器的容量假定为M×N位,若使用l×k位的芯片(l<M,k<N)需要在字向和位向同时进行扩展。此时共需要(M/l)×(N/k)个存储器芯片。

        其中,M/l表示把M×N的空间分成(M/l)个部分(称为页或区),每页(N/k)个芯片。

地址分配:

    ①用log2 l位表示低位地址:用来选择访问页内的l个字

    ②用log2(M/l)位表示高位地址:用来经片选译码器产生片选信号。

例如:

用1k * 4 的存储器芯片 2114 组成  2k * 8 的存储器

    例:有若干片1M×8位的SRAM芯片,采用字扩展方法构成4MB存储器,问

(1) 需要多少片RAM芯片?

(2) 该存储器需要多少地址位?

(3) 画出该存储器与CPU连接的结构图,设CPU的接口信号有地址信号、数据信号、控制信号MREQ和R/W#。

(4) 给出地址译码器的逻辑表达式。

解:(1) 需要4M/1M = 4片SRAM芯片;(2) 需要22条地址线 (3) 译码器的输出信号 

(4) 逻辑表达式为:

例  设有若干片256K×8位的SRAM芯片,问:

(1) 采用字扩展方法构成2048KB的存储器需要多少片SRAM芯片?

(2) 该存储器需要多少字节地址位?

(3) 画出该存储器与CPU连接的结构图,设CPU的接口信号有地址信号、数据信号、控制信号MREQ#和R/W#。

解:

(1) 该存储器需要2048K/256K = 8片SRAM芯片;

(2) 需要21条地址线, 因为221=2048K,其中 高3位用于芯片选择, 低18位作为每个 存储器芯片的地址输入。 

(3) 该存储器与CPU连接 的结构图如下。

例 设有若干片256K×8位的SRAM芯片,问:   

 (1) 如何构成2048K×32位的存储器?    

(2) 需要多少片RAM芯片?    

(3) 该存储器需要多少字节地址位?    

(4) 画出该存储器与CPU连接的结构图,设CPU的接口信号有地址信号、数据信号、控制信号MREQ#和R/W#。

解:采用字位扩展的方法。需要32片SRAM芯片。

存储容量 = 存储单元个数 X 存储字长

存储单元个数 = 2^地址总线数

存储字长 = 2^数据总线数

六、双端口存储器


双端口存储器由于同一个存储器具有两组相互独立的读写控制电路而得名。

1.逻辑结构

图5.3-1 双端口存储器IDT7133逻辑框图

2.无冲突读写控制

        当两个端口的地址不相同时,在两个端口上进行读写操作,一定不会发生冲突。当任一个端口被选中驱动时,就可对整个存储器进行存取,每一个端口有自己的片选控制和输出驱动控制。 读操作时, 端口的   打开输出驱动器,有存储矩阵读出的数据就出现在I/O线上。

3.有冲突读写控制

        当两个端口同时存取存储器同一存储单元时, 变发生读写冲突。为了解决此问题,特设置了标志。在这种情况下, 片上的判断逻辑可以决定对哪个端口优先进行读写操作,而对另一个被延迟的端口置标志(变为低电平),即暂时关闭此端口。换句话说,读写操作对变为低电平的端口是不起作用的。 一旦优先端口完成读写操作,才将被延迟端口的标志复位(变为高电平),开放此端口,允许延迟端口进行存取。

七、交叉存储器


一个由若干个模块组成的主存储器是线性编址的。这些地址在各模块中如何安排,有两种方式:一种是顺序方式,一种是交叉方式。

1.顺序方式

        设存储器容量为32个字,分成M0、M1、M2、M3四个模块,每个模块存储8个字,访问地址按顺序分配给一个模块后,接着又按顺序为下一个模块分配访问地址,这样,存储器的32个字可由5位地址寄存器指示,其中高2位选择4个模块中的一个,低3位选择每个模块中的8个字。

2.交叉方式

        将4个线性地址0,1,2,3依次分配给M0、M1、M2、M3四个模块,再将线性地址4,5,6,7依次分配给M0、M1、M2、M3四个模块……直到全部线性地址分配完毕为止。当存储器寻址时,用地址寄存器的低2位选择4个模块中的一个,而 用高3位选择模块中的8个字。

3.基本结构

        主存被分为4个相互独立、容量相同的M0、M1、M2、M3四个模块。每个模块都有自己的读写控制电路、地址寄存器和数据寄存器,各自以等同的方式与CPU传送信息。

        CPU同时方位四个模块,由存储器控制部件控制他们分时使用数据总线进行信息传送。这样,对每一个存储模块来说,从CPU给出访存命令知道读出信息仍然使用了一个存储周期时间,而对CPU来说,它可以在一个存取周期内连续访问四个模块。各个模块的读写将重叠进行,所以多模块交叉存储器是一种并行存储器结构。

图5.3-2 顺序方式和交叉方式的存储
        假设模块自称等于数据总线宽度,模块存取一个字的存储周期为T,总线传送周期为,存储器的交叉模块数为m,那么为了实现流水线方式存取,应当满足: T=mt
即成块传送可按 间隔流水方式进行,也就是每经 时间延迟后启动下一个模块。
m=T/r 称为交叉存取度。交叉存储器要求其模块数必须大于或等于m,以保证启动某模块后经 时间再次启动该模块是,他的上次存取操作已经完成。 这样,连续读取m个字所需的时间为:t1 = T +(m-1)t
而顺序方式存储器连续读取m个字的时间为:t2 = mT
     

八、相联存储器


是按内容访问存储器。相联存储器的基本原理是把存储单元所存内容的某一部分作为检索项(即关键字项),去检索存储器,并将存储器中该检索项符合的存储单元内容进行读出或写入。

采用相联存储器可以极大地简化查找的形式和改进查找时间。

1.相联存储器的组成: 检索寄存器、屏蔽寄存器、符合寄存器、比较线路、代码寄存器、存储体。

图5.3-3  相联存储器逻辑图

九、命中率


在一个程序执行期间,设Nc表示完成存取的总次数,Nm表示主存完成存取的总次数,h定义为命中率。则有:

若tc表示命中时的CACHE访问时间,tm表示未命中时的主存访问时间,1-h表示未命中率,则CACHE/主存系统的平均访问时间ta为: 

例如:CPU执行一段程序时,cache完成存取的次数为1900此,主存完成存取的次数为100次,已知cache存取周期为50ns,主存存取后期为250ns,求cache/主存系统的效率和平均访问时间。 

 
 

十、地址映射


        为了把主存块放到cache中,必须应用某种方法把主存地址定位到cache中,称作地址映射。主要方式有:直接映射方式、相联映射方式、组相联映射方式。

        Cache的数据块的大小称为行,用Li表示,其中i=0,1,2,…m-1,共有m=2r行。主存的数据块大小称为块,用Bj表示,其中j=0,1,2,…n-1,共有n=2s块。行与块是等长的,每个块(行)是由k=2w个连续的字组成,字是CPU每次访问存储器时可存取的最小单位。

1.全相联映射方式

        在全相联映象中,主存中任一个块能够映象到Cache中任意一个块的位置。将主存中的一个块的地址(块号)与块的内容(字)一起存于cache的行中,其中块地址存于cache行的标记部分中。

主存地址长度=(s+w)位,寻址单元数=2s+w个字或字节,块大小=行大小=2w个字或字节,主存的块数=2s,Cache的行数=不由地址格式确定,标记大小=s位

(a)全相联映射示意图
 
 
b)全相联cache的检索过程
图5.4-2 全相联映射的cache组织
        检索过程:CPU访存指令制定了一个内存地址(包括主存和cache),为了快速检索,指令中的块号与cache中所有行的标记同时在比较器中进行比较。如果块号命中,则按字地址从cache中读取一个字;如果块号未命中,则按内存地址从主存中读取这个字。
全相联方式的主要缺点是比较器电路难于设计和实现,因此只适合小容量cache采用。
 
2.直接映射方式
         一种多对一的映射关系,一个主存块只能拷贝到cache一个特定行的位置上。
        在直接映象Cache中, 地址被划分未标志、页号和偏移量。页号用于确定数据地址在Cache存储器中的物理位置。 
        直接映象方式:根据 Cache 的大小把主存分成若干个区,因此主存容量是 Cache 容量的若干倍。
      i=j     mod m      
        式中: m cache 的总行数
        主存地址长度 = s+w) 位, 寻址单元数 =2 s+w 个字或字节, 块大小 = 行大小 =2 w 个字或字节, 主存的块数 =2 s, Cache 的行数 =m=2 r ,标记大小 = s-r )位。
 
(a)直接映射示意图
(b)直接映射cache的检索过程
图5.4-3 直接映射的cache组织
 
        检索过程:Cache将s位的块地址分为两部分:r位作为cache的行地址,s-r位作为标记(tag)与块数据一起保存在该行。当CPU以一个给定的内存地址访问cache时,首先 用r位行号找到cache中的此行,然后 用地址中的s-r位标记部分与此行的标记在比较器中做比较; 若相符即命中,在cache中找到所需要的块;而后 用地址中的最低的w位读取所需要的字; 若不符, 则未命中,有主存读取所需要的字。
直接映射方式的优点是硬件简单,成本低。缺点是每个主存块只有一个固定的行位置可存放。效率低下。直接映射方式适合于需要大容量cache的场合,更多的行数可以减少冲突的机会。
 
3. 组相联映像
组相联映象提供了在性能和价格之间的一种良好平衡。组相联映象是直接映象和相联映象的结合。组内是全相联映象, 组间是直接映象。
 
这种方式将cache分为u组,每组v行。主存块存放到哪个组是固定的,至于存到该组的哪一行是灵活的,即有如下函数关系:
m=u ╳ v
组号 q=j mod u
        块内存地址中 s 位块号划分成两部分:低序的d位( 2 d =u )用于表示cache组号,高序的s-d位作为标记(tag)与块数据一起存于此组的某行中。
          主存地址长度=(s+w)位, 寻址单元数=2 s+w 个字或字节, 块大小=行大小=2 w 个字或字节, 主存的块数=2 s, 每组的行数=k, 第组的v=2 d, Cache的行数=kv, 标记大小=(s-r)位
(b)组相联cache的检索过程
图5.4-4 组相联的cache组织

        cache的每一小框代表的不是“字”而是“行”。当CPU给定一个内存地址访问cache时,首先用块号域的低d位找到cache的相应组,然后将块号域的高s-d位与该组v行中的所有标记同时进行比较。哪行的标记与之相符,哪行即命中。此后再以内存地址的w位字域部分检索此行的具体字,并完成所需要求得存取操作。如果词组没有一行的标记与之相符,即cache未命中,次数需要按内存地址访问内存。

举例:

一个组相联cache由64个行组成,每组4行,主存储器包含4K个块,每块128个字,请表示内存地址的格式。

解:块大小=行大小=2w个字=128=27,所以w=7

    每组的行数=k=4

        Cache的行数=kv=K╳2d=4╳2d=64, 所以d=4

    组数=v=2d=24=16

          主存的块数=28=4K=22╳210=212,所以s=12

          标记大小(s-d)位=12-4=8位

          主存地址长度(s+w)位=12+7=19位

          主存寻址单元数2s+w=219

十二、替换策略和写策略


1.替换策略

当一个新的主存块需要拷贝到cache,而允许存放此块的行位置都被其他主存块占满时,就要产生替换。

常用的替换算法主要有以下三种:

    (1)最不经常使用(LFU)算法

LFU算法认为应将一段时间内被访问次数最少的那行数据换出。

    (2)近期最少使用(LRU)算法

LRU算法将近期内长久未被访问过的行换出。

    (3)随机替换

从特定的行位置中随机地选取一行换出即可。

图5.4-5 

2.Cache写

在Cache存储器与主存储器只能关键保持一致是很重要的。 一种方法是只写Cache,在页替换时再传送给主存。另一种方法是只要对缓存写操作, 就要同时写至主存中。有三种写操作策略:分别是写操作策略、写回法、全写法写一次法。

写回法:当CPU写CACHE命中时,只修改CACHE的内容,而不立即写入主存。只有当此行被换出时才写回主存。如果CPU写CACHE未命中,为了包含欲写字的主存块在CACHE分配一行,将此块整个拷贝到CACHE后对其进行修改。

全写法:当写CACHE命中时,CACHE与主存同时发生写修改,因而较好地维护了CACHE和主存内容的一致性。当写CACHE未命中时,只能直接项主存进行写入。

写一次法:写命中与写未命中的处理方法与写回法基本相同,指示第一次写命中时同时要写入主存。

十三、虚拟存储器的管理方式


(一)页式虚拟存储器

页式虚拟存储系统中,虚地址空间被分成等长大小的页,称为逻辑页;主存空间也被分成同样大小的页,称为物理页。

1.页式虚存地址映射

        虚地址分为两个字段:高字段为逻辑页号,低字段为页内地址(偏移量);

        实存地址也分为两个字段:高字段为物理页号,低字段为页内地址。通过页表可以把虚地址转换成物理地址。

2.转换后援缓冲器(TLB)

        由于页表通常在主存中,因而及时逻辑页已经在主存中,也至少要访问两次物理存储器才能实现一次访存,这将使虚拟存储器的存取时间加倍。为了避免对主存访问次数的增多,可以对页表本身实行耳机缓存,把页表中的最活跃的部分存放在高速存储器中。这个专用于页表缓存的高速存储部件通常称为转换后援缓冲器(TLB),又称快表。而保存在主存中的完整页表则称为慢表。快表的作用是加快地址变换。

        地址变换时,根据逻辑页号同时查快表和慢表,当在快表中有此逻辑页时,就能很快的找到对应的物理页号。根据程序的局部性原理,多数虚拟存储器访问都将通过TLB进行,从而有效降低访存的时间延迟。

图5.5-2 TLB的地址映射过程

(二)段式虚拟存储器

        在段式虚拟存储系统中,段是按照程序的逻辑结构划分的,各个段的长度因程序而异,虚拟地址由段号和段内地址组成。

        在段式虚拟粗出系统中,虚地址由段号和段内地址(偏移量)组成。虚地址到实主存地址的变换通过段表实现。每个程序设置一个段表,段表的每一表项对应一个段。每个表项至少包含三个字段:

    (1)有效位:指明该段是否已经调入实存

    (2)段起址:指明在该段已经调入实存的情况下,该段在实存中的首地址。

    (3)段长:记录该段的实际长度。

        段表本身也是一个段,可以存在辅存中,但一般是驻留在主存中。

        针对每个虚地址,存储管理部件首先以段号s为索引访问段表的第s个表项。若该表项的有效位为1,则将虚地址的段内偏移量d与该表项的段长字段比较:若偏移量较大,则说明地址越界,将产生地址越界中断;否则,将该表项的段起址与段内偏移量相加,求得主存实地址并访存。如果该表项的有效位为0,则产生 调页中断,从辅存中调入该页,并修改段表。

图5.5-3 段式虚拟存储器的地址映射过程

优点:

(1)段的逻辑独立性使其易于编译、管理、修改和保护,便于多道程序共享;

(2)段长可以根据需要动态改变,允许自由调度,有效利用主存空间;

3.段页式虚拟存储器

        段页式虚拟存储器是段式虚拟存储器和页式虚拟存储器的结合。

        实存被等分为页。每个程序则按逻辑结构分段,每段再按照实存的页大小分页。

        在段页式虚拟存储系统中,每到程序均通过一个段表和多个页表进行两级再定位。段表中的每个表项对应一个段,每个表项有一个指针指向该段的页表。页表则指明该段该段各页在主存中的位置,以及是否已装入,是否已修改等状态信息。

一个虚地址由段号、段内地址和页内偏移量构成。 在多任务系统中,操作系统还会在每个虚地址中前增加一个表明该程序再系统的序号的基号。

        程序对主存的调入调出是按页面进行的,但它又可以按段实现共享和保护。因此,它可以兼取页式和段式系统的优点。它的缺点是在地址映象过程中需要多次查表。目前,大中型机一般都采用这种段页式存储管理方式。

举例:

        今假设有三道程序(用户标志号为A,B,C),其基址寄存器内容分别为SA,SB,SC,逻辑地址到物理地址的转移过程见图5--7。在主存中,每道程序都有一张段表,A程序有4段,C程序有3段。每段应有一张页表,段表的每行就表示相应页表的起始位置,而页表内的每行即为相应的物理页号。

地址转换过程如下:

   (1)根据基号C,执行SC(基址寄存器内容)加1(段号)操作,得到段表相应行地址,其内容为页表的起始地址b。

   (2)执行b(页表起始地址)+2(页号),得到物理页号的地址,其内容即为物理页号10。

   (3)物理页号与页内地址拼接即得物理地址。

虚存的替换算法

    常用的替换算法有FIFO算法、LRU算法、LFU算法等。

    虚拟存储器的替换算法与cache的替换算法不同的是:

    (1)cache的替换全部靠硬件实现,而虚拟存储器的替换有操作系统的支持。

    (2)虚存缺页对系统性能的影响比cache未命中要大得多,因为调页需要访问辅存,并且要哦进行任务切换。

    (3)虚存页面替换的选择余地很大,属于一个进程的页面都可替换。

 
 
 
 
 
 
发布了61 篇原创文章 · 获赞 10 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Dnesity/article/details/104992742