第四章 存储系统 4-1 存储系统概论 4-2 RAM(随机读写存储器) 4-3 ROM(只读存储器) 4-4 高速缓冲存储器(Cache) 第四章 存储系统 4-1 存储系统概论 4-2 RAM(随机读写存储器) 4-3 ROM(只读存储器) 4-4 高速缓冲存储器(Cache) 4-5 虚拟存储器 4-6 存储保护 1
4.1 存储系统概论 存储器是计算机系统的重要组成部分之一,有主存储器和辅助存储器之分。主存储器用来存放程序和数据,CPU在工作过程中要频繁地与主存储器交换信息。目前采用按地址访问的主存储器,它由存储元构成,存储元是存储器的最小单位,一存储元可以存放一位二进制信息。若干个存储元构成一个存储字,每个存储字有一个相对应的惟一的地址。通常存储字长与机器字长相同。计算机的工作过程是执行程序的过程。程序连同所需要的数据要事先存入主存储器中,CPU在执行程序的过程中,要从主存储器中取出指令和参加运算的操作数,运算结束后,再将运算结果写回到主存储器的指定地址中。因此,中央处理器与主存储器之间关系非常密切。可以说,高性能的中央处理器必须与高性能的主存储器配合工作,才能构成高性能的计算机系统。
4.1.1 存储器分类 根据存储材料的性能及使用方法不同,存储器有各种不同的分类方法。 按存储介质分 作为存储介质的基本要求,必须有两个明显区别的物理状态,分别用来表示二进制的代码0和1。另一方面,存储器的存取速度又取决于这种物理状态的改变速度。目前使用的存储介质主要是半导体器件和磁性材料。用半导体器件组成的存储器称为半导体存储器。用磁性材料做成的存储器称为磁表面存储器,如磁盘存储器和磁带存储器。 按存取方式分 如果存储器中任何存储单元的内容都能被随机存取,且存取时间和存储单元的物理位置无关,这种存储器称为随机存储器。半导体存储器是随机存储器。如果存储器只能按某种顺序来存取,也就是说存取时间和存储单元的物理位置有关,这种存储器称为顺序存储器。如磁带存储器就是顺序存储器,它的存取周期较长。磁盘存储器是半顺序存储器。
按存储器的读写功能分 有些半导体存储器存储的内容是固定不变的,即只能读出而不能写入,因此这种半导体存储器称为只读存储器(ROM)。既能读出又能写入的半导体存储器,称为随机读写存储器(RAM)。 按在计算机系统中的作用分 根据存储器在计算机系统中所起的作用,可分为主存储器、辅助存储器、高速缓冲存储器、控制存储器等。
4.1.2 存储器的层次结构 任何计算机系统中,对存储器的要求可概括为“大容量、高速度、低成本”。一般来说,要求存储器速度很高,存储容量就不可能很大,价格也不可能很低;如果要求存储器容量很大,存储速度就不可能很高,成本也不能很低,三者之间是相互矛盾的。为了能较好地满足上述三个方面的要求,有效的办法是采用由不同介质形成的存储器构成存储器的层次结构。 最简单的二级存储层次如图4—1所示。整个存储系统由主存储器和辅助存储器两级构成。主存储器一般由半导体存储器构成,它速度快,但容量较小,成本较高,通常用来存放程序的“活跃部分”,直接与CPU交换信息;辅助存储器一般由磁表面存储器构成,它速度慢,但容量大、成本低,通常用来存放程序的“不活跃部分”,即暂时不执行的程序或暂时不用的数据,需要时,将程序或数据以信息
块为单位从辅助存储器调入主存储器中。那么,什么时候应将辅存中的信息块调入主存,什么时间将主存中已用完的信息块调入辅存,所有这些操作都是由图的上方所示的辅助软硬件来完成,只有这样,由主、辅存构成的两级存储层次才成为一个完整的存储系统,对CPU来说,访问存储器的速度是主存储器的,而存储器的容量和成本是辅助存储器的,较好地满足上述三个方面的要求。
考虑到由半导体存储器构成的主存储器的访问速度与CPU相比还是有一定差距,希望能进一步提高存储系统的等效速度,有效的办法是在CPU和主存储器之间增设一级高速缓冲存储器(cache),如图4—2所示。
在三级存储层次中,高速缓冲存储器的访问速度可与CPU相匹配,但是其容量比主存储器更小,任何时候cache中的信息是主存储器中一部分信息的副本。当CPU需要访问主存储器时,根据给定的主存储器地址迅速判定该地址中的信息是否已进入cache中,如果已进入cache中,则经地址变换后立即访问cache,如果cache不命中,则直接访问主存储器,显然,cache命中率越高越好。为提高访问cache的速度,需要在cache与主存储器之间设置一块辅助硬件。由它来完成主存与cache之间的地址变换功能。这样就构成了“cache一主存一辅存”三级存储层次。在理想情况下,访问主存储器的速度决定于cache,而其容量和成本则决定于辅存,它能更好地满足“高速度、大容量、低成本”三方面的要求。
4.1.3 存储器的技术指标 主存储器的性能指标主要是存储容量、存取时间、存储周期和存储器带宽。存放一个机器字的存储单元,通常称为字存储单元,相应的单元地址叫字地址。而存放一个字节的单元,称为字节存储单元,相应的地址称为字节地址。如果计算机中可编址的最小单位是字存储单元,则该计算机称为按字寻址的计算机。如是计算机中可编址的最小单位是字节,则该计算机称为按字节寻址的计算机。一个机器字可以包含数个字节,所以一个存储单元也可包含数个能够单独编址的字节地址。例如一个16位二进制的字存储单元可存放两个字节,可以按字地址寻址,也可以按字节地址寻址。当用字节地址寻址时,16位的存储单元占两个字节地址。在一个存储器中可以容纳的存储单元总数通常称为该存储器的存储容量。存储容量越大,能存储的信息就越多。存储容量常用字数或字节数(B)来表示,如64KB,512KB,64MB。外存中为了表示更大的存储容量,采用GB,TB等单位。其中1KB=210B,1MB=220B,1GB=230B,1TB=240B。B表示字节,一个字节定义为8个二进制位,所以计算机中一个字的字长通常是8的倍数。存储容量这一概念反映了存储空间的大小。
存取时间 又称存储器访问时间,是指从启动一次存储器操作到完成该操作所经历的时间。具体讲,从一次读操作命令发出到该操作完成,将数据读人数据缓冲寄存器为止所经历的时间,即为存储器存取时间。 存储周期 是指连续启动两次读操作所需间隔的最小时间。通常,存储周期略大于存取时间,其时间单位为ns。 存储器带宽 是单位时间里存储器所存取的信息量,通常以位/秒或字节/秒做度量单位。带宽是衡量数据传输速率的重要技术指标。 存取时间、存储周期、存储器带宽都反映了主存的速度指标。
4.2 RAM(随机读写存储器) 目前广泛使用的半导体存储器是MOS半导体存储器。根据存储信息的原理不同,又分为静态MOS存储器(SRAM)和动态MOS存储器(DRAM)。半导体存储器的优点是存取速度快,存储体积小,可靠性高,价格低廉;缺点是断电后存储器不能保存信息。
4.2.1 SRAM 1.存储元 基本存储元是组成存储器的基础和核心,它用来存储一位二进制信息0或1。图4—3示出了六管SRAM存储元的电路图,它是由两个MOS反相器交叉耦合而成的触发器。一个存储元存储一位二进制代码,如果一个存储单元为n位,则需由n个存储元才能组成一个存储单元。
图4-3 六管SRAM存储元电路图
图4-3中,T3、T4管是负载管,T1、T2管为工作管。若T1截止,A点为高电位,使T2管导通,此时B点处于低电位,而B点的低电位又使T1更加截止,因此,这是一个稳定状态。反之,如果T1导通,则A点处于低电位,使T2管截止,这时B点处于高电位,而点处于高电位又使T1管更导通,因此,这也是一个稳定状态。显然,这种电路有两个稳定的状态,并且A,B两点的电位总是互为相反的。如果我们假定A点高电位代表“1”,A点低电位代表“0”,那么,这个触发器电路就能表示一位二进制的1和0。T5、T6、T7、T8 为控制管或开门管。由存储元组成存储器时,必须能够控制按地址选择存储元的操作。如果某存储元被选中,则X地址译码线和Y地址译码线均处于高电位,使T5、T6、T7、T8四个晶体管均导通,输入输出电路I/O及I/O就分别与A点和B点相接。这时,A点和B点的电位状态0或1,就能输出到I/O与I/O线上。
写操作 写操作时,如果要写入“1”,则在I/O线上输入高电位,而在I/O线上输入低电位,并通过开启T5、T6、T7、T8四个晶体管,把高、低电位分别加在A,B点,从而使T1管截止,使T2管导通。当输入信号及地址选择信号消失之后,T5、T6、T7、T8管都截止,T1和T2管就保持被强迫写入的状态不变,从而将“1”写入存储元。当T5、T6、T7、T8四个管子关闭(截止)后,各种干扰信号就不能进入T1和T2管。写“0”的情况完全类似,在I/O线上输入低电位,在I/O线上输入高电位,打开T5、T6、T7、T8四个开门管,把低、高电位分别加在A、B点,从而使T1管导通,T2管截止,于是“0”信息写入了存储元。
但是,要同时打开T5、T6、T7、T8这四个管子,必须把X地址译码线和Y地址译码线同时输入高电位。如果X地址译码线和Y地址译码线任一为低电位或同时为低电位时,该存储元就没有被选中。 读操作 读操作时,若某个存储元被选中,则该存储元的T5、T6、T7、T8管均导通,于是A,B两点与位线D与D相连,存储元的信息被送到I/O与I/O线上。I/O与I/O线接着一个差动读出放大器,从其电流方向,可以判知所存信息是“1”还是“0”。也可以只有一个输出端接到外部,看其有无电流通过,就可判知所存信息是“1”还是“0”。
2.SRAM存储器的组成 一个SRAM存储器由存储体、读写电路、地址译码电路和控制电路等组成,其框图示于图4-4中。
存储体 存储体是存储单元的集合。在较大容量的存储器中,往往把各个字的同一位组织在一个集成片中。如图中的4096×1位,是指4096个字的同一位。由这样的16个片子则可组成4096×16的存储器。同一位的这些字排成矩阵,如64×64=4096。由X(行线)和Y(列线)的交叉来选择所需要的单元。 地址译码器 地址译码器的输入信息来自CPU的地址寄存器。地址寄存器用来存放所要访问(写入或读出)的存储单元的地址。CPU要选择某一存储单元,就在地址总线A0~A11上输出此单元的地址信号给地址译码器。地址译码器把用二进制代码表示的地址转换成输出端的高电位,用来驱动相应的读写电路,以便选择所要访问的存储单元。
地址译码有两种方式:一种是单译码方式,适用于小容量存储器;另一种是双译码方式,适用于大容量存储器。单译码结构也称字结构。在这种方式中,地址译码器只有一个,译码器的输出叫字选线,而字选线选择某个字(某存储单元)的所有位。例如,地址输人线n=4,经地址译码器译码,可译出24=16个状态,分别对应16个字地址。 为了节省驱动电路,存储器中通常采用双译码结构。采用双译码结构,可以减少选择线的数目。在这种译码方式中,地址译码器分成X向和Y向两个译码器。若每一个有n/2个输入端,它可以译出2 n/2个输出状态,那么两个译码器交叉译码的结果, 共可译出 2 n/2×2 n/2=2n个输出状态,其中n为地址输入量的二进制位数。但此时译码输出线却只有 2 ×2 n/2根。例如n=12,双译码输出状态为212=4096个,而译码线仅只有2× 26=128根。
驱动器 由于在双译码结构中,一条X方向选择线要控制挂在其上的所有存储元电路,例如4096×1中要控制64个电路,故其所带的电容负载很大。为此,需要在译码器输出后加驱动器,由驱动器驱动挂在各条X方向选择线上的所有存储元电路。I/O电路 它处于数据总线和被选用的单元之间,用以控制被选中的单元读出或写入,并具有放大信息的作用。 片选与读/写控制电路 目前每一个集成片的存储容量终究还是有限的,所以需要一定数量的片子按一定方式进行连接后才能组成一个完整的存储器。在地址选择时,首先要选片。通常用地址译码器的输出和一些控制信号(如读写命令)来形成片选信号。只有当片选信号有效时,才能选中某一片,此片所连的地址线才有效,这样才能对这一片上的存储元进行读操作或写操作。至于是读还是写,取决于CPU所给的命令是读命令还是写命令。 输出驱动电路 为了扩展存储器的容量,常需要将几个芯片的数据线并联使用;另外存储器的读出数据或写入数据都放在双向的数据总线上。这就用到三态输出缓冲器。
3.存储器与CPU连接 CPU对存储器进行读/写操作,首先由地址总线给出地址信号,然后发出读操作或写操作的控制信号,最后在数据总线上进行信息交流。因此,存储器同CPU连接时,要完成地址线的连接、数据线的连接和控制线的连接。 目前生产的存储器芯片的容量是有限的,它在字数或字长方面与实际存储器的要求都有差距,所以需要在字向和位向两方面进行扩充才能满足实际存储器的容量要求,通常采用位扩展法、字扩展法、字位同时扩展法。
位扩展法 假定使用8K×l的RAM存储器芯片,那么组成8K×8位的存储器,可采用图所示的位扩展法。此时只加大字长,而存储器的字数与存储器芯片字数一致。图中,每一片RAM是8192×1,故其地址线为13条(A0~A12),可满足整个存储体容量的要求。每一片对应于数据的1位(只有1条数据线),故只需将它们分别接到数据总线上的相应位即可。在这种方式中,对片子没有选片要求,就是说片子按已被选中来考虑。如果片子有选片输入端(),可将它们直接接地。在这种连接时,每一条地址总线接有8个负载,每一条数据线接有一个负载。
字扩展法 字扩展是仅在字向扩充,而位数不变,因此将芯片的地址线、数据线、读/写控制线并联,而由片选信号来区分各片地址,故片选信号端连接到选片译码器的输出端。图3.7示出用16K×8位的芯片采用字扩展法组成64K×8位的存储器连接图。图中4个芯片的数据线与数据总线D0一D7相连,地址总线低位地址A0一A13与各芯片的14位地址端相连,两位高位地址A14,A15经译码器和4个片选端相连。
字位同时扩展法 一个存储器的容量假定为M×N位,若使用i×j位的芯片(i < M,j < N),需要在字向和位向同时进行扩展。此时共需要(M/i) × (N/j)个存储器芯片。 4.存储器的读、写周期 在与CPU连接时,CPU的控制信号与存储器的读、写周期之间的配合问题是非常重要的。对于已知的RAM存储片,读写周期是已知的。 5.静态MOS随机存储器实例 从图中可看出,该芯片有10条地址输入线(A9~A0),4条数据输入/输出线(1/O1~I/O4)2条控制线(写允许信号和选片信号)。1K×4个存储元集合成1个64×64的方阵。
采用双译码方式,6位地址码(A8~A3)用做行地址经译码后产生64条行选择线(X0~X63),4位地址码(A9、A2、A1、A0)用做列地址经译码后产生16条列选择线(Y0—Y15)。当任何一条X选择线和Y选择线被选时,其上的4个存储元在和信号控制下可从该存储字中读出或写入4位信息。
4.2.2 DRAM 1.四管动态存储元 在六管静态存储元电路中,信息暂存于T1,T2管的栅极,这是因为管子总是存在着一定的电容。负载管T3,T4是为了给这些存储电荷补充电荷用的。由于MOS的栅极电阻很高,故泄漏电流很小,在一定的时间内这些信息电荷可以维持住。为了减少管子以提高集成度,把负载管T3,T4去掉,这样就变成了四管的动态存储电路,如图所示。
T5,T6仍是控制管,由字选择线(X线)控制。当选择线为高电平时,T5,T6导通,则存储电路的A,B点与位线D,分别相连,再通过T7,T8管与外部数据线I/O与相通。同时在一列的位线上接有两个公共的预充管T9,T10。 写操作 当写入时,I/O与仍加相反的电平(例如写入“1”时I/O=“1”,=“0”),字选择线的高电平打开T5,T6管,因而所存的信息送至A,B端,将信息存储在T1,T2管的栅极电容上。当T5,T6截止时,靠T1,T2管栅极电容的存储作用,在一定时间内(如2ms)可以保留所写入的信息。 读操作 当读出时,先给出预充信号,使T9,T10管导通,于是电源就向位线D和上的电容充电,使它们都达到电源电压。当字选择线使T5,T6管导通时,存储的信息 通过A,B端向位线输出。若原存信息为“1”,则电容C2上存有电荷,T2管导通,而T1 管截止,
因此上的预充电荷经T2管泄漏,故=“0”,而D仍为“1”,信号通过I/O和线输出。与此同时,D上的电荷可以通过A点向C2补充。故读出过程也是刷新的过程。 刷新操作 由于存储的信息电荷终究是有泄漏的,电荷数又不能像六管电路那样由电源经负载管来不断补充,时间一长,就会丢失信息。为此,必须设法由外界按一定规律不断给栅极进行充电,补足栅极的信息电荷,这就是所谓“再生”或“刷新”。
四管存储元的刷新并不复杂,在字选线上加一个脉冲就能自动刷新正确的存储信息。设原存信息为“1”,T2管导通,T1管截止。若经过一段时间,T2管栅极上漏失了一部分信息电荷,使A端的电压稍小于存“1”时的满值电压。当字选择线上加脉冲使T5,T6管开启后,A端与位线D相连,就被充电到满值电压,从而刷新了原存的“1”信息。显然,只要定时给全部存储元电路执行一遍读操作,而信息不向外输出,那么就可实现信息再生或刷新。 2.单管动态存储元 为了进一步缩小存储器的体积,提高它们的集成度,人们又设计了单管动态存储元电路。如图所示,它由一个管子T1和一个电容C构成。写入时,字选择线为“1”,T1管导通,写入信息由位线(数据线)存人电容C中;读出时,字选择线为“1”,存储在电容C上的电荷,通过T1输出到数据线上,通过读出放大器即可得到存储信息。
比较四管和单管存储元电路,它们各有优缺点。四管电路的缺点是管子多,占用的芯片面积大,它的优点是外围电路比较简单,读出过程就是刷新过程,故在刷新时不需要另加外部逻辑。单管电路的元件数量少,集成度高,但因读“1”和“0”时,数据线上的电平差别很小,需要有高鉴别能力的读出放大器配合工作,外围电路比较复杂。
3.DRAM的刷新 动态MOS存储器采用“读出”方式进行刷新。因为在读出过程中恢复了存储单元的MOS栅极电容电荷,并保持原单元的内容,所以读出过程就是再生过程。通常,在再生过程中只改变行选择线地址,每次再生一行。依次对存储器的每一行进行读出,就可完成对整个DRAM的刷新。从上一次对整个存储器刷新结束到下一次对整个存储器全部刷新一遍为止,这一段时间间隔叫刷新周期,一般为2ms,4ms或8ms。常用的刷新方式有三种,一种是集中式,另一种是分散式,第三种是异步式。 (1)集中式刷新方式 以2116芯片为例,假定读/写周期为500 ns,那么刷新128行所需时间为500×128×10-3=64μs,如果采用集中式刷新方式,那么必须在2 ms的时间内集中用64μs的时间对存储器进行刷新操作,在此期间不允许CPU或其他处理机访问存储器,采用集中式刷新方式的时间分配图如图所示。
从图中可以看出,在2ms的刷新间隔时间内,共包含4000个读/写周期,集中用128个“假读”周期完成128行的刷新操作,在此期间,存储器不能被访问,常称做“死时间”占2ms时间的3.2%。显然,存储器的速度越快,“死时间”所占比例越小,因此这种刷新方式宜在高速存储器中使用。
(2)分散式刷新方式 分散式刷新方式的时间分配图如图。可以看出,分散式刷新方式是每读/写一次存储器就刷新一行存储元,假定存储器的读/写周期为500ns,那么相当于读/写周期延长为1000ns。这就是说,每读/写128次存储器就能对128行存储元刷新一遍,其刷新的间隔为128μs,在2ms时间内,能对每个存储元刷新16遍。这显然没有必要,而且存储器访问速度因此而降低一倍。其优点是不出现“死时间”。
图1-4 计算机软件组成图
(3)异步式刷新方式 前述两种刷新方式的结合,基本思想是将刷新操作平均分配到整个刷新间隔时间内进行。访问周期为500ns,整个芯片共128行,即2ms时间内,只要求刷新128次,于是每行的刷新间隔为: 2 ms ———— = 15.625μs 128 于是将2ms时间分成128段,每段15.5μs,在每段内利用0.5μs的时间刷新一行,保证在2ms时间内能对整个芯片刷新一遍,其时间分配图如图所示。
从图中可以看出,这种刷新方式是把集中式刷新的64μs“死时间”分散成每15.5μs出现0.5μs的死时间,这对CPU的影响不大,而且不降低存储器的访问速度,控制上也并不复杂,是一种比较实用的方式。除此之外,异步式刷新还可采用利用CPU不访问存储器的空闲时间,对存储器进行刷新操作,这种方式完全不出现“死时间”,也不降低存储器的访问速度,但是必须保证在2mS时间内能刷新一遍整个芯片,否则将造成严重后果,因此这种方式控制比较复杂,实现起来比较困难。
【例1】 说明1M×l位DRAM片子的刷新方法,刷新周期定为8ms。 解:如果选择一个行地址进行刷新,刷新地址为A0~A8,因此这一行上的2048个存储元同时进行刷新,即在8ms内进行512个周期的刷新。按照这个周期数,512×2048=1 048 567,即对1M位的存储元全部进行刷新。刷新方式可采用:在8ms中进行512次刷新操作的集中刷新方式,或按8ms÷512=15.5μs刷新一次的异步刷新方式。
所谓算法语言,是指按实际需要规定好的一套基本符号以及由这套基本符号构成程序的规则。算法语言比较接近数学语言,它直观通用,与具体机器无关,只要稍加学习就能掌握,便于推广使用计算机。有影响的算法语言有BASIC,FORTRAN,C,C++,JAVA等。用算法语言编写的程序称为源程序。但是,这种源程序如同汇编源程序一样,是不能由机器直接识别和执行的,也必须给计算机配备一个既懂算法语言又懂机器语言的“翻译”,才能把源程序翻译为机器语言。通常采用编译方法和解释方法这两种方法。 随着计算机技术的日益发展,原始的操作方式越来越不适应,特别是用户直接使用大型机器并独占机器,无论是对机器的效率来说还是对方便用户来说都不适宜。用户直接使用机器总觉得机器“太硬了”,很多情况都得依附它。而计算机又觉得用户及外部设备“太笨”,常常使它处于无事可做的状态,要摆脱这种情况还要依靠计算机来管理自己和管理用户,于是人们又创造出一类程序,叫做操作系统。它是随着硬件和软件不断发展而逐渐形成的一套软件系统,用来管理计算机资源(如处理器、内存、外部设备和各种编译、应用程序)和自动调度用户的作业程序,而使多个用户能有效地共用一套计算机系统。操作系统的出现,使计算机的使用效率成倍地提高,并且为用户提供了方便的使用手段和令人满意的服务质量。
4.3 ROM(只读存储器) 4.3.1 ROM的分类 只读存储器简称ROM,它只能读出,不能写入,故称为只读存储器。工作时,将一个给定的地址码加到ROM的地址码输入端,此时,便可在它的输出端得到一个事先存人的确定数据。只读存储器的最大优点是具有不易失性,即使供电电源切断,ROM中存储的信息也不会丢失。因而ROM获得了广泛的应用。只读存储器存人数据的过程,称为对ROM进行编程。根据编程方法不同,ROM通常分为以下三类: 掩模式只读存储器 这类ROM所在的数据,在芯片制造过程中就确定了,因而使用时只能读出,不能再进行改变。它的优点是可靠性高,集成度高,价格便宜,适宜大批量生产;缺点是不能重写。这种器件只能专用,用户可向生产厂家定做。
一次编程只读存储器(PROM) PROM在产品出厂时,所有存储元均制成“0”(或均为“l”)。用户根据需要可自行将其中某些存储元改为“1”(或改为“0”)。例如,双极型PROM有两种结构,一种是熔丝烧断型PROM,另一种是PN结击穿型PROM。它们只能进行一次性改写,一旦编程完毕,其内容便是永久性的,无法进行更改。由于可靠性差,加上只能一次性编程,目前已经淘汰。 多次编程只读存储器 这类ROM有光擦编程只读存储器EPROM,电擦编程只读存储器EEPROM。这两类器件可以分别用紫外光照射或电的方法擦除原来写入的数据,然后,再用电的方法重新写入新的数据。除此二类外,又出现了电改写的EAROM。目前,用于改写的编程设备已很便宜,编程方法也较简单,因此,这几类ROM得到了广泛的应用。
4.3.2 光擦可编程只读存储器(EPROM) PROM只能写一次,为了能多次改变ROM中所存的内容,又出现了光擦可编程只读存储器,简称EPROM。下图示出P沟道EPROM的基本电路结构示意图。它与普通P沟道增强型MOS电路相似,在N型基片上生长了两个高浓度的P型区,它们通过欧姆接触,分别引出源极(S)和漏极(D)。在S极与D极之间,有一个由多晶硅做的栅极,但它是浮空的,被绝缘物SiO2所包围。管子制造好时,硅栅上没有电荷,因此管子内没有导电沟道,D极和S极之间是不导电的。当把EPROM管子用于存储矩阵时,一个基本存储元电路如图 (b)所示,这种电路所组成的存储矩阵输出为全“1”。当写入“0”时,在D和S极之间加上25V高压,另外加上编程脉冲(其宽度约为50ms),所选中的单元在这个电压作用下,D,S之间被瞬时击穿,于是有电子通过绝缘层注入到硅栅。
当高压电源去除后,因为硅栅被绝缘层包围,故注入的电子无处泄漏,硅栅变负,于是就形成了导电沟道,从而使EPROM存储元导通,输出为“0”。由这种EPROM做成的片子封装上方有一个石英玻璃窗口。当用紫外线照射这个窗口时,所有电路中的浮空晶栅上的电荷会形成光电流泄漏走,使电路恢复起始状态,从而把原先写入 的“0”信息擦去。经过照射后的EPROM,还可以进行再写,写入后仍作为只读存储器使用。
4.3.3 闪速存储器 90年代英特尔公司发明的闪速存储器是一种高密度、非易失性的读/写半导体存储器,它突破了传统的存储器体系,改善了现有存储器的特性,因而是一种全新的存储器技术。闪速存储器的存储元电路是在CMOS单晶体管EPROM存储元基础上制造的,因此它具有非易失性。不同的是,EPROM通过紫外光照射进行擦除,而闪速存储器则是在EPROM沟道氧化物处理工艺中特别实施了电擦除和编程次数能力的设计。通过先进的设计和工艺,闪速存储器实现了优于传统EPROM的性能。 闪速存储器具有以下一些明显的特点: 固有的非易失性 SRAM和DRAM断电后保存的信息随即丢失,为此SRAM需要备用电池来确保数据存留,而DRAM需要磁盘作为后援存储器。由于闪速存储器具有可靠的非易失性,它是一种理想的存储器。
廉价的高密度 不计SRAM电池的额外花费和占用空间,1M位闪速存储器的位成本比SRAM低一半以上,而16M位闪速存储器的位成本更低。相同存储器容量的闪速存储器和DRAM相比,位成本基本相近,但闪速存储器节省了后援存储器(磁盘)的额外费用和空间。 可直接执行 闪速存储器直接与CPU连接,由于省去了从磁盘到RAM的加载步骤,工作速度仅取决于闪速存储器的存取时间。例如120ns的读出时间使CPU实现了无等待时间,用户可充分享受程序和文件的高速存取。 固态性能 闪速存储器是一种低功耗、高密度且没有机电移动装置的半导体技术,因而特别适合于便携式等微型计算机系统,使它成为替代磁盘的一种理想工具。
4.4 高速缓冲存储器(Cache) 4.4.1 高速缓冲存储器的结构 作为提高主存等效速度的有效措施之一,在CPU和主存储器之间增设一级一定容量的cache,近些年来越来越受到计算机设计者的青睐,因为实践证明,它取得了很好的效果。在一些高档的微型计算机系统中已经出现了片内cache和片外cache的2级cache系统。 在CPU和主存储器之间增设一级cache存储器构成的“cache~主存”两级存储层次如下图所示。
在这样的存储系统中,cache容量较小,但速度很快,可与CPU中的TTL器件相匹配,任何时候cache中的信息是主存中某一部分地址中信息的副本,所以cache并不是主存储器容量的扩充。当CPU需要访问主存储器时,用访存地址访问主存储器的同时,将访存地址变换成cache地址。
如果cache命中,则立即用cache地址去访问cache,由于访问cache速度比访问主存速度快得多,因此本次访主存操作无需继续进行,而是由访问cache所代替,访问主存的速度就提高成为访问cache的速度。只有当cache不命中时,才需要访问主存,可以设想,当cache命中率达到100%时,则访问主存的等效速度提高为访问cache的速度。而若cache的命中率等于0,则访问主存速度不会有任何提高。因此可以这样认为,在“cache─主存”的存储系统中,追求的主要目标是尽可能提高cache的命中率。
4.4.2高速缓冲存储器与主存之间的地址变换 为了简化cache与主存之间地址变换的操作,加快地址变换的速度,将cache和主存分成同样大小的块,每块可包含几十个或几百个存储字,显然主存中的块数会比cache中的块数多得多。例如,某系统中主存容量为1MB,而cache容量为8KB,每1KB为一块,于是主存中共有1K块,而cache中只有8块,这就是说,任何时候主存中最多只能有8块信息进入cache中,使主存和cache的块内地址保持一致,于是主存与cache之间的地址变换就简化成为块号的变换,它们的地址结构如下所示。
A19 主存块号 A10 A9 块内地址 A0 主存地址 A12A11A10 A9 块内地址 A0 Cache地址 Cache块号 当主存中的信息需要调入cache中时,以块为单位,主存中的任何一块是否可调入cache中的任何一块中,这就是地址映像问题。常用的地址映像方式有全相联映像、直接映像和组相联映像等三种方式。
1.全相联映像方式 “全相联映像方式”是指主存中任何一块信息可调入cache的任何一块中,如上左图所示。
采用全相联映像方式的cache系统中,CPU访问主存时,需要将主存块号变换成cache块号,为此需要设置一个块号对照表。 装入位 005 5 1 3A0 245 6 …
主存中任何一块调入cache时,要填写好块号对照表,并将其装入位置“1”,表示cache中该块已被占用。待CPU给出访存地址时,则立即查块号对照表,当从表中能找到对应的cache块号时,表示cache命中,将所得cache块号与块内地址连接起来去访问cache。这种映像方式使得cache的利用率比较高,只有cache的所有块全部被占用后才会出现cache冲突,需要进行替换。 2.直接映像方式 “直接映像方式”是指主存中的某些页只能固定调入cache中的某一页,它们之间存在固定的关系。其做法是将主存分成与cache同样大小的区,每个区的第。块只能调入cache的第0块,每个区的第1块只能调入cache第1块,其他块依此类推。
上例中cache共8块,而主存有1K块,可分成128个区,它们之间的对应关系如图所示。 主存与cache之间的地址结构如下所示。 A19 A13 A12A11A10 A9 A0 区号 块号 块内地址 主存地址 ↓ Cache地址
可以看出,cache的块号和块内地址与主存相同,可以直送,在块号对照表中只需记录各个块所对应的主存区号(7位)。CPU访问主存时,只需查该区号是否在对照表中。这种映像方式简化了地址变换过程,但是cache的利用率非常低,cache中任何一块被占用后,若主存中另外一个区的同一块又要调入cache则将产生cache冲突,必须将这一块替换掉,尽管这时cache中其他块还空闲也无法调入。 3.组相联映像方式 组相联映像方式是以上两种映像方式的折中方案。将主存和cache分成同样大小的组,
每个组内包含同样数量的块,组内采用全相联映像方式,而组间采用直接映像方式。上例中cache共8块分成两个小组,每个小组4块,主存中同样每4块构成一个小组,2个小组构成—个区,于是主存中共有128个区,每个区内包含第0组和第1组。
任何—个区内的第0组只能调入cache的第0组,第l组只能调入cache的第1组,实现组间的直接映像,而各个小组内部实现全相联映像方式。cache与主存之间的组相联映像方式如上图所示。 ↓组号 组内块号 A19区号A13 A12 A11A10 A9块内地址 A0 主存地址 ↓ 块内地址 Cache地址
可以看出,cache的块内地址和组号与主存的块内地址和组号均相同可以直送。块号对照表中需要记录的是主存的哪一区中某一组的哪一块调入了cache的同一组的哪一块。其地址变换过程介于前面两种映像方式之间。cache的利用率比直接映像方式有所提高。任何一个组只有组内4块都被占用时才会产生cache冲突而需要替换。主存中有128×4块可调入cache中同一组内的某一块。
4.4.3 替换方法 采用全相联映像方式时,如果cache中所有的块都已被占用,而主存中又有一块要调入cache,也需要从已进入cache的各个块中选出一块来作为被替换块;当采用组相联映像方式时,如果cache中某一组的所有块已被占用,而主存中某一区的同一组中又有一块要调入cache,也需要从cache的这一组中选出一块作为被替换块。但是应该选出哪一块呢?这就是替换方法所要解决的问题。常用的替换方法有随机算法、先进先出算法和近期最少使用算法。 1.随机算法 这是一种最简单的替换算法。当需要找替换块时,由随机数发生器产生一个随机数,它就是被替换块的块号。这种算法完全不反映程序的局部性特点,不是一种好的算法,但实现容易。
2.先进先出算法(FIFO) FIFO算法是挑选最先进入cache的块作为被替换块。为了实现这种算法,需要在地址变换表中设置一个历史位,每当有一个新块调入cache时,将已进入cache的所有块的历史位加“1”,于是当需替换时,只要挑选历史位中数值最大的块作为被替换块。这种算法在一定程度上能反映程序的局部性特点,比随机算 3.近期最少使用算法(LRU) LRU (LeastRecentlyUsed) 算法的基本思想是挑选近期最久没有使用过的块作为被替换块,这种算法能较好地反映程序的局部性特点。
LRU算法可用堆栈来实现,所以又被称做堆栈型算法。当所设堆栈已满,又有一块要求调入cache时,首先检查堆栈中是否已经有这一块,如果有,则将这一块从堆栈中取出压入堆栈的栈顶,如果没有,则将该块直接压入栈顶,于是原栈底上的块为被替换块而被压出了堆栈,保证任何时候栈顶上的块总是刚被访问过的块,而栈底上的块总是最久没有被访问过的块。当前这被认为是一种最好的算法。
4.5 虚拟存储器 4.5.1 虚拟存储器的定义 1.虚拟存储器概念 4.5 虚拟存储器 4.5.1 虚拟存储器的定义 1.虚拟存储器概念 虚拟存储器只是一个容量非常大的存储器的逻辑模型,不是任何实际的物理存储器。它借助于磁盘等辅助存储器来扩大主存容量,使之为更大或更多的程序所使用。虚拟存储器不仅是解决存储容量和存取速度矛盾的一种方法,而且也是管理存储设备的有效方法。有了虚拟存储器,用户无需考虑所编程序在主存中是否放得下或放在什么位置等问题。 虚拟存储器指的是主存—外存层次。它以透明的方式给用户提供了一个比实际主存空间大得多的程序地址空间。此时程序的逻辑地址称为虚拟地址(虚地址),程序的逻辑地址空间称为虚拟地址空间。
物理地址(实地址)由CPU地址引脚送出,它是用于访问主存的地址。设CPU地址总线的宽度为n位,那么物理地址空间的大小用2n来表示。 虚拟地址是由编译程序生成的。工作在虚拟地址模式下的CPU理解这些虚拟地址,并将它们转换成物理地址。设虚拟地址字长为m位,则虚拟地址空间的大小可用2m采表示。但因虚拟存储器的内容要保存在磁盘上,故虚拟地址空间的大小实际上受到辅助存储器容量的限制。 从原理上看,主存—外存层次和cache—主存层次有很多相似之处,它们采用的地址变换及映射方法和替换策略,从原理上看是相同的,且都基于程序局部性原理。它们遵循的原则又是:
(1)把程序中最近常用的部分驻留在高速的存储器中。 (2)一旦这部分变得不常用了,把它们送回到低速的存储器中。 (3)这种换入换出是由硬件或操作系统完成的,对用户是透明的。 (4)力图使存储系统的性能接近高速存储器,价格接近低速存储器。 然而,两种存储系统中的设备性能有所不同,管理方案的实施细节也有差异,所以虚拟存储系统中不能直接照搬cache中的技术。两种存储系统的主要区别在于:主存的存取时间是cache存取时间的5~10倍,而磁盘的存取时间是主存存取时间的上千倍,因而未命中时系统的相对性能损失有很大的不同。具体说,在虚拟存储器中未命中的性能损失要远大于cache系统中未命中的损失。
2.主存与外存的信息传送单位 主存与外存层次的基本信息传送单位可采用几种不同的方案:段、页或段页。段是利用程序的模块化性质,按照程序的逻辑结构划分成的多个相对独立部分,例如,过程、子程序、数据表、阵列等。段作为独立的逻辑单位可以被其他程序段调用,这样就形成段间连接,产生规模较大的程序。因此,把段作为基本信息单位在主存与外存之间传送和定位是比较合理的。一般用段表来指明各段在主存中的位置。每段都有它的名称(用户名或数据结构名或段号)、段起点、段长等。段表本身也是主存储器的一个可再定位段。把主存按段分配的存储管理方式称为段式管理。
段式管理系统优点是段的分界与程序的自然分界相对应;段的逻辑独立性使它易于编译、管理、修改和保护,也便于多道程序共享;某些类型的段(堆栈、队列)具有动态可变长度,允许自由调度以便有效利用主存空间。但是,正因为段的长度各不相同,段的起点和终点不定,给主存空间分配带来麻烦,而且容易在段间留下许多空余的零碎存储空间不好利用,造成浪费。 页式管理系统的基本信息传送单位是定长的页。主存的物理空间被划分为等长的固定区域,称为页面。页面的起点和终点地址是固定的,给造页表带来了方便。新页调入主存也很容易掌握,只要有空白页面就可容纳。唯一可能造成浪费的是程序最后一页的零头的页内空间,它比段式管理系统的段外空间浪费要小得多。页式管理系统的缺点正好和段式管理系统相反,由于页不是逻辑上独立的实体,所以处理、保护和共享都不及段式来得方便。
段式存储管理和页式存储管理各有其优缺点,可以采用分段和分页结合的段页式管理系统。程序按模块分段,段内再分页,进入主存仍以页为基本信息传送单位,用段表和页表(每段一个页表)进行两级定位管理。 4.5.2 页式虚拟存储器 在页式虚拟存储系统中,把虚拟空间分成页,称为逻辑页;主存空间也分成同样大小的页,称为物理页。假设逻辑页号为0,1,2,…,m,物理页号为0,1,…,n,显然有m>n。由于页的大小都取2的整数幂个字,所以,页的起点都落在低位字段为零的地址上。因此,虚存地址分为两个字段:高位字段为逻辑页号,低位字段为页内行地址。实存地址也分两个字段:高位字段为物理页号,低位字段为页内行地址。由于两者的页面大小一样,所以页内行地址是相等的。虚拟地址到主存实地址的变换是由放在主存的页表来实现。在页表中,对应每一个虚存逻辑页号有一个表目,表目内容至少要包含该逻辑页所在的主存页面地址(物理页号),
用它作为实(主)存地址的高字段,与虚存地址的页内行地址字段相拼接,就产生了完整的实主存地址,据此来访问主存。页式管理的地址变换如图
通常,在页表的表项中还包括装入位(有效位)、修改位、替换控制位及其他保护位等组成的控制字段。如装入位为“1”,表示该逻辑页已从外存调入主存;如装入位为“0”则表示对应的逻辑页尚未调入主存。如访问该页就要产生页面失效中断,启动输入输出子系统,根据页表项目中查得的外存地址,由磁盘等外存中读出新的页到主存中来。修改位指出主存页面中的内容是否被修改过,替换时是否要写回主存,替换控制位指出需替换的页等。假设页表已保存或已调入主存储器中,那么,在访问存储器时,首先要查页表,即使页面命中,也得先访问一次主存去查页表,再访问主存才能取出数据,这就相当于主存速度降低了一倍。如果页面失效,还要进行页面替换、页面修改,访问主存的次数就更多了。因此,把页表的最活跃部分存放在高速存储器中组成快表,这是减少时间开销的一种方法。
4.5.3 段式虚拟存储器 在段式虚拟存储系统中,段是按照程序的逻辑结构划分的,各个段的长度因程序而异。虚拟地址由段号和段内地址组成,如图为了把虚拟地址变换成实主存地址,
需要一个段表。其格式如图的上半部分所示。装入位为“1”表示该段已调入主存,为“0”则表示该段不在主存中;段的长度可大可小,所以,段表中需要有长度指示。在访问某段时,如果段内地址值超过段的长度,则发生地址越界中断。段表也是一个段,可以存在外存中,需要时再调入主存。但一般是驻留在主存中。图4-24的下半部分表示了虚存地址向实存地址的变换过程。
4.5.4 段页式虚拟存储器 段页式虚拟存储器是段式虚拟存储器和页式虚拟存储器的结合。在这种方式中,把程序按逻辑单位分段以后,再把每段分成固定大小的页。程序对主存的调入调出是按页面进行的,但它又可以按段实现共享和保护。因此,它可以兼备页式和段式系统的优点。其缺点是在地址映象过程中需要多次查表。在段页式虚拟存储系统中,每道程序是通过一个段表和一组页表来进行定位的。段表中的每个表目对应一个段,每个表目有一个指向该段的页表起始地址(页号)及该段的控制保护信息。由页表指明该段各页在主存中的位置以及是否已装入、已修改等状态信息。计算机中一般都采用这种段页式存储管理方式。如果有多个用户在机器上运行,即称为多道程序,多道程序的每一道(每个用户)需要一个基号(用户标志号),可由它指明该道程序的段表起始地址(存放在基址寄存器中)。
这样,虚拟地址应包括基号、段号、页号、页内地址。格式如下:每道程序可由若干段组成,而每段又由若干页组成,由段表指明该段页表的起始地址,由页表指明该段各页在主存中的位置以及是否已装入等控制信息。
基 号 段 号 页 号 页内地址 可以看出,段页式虚拟存储系统由虚拟地址向实主存地址的变换至少需查两次表(段表与页表)。段、页表构成表层次。当然,表层次不只段页式有,页表也会有,这是因为整个页表是连续存储的。当一个页表的大小超过一个页面的大小时,页表就可能分成几个页,分存于几个不连续的主存页面中,然后,将这些页表的起始地址又放人一个新页表中。这样,就形成了二级页表层次。一个大的程序可能需要多级页表层次。对于多级表层次,在程序运行时,除了第一级页表需驻留在主存之外,整个页表中只需有一部分是在主存中,大部分可存于外存,需要时再由第一级页表调入,从而可减少每道程序占用的主存空间。
4.6 存储保护 多个用户共享主存时,就有多个用户程序和系统软件存于主存中。为使系统能正常工作,应防止由于一个用户程序出错而破坏其他用户的程序和系统软件,还要防止一个用户程序不合法地访问不是分配给它的主存区域。因此系统应提供存储保护。通常采用的方法是:存储区域保护和访问方式保护。 4.6.1 存储区域保护 对于不是虚拟存储器的主存系统可采用界限寄存器方式。由系统软件经特权指令设置上、下界寄存器,为每个程序划定存储区域,禁止越界访问。由于用户程序不能改变上、下界的值,所以它如果出现错误,也只能破坏该用户自身的程序,侵犯不到别的用户程序及系统软件。界限寄存器方式只适用于每个用户占用一个或几个连续的主存区域,在虚拟存储系统中,由于一个用户程序的各页离散地分布于主存中,通常采用页表保护、段表保护和键式保护等方法。
1.页表保护和段表保护 每个程序都有自己的页表和段表,段表和页表本身都有自己的保护功能。每个程序的虚页号是固定的,经过虚地址向实地址变换后的实存页号也就固定了。那么不论虚地址如何出错,也只能影响到相对的几个主存页面。假设一个程序有三个虚页号分别为0,1,2,分配给它对应的实页号分别为7,4,5,如果虚页号错定为“4”,它必然在页表中找不到,也就访问不了主存,不会侵犯其他程序空间。段表和页表的保护功能相同,但段表中除包括段表起点外,还包括段长。段长通常由该段所包含的页数表示,如下图所示。
当进行地址变换时,将段表中的段长和虚地址中的页号相比较,若出现页号大于段长时,说明此页号为非法地址,则可发出越界中断。否则为正确页号,继续进行地址变换,访问内存。这种段表、页表保护是在未形成主存地址前的保护。但若在地址变换过程中出现错误,形成了错误主存地址,那么这种保护是无效的。因此,还需要其他保护方式。键方式就是一种成功的方式
2.键保护方式 键保护方式的基本思想是为主存的每一页配一个键,称为存储键,它相当于一把“锁”。它是由操作系统赋予的。每个用户的实存页面的键都相同。为了打开这个锁,必须有钥匙,称为访问键。访问键赋予每道程序,并保存在该道程序的状态寄存器中。当数据要写入主存的某一页时,访问键要与存储键相比较。若两键相符,则允许访问该页,否则拒绝访问。 如下图所示,设主存按2K字节分块,每块有一个四位的存储健寄存器,能表示16个已调入主存的活跃的页面。图中主存内共有五个页面A,B,C,D,E,存储键分别为5,0,7,5,7。操作系统的访问键为0,允许它访问这五个页面中的任何一页。如果用户程序的访问键为7,则允许它将数据写入C,E页面中,任何写入其他页的企图,都会因访问键和存储键不符而引起中断。这种保护方式提供了存数保护。
另外还有取数保护,其方法就是为每个页面设置一个一位的取数键寄存器。如果取数键寄存器为0,则存储器中该页只受存数保护,如果取数键寄存器为l,则指出该页也同样受取数保护。例如,图中5个页面的取键数分别为1,1,0,1,0,其中A,B,D三页不仅受存数保护,也受取数保护,只有访问键和取数键相符的用户才能存取这些页。
3.环保护方式 上面保护方式都是保护别的程序区域不受破坏,而正在运行的程序本身则受不到保护。环保护方式则可以做到对正在执行的程序本身的核心部分或关键部分进行保护。如下图所示,环保护方式是按系统程序和用户程序的重要性及对整个系统的正常运行的影响程度进行分层,每一层叫做一个环。环号大小表示保护的级别,环号越大,等级越低。例如虚拟存储空间分成8段,每段512M字节,构成8层嵌入式结构,每层设一个保护环,保护环的环号和段的编号相同。并规定0~3段用于操作系统,4~7段用于用户程序,每个用户最多可用4段。现行程序运行前,先由操作系统定好程序各页的环号,并置入页表中。然后把该道程序的开始环号送入CPU的现行环号寄存器,并把操作系统为其规定的上限环号也置入相应寄存器。如果某个程序需要跨层访问,它可以访问任何外层(环号大于现行环号)空间;
如果企图向内层(环号小于现行环号)空间访问,则需由操作系统的环控例行程序判断这个向内访问是否合法。如果合法才允许访问,否则按出错进入保护处理。但肯定现行程序不能访问低于上限环号的存储区域。当允许现行程序访问其他层时,相应地要改变现行环号寄存器的内容。
4.6.2 访问方式保护 主存信息的使用可以有三种方式:读(R)、写(W)和执行(E),“执行”是指作为指令来使用。相应的访问方式保护就有R,W,E三种方式形成的逻辑组合,如下: R∨W∨E 不允许任何访问; R∨W∨E 可进行任何形式的访问; R∧W∨E 只能读访问; (R∨W)∧E 只能读、写,不可执行; (R∨W) ∧E 只能执行,不可读,写; (R∨E) ∧W 只能写访问; (R∨E)∧ W 不准写访问; 这些访问方式保护通常作为程序状态寄存器的保护位,并且和上述区域保护结合起来实现。比如在界限寄存器中加一位访问方式位;键方式的取数保护键;环式保护和页式保护通常将访问方式位放在页表和段表中,
使得同一环内或同一段内的各页可以有不同的访问方式,从而增强保护的灵活性。 4.6 本章小结 存储器的要求是容量大、速度快、成本低。为了解决了这三方面的矛盾,计算机采用多级存储体系结构,即cache、主存和外存。CPU能直接方问内存(cache、主存),但不能直接访问外存。存储器的技术指标有存储容量、存取时间、存储周期、存储器带宽。广泛使用的SRAM和DRAM都是半导体随机读写存储器,前者速度比后者快,但集成度不如后者高。
二者的优点是体积小,可靠性高,价格低廉,缺点是断电后不能保存信息。 只读存储器和闪存储器正好弥补了SRAM和DRAM的缺点,即使断电也仍然保存原先写入的数据。特别是闪速存储器能提供高性能、低功耗、高可靠性以及瞬时启动能力,因而有可能使现有的存储器体系结构发生重大变化。 相联存储器不是按地址而是按内容访问的存储器,在cache中用来存放行地址表,在虚拟存储器中用来存放段表、页表和快表。在这两种应用中,都需要快速查找。 cache是一种高速缓冲存储器,是为了解决CPU和主存之间速度不匹配而采用的一项重要的硬件技术,并且发展为多级cache体系,指令cache与数据cache分设体系。要求cache的命中率接近于1。主存与cache的地址映射有全相联、直接、组相联三种方式。
其中组相联方式是前二者的折衷方案,适度地兼顾了二者的优点又尽量避免其缺点,从 灵活性、命中率、硬件投资来说较为理想,因而得到了普遍采用。 虚拟存储器指的是主存—外存层次,它给用户提供了一个比实际主存空间大得多的虚拟地址空间。因此虚拟存储器只是一个容量非常大的存储器的逻辑模型,不是任何实际的物理存储器。按照主存—外存层次的信息传送单位不同,虚拟存储器有页式、段式、段页式三类。
习题 4.1 用16k×8位的DRAM芯片构成64K×32位的存储器: (1)画出该存储器的组成逻辑框图 (2)存储器读写周期为0.5μs,cpu在1μs内至少要访问一次,采用哪种刷新方式?两次刷新方式的最大时间间隔是多少? 4.2 设有一个具有20位的地址和32位字长的存储器,求 (1) 该存储器能存储多少个字节的信息? (2) 若存储器由512k×8位SRAM芯片组成,需要多少片? (3) 需要多少位地址作芯片选择? 4.3 主存容量为4MB,虚拟容量为1GB,则虚拟地址和物理地址各为多少位?如页面大小为4KB,页表长度是多少?