文章目录
- 存储系统概述
-
- 存储器的分类
- 存储器的层次结构
- 主存储器
-
- 概述
- 主存储器性能指标
- 主存储器的工作原理
- 半导体存储芯片
- 随机读写存储器
-
- 静态 MOS 存储器(SRAM)
- 动态 MOS 存储器(DRAM)
- DRAM 的刷新
- 只读存储器
- 主存储器与 CPU 的连接
-
- 介绍存储芯片
- 扩展存储容量
- 主存储器与 CPU 的连接
- 高速存储器
-
- 双端口存储器
- 多体交叉存储器
- 相联存储器
- 高性能存储芯片
- 高速缓冲存储器 Cache
-
- Cache 的基本原理
- 主存与 Cache 地址映射
- 替换算法
- 写策略
- Cache 多层次设计
- 外存储器
-
- 磁盘存储器
-
- 硬磁盘
- 软磁盘
- RAID(磁盘冗余阵列)
- 磁带存储器
- 光盘存储器
- 存储保护
-
- 保护存储区域
- 保护访问模式
存储系统概述
用于存储程序和数据的计算系统记忆设备。
存储器的分类
-
存储介质(可存储0) 12个代码,可以区分两个状态的组件)分类 :在金属或塑料基体表面涂一层磁性材料作为记录介质,磁层随载体高速运行,用磁头读写磁层。信息记录在磁层上,信息的轨迹是磁道。鼓、磁带、磁盘。非易失存储器。
磁芯存储器:磁芯是由硬磁材料制成的环状元件。磁芯中有驱动线和读出线,用于读写操作。非易失存储器体积大,工艺复杂,功耗大,几乎不用。
:芯片采用超大型集成电路工艺制成。体积小,功耗低,访问时间短。断电信息丢失,已开发出非挥发性材料制成的半导体存储器,非易失性。根据其材料的不同,分为前者速度快,后者集成度高,制造简单,成本低,功耗低。
光存储器 :非易失性存储器应用激光读写记录介质(磁光材料)。纸带存储器 -
按存取方式分类
随机读写存储器 (random access memory, 即 RAM):存储单元可以读写,每个存储单元可以根据地址随时访问。访问所需的时间基本固定,与存储单元地址无关。易失性存储器。静态RAM ,动态RAM 。主存储器在计算机系统中使用随机存储器。只读存储器 (Read-only Memory, ROM):内容只能读出不能写入的存储器, 即预先一次性写入的存储器。与随机存储器可共同作为主存的一部分,统一构成主存的地址域。只读存储器断电后仍能保存信息。掩膜式只读存储器 ( Mask read-only memory, 即MROM ),制作芯片时,其内容已提前写入,通常是固定程序、汉字型库、字符、图形符号等;可编程只读取存储器 (programmable ROM,即PROM ),用户只能使用这种存储芯片写一次 。只读存储器可以擦除可编程序 (erasable PROM, 即EPROM ),用户可以在写入该存储芯片后使用紫外线擦除 重新写入新内容。只读存储器 (electricallyEPROM , 即E2PROM ),功能与 EPROM 同样,区别在于 E2PROM 是用电擦除 的。闪存 (Flash memory)是在 EPROM 和 E2PROM 它的基本存储单元结构类似 EPROM,但是它的擦除方式和 E2PROM 一样,用电擦除 。相联存储器 (Content Addressesd Memory ,即 CAM),通过它的部分访问一个词内容 而不是检索地址。顺序存储器 (串行访问存储器)(SAS),该存储器只能按某种顺序存取,存取时间与存储单元的物理位置有关 ,如磁带等。 (磁盘属于部分串行访问的存储器)直接访问存储器 (DAS):这种存储器访问时间与信息所在的物理位置有关 ,它寻址时,首先根据地址编码的部分信息找到信息的范围,然后在此范围内进行顺序检索 , 从而找到目标信息。如磁盘、磁鼓存储器。尽管寻址缓慢,但它的容量很大,可以长期保存信息。 但价格较低,适用于辅助存储器。 -
根据信息的可保存性进行分类 断电后可以保存信息的存储器称为
永久记忆的存储器 ;反之,称为非永久记忆存储器 。 -
按计算机系统中的作用分类
寄存器 :通常制作于CPU芯片内,CPU有十几个,几十个寄存器,速度最快,价格最高,容量最小。主存储器 :可以与CPU直接交换信息。存储要操作的程序和数据。辅助存储器 :主存储的支持存储器,存储目前暂时不使用的程序和数据,不能与CPU直接交换信息。容量大,速度慢,每个价格低。高速缓冲存储器 Cache :在两个不同速度的存储器之间使用,起到缓冲作用。
存储器的层次结构
-
寄存器 :容量小,访问时间是几个纳秒,可以满足 CPU的要求。高速缓存 Cache :容量可以是几 MB,它的访问时间是寄存器的几倍。主存 :在各种不同类型的存储器中,主存储器是最重要的部分。如果任何程序要在计算机中执行,则必须首先将其转移到主存储器中 CPU 执行。主存容量一般在几十到几千之间。 MB 它的访问时间是几十个纳秒。辅存 :CPU辅存不能直接访问,辅存只能与主存交换信息。用于存储暂时未使用的程序和数据文件。容量大,成本最低,速度慢。 -
缓存和主存的层次 :主要解决 CPU与主存速度不匹配的问题。有两种方法可以提高存储器的速度性能:提高主存储器的速度 ,其技术是将主存储分为多个模块,采用多模块交叉存储技术,实现多个模块的并行访问,从而达到改进的目的。CPU 高速缓冲存储器与主存之间增加 ,缓存容量小,速度快,可以将主存中需要使用的指令和数据其中,使 CPU 可直接与高速缓存交换信息。由于速度要求高, 所以对 CPU控制和管理高速缓存之间的信息交换硬件 来实现。速度接近缓存 ,高于主存,容量和价格接近主存 。 -
主存和辅存的层次 :主要解决存储系统的容量问题。虚拟存储技术用于主存和辅存层次量的辅助存储器依托,把当前要用到的或经常要用到的部分信息存放在主存中,而把其他尚未用到或不常用到的信息存放在辅助存储器中,当 CPU需要用到这些信息时,再将他们从辅存中调入主存,供 CPU访问。速度接近于主存 ,容量,价格接近于辅存 。虚拟存储器的这种调度工作是通过软硬件结合 的方法把主存和辅存统一成一个整体,构成主存-辅存层次。主存和辅存之间的数据调动是由硬件和OS共同完成的。 -
存储系统的工作原理是:CPU 首先访问 Cache,如果 Cache 中没有所需要的内容,则存储系统通过辅助硬件到主存中去找;如果主存没有 CPU 要访问的内容,则存储系统通过辅助硬件或软件,到辅存中去找;然后把找到的数据逐级调入相应的存储器。
主存储器
概述
-
根据某个MAR中的地址访问某个存储单元时,需要经过地址译码,驱动电路才能找到所需访问的单元。读出时,需要经过读出放大器,才能将被选中的单元的存储字送到MDR。写入时,MDR中的数据必须经过写入电路才能真正的写入到被选中的单元中。
-
主存中存储单元地址的分配
按字寻址 或按字节寻址 。
主存储器性能指标
-
存储容量 存储器由许多可存放一位二进制信息的存储位元组成,若干个这样的存储位元组成一个存储单元,可以通过地址来存取相应的存储单元。
相邻存储单元的地址是连续的 。存储器中所有存储单元的位数都是相同的。存储单元最重要特性就是它是最小的可编址单元 。通常把8 个二进制位称为一个字节 ,若干个字节再组合成字 ,一个字所包括的二进制位数称为字长。大多数计算机的指令对字操作,而存储器按字节编址。存储容量是指存储器所能容纳的二进制信息总量。通常存储容量用存储单元数与每个单元的位数(即存储位元个数)的乘积表示,或用字节数表示。即:存储容量=存储字数(存储单元数)×字长 。常用的计量存储器空间的单位是 K、M和 G。存储器地址码的位数决定了主存的可直接寻址的最大空间。 -
存储器的速度 存取时间:取数时间是存储器接到读命令信号到其数据输出端有信号输出为止的时间,它取决于存储介质和访问机构的类型。写入时间是从存储器接到有效地址开始,到数据写入被选中单元为止所需的全部时间。
存储周期:存储器进行一次
完整的读写操作 所需要的全部时间,也就是,连续两次访问存储器所需的最小时间间隔。显然
存储周期>存取时间 ,因为任何存储器由于读放、驱动源和存储体的连线都必须有一段稳定恢复时间,读出后不能立即进行访问。CPU 要根据取数时间确定启动一个访存请求后,必须等待多长时间才能取数据。存储器带宽:是
单位时间可写入存储器或从存储器取出信息的最大数量 。存储器带宽的计量单位通常是位/秒 或字节/秒 。存储器带宽是衡量数据传输速率的重要技术指标。提高存储器带宽的措施:
缩短存取周期。增加存储字长,使每个存取周期可读写更多的二进制位数。增加存储体 。 -
存储器的价格 存储器的价格常用
每位的价格 (位价)来衡量。它不仅包含了存储元件的价格,还包括为该存储器操作服务的外围电路的价格。简单系统中逻辑门的延迟较小,所以系统的复杂性越小,能够达到的工作速度就越高。尺寸小的系统中的信号在线路上的传输延迟较小,所以系统的尺寸越小,能够达到的工作速率越高。 -
存储器的可靠性
-
访问方式
-
信息存储的永久性
主存储器的工作原理
CPU 与存储器通过总线连接
-
在“读”存储器时,CPU 通过地址总线和控制总线分别给出所需字的存储器地址和访存“读”控制信号,然后等待存储器将读出的字送到数据总线上,并通知 CPU“读”操作完成,CPU 从数据总线上读取这个字,结束“读”存储器的工作。
-
在“写”存储器时,CPU 通过地址总线和数据总线分别给出欲写字的存储器地址和字的内容,CPU 还通过控制总线给出访存“写”控制信号,然后等待,存储器将数据总线上送来的字写入指定地址的存储单元,并通知 CPU“写”操作完成,CPU结束“写”存储器的工作。
-
计算机中的任何操作都是按照时间节拍有序进行的,由于各器件的操作都存在延时,为保证读/写的可靠性,应当在存储器的地址输入端和数据端分别安排一个寄存器,用来存放地址信号和数据信号,这两个寄存器分别称为存储器地址寄存器(MAR)和存储器缓冲寄存器(MBR) 或存储器数据寄存器(MDR)。
半导体存储芯片
-
采用超大规模集成电路工艺,在一个芯片内集成具有记忆功能的存储矩阵,译码驱动电路和读写电路。译码驱动能把地址线送来的地址信号翻译成对应存储单元的选择信号,该信号在读写电路的配合下完成对被选中单元的读写操作。读写电路包括读出放大器和写入电路,用来完成读写操作。
存储芯片通过地址总线、数据总线和控制总线与外部连接。地址线是单向输入的,其位数与芯片容量有关。数据线是双向的(可用成对出现的数据线分别作为输入或输出),其位数与芯片可读出或写入的数据位数有关。地址线和数据线的位数共同决定了芯片的容量。控制线主要有读写控制线(决定芯片进行读写操作)与片选线(选择存储芯片)两种。不同存储芯片的读写控制线和片选线可以不同。
-
半导体芯片的译码驱动方式 线选法:用一根字选择线(字线)直接选中一个存储单元的各位。结构简单,适用于容量不大的存储芯片。
重合法:被选单元由X,Y两个方向的地址决定,选择存储单元中的一位。
随机读写存储器
随机读写存储器一般为半导体读写存储器。双极型的存储速度比 MOS 型的快,但 MOS 型的集成度高,故
静态 MOS 存储器(SRAM)
-
存储位元 存储位元是组成存储器的基础,每个存储位元能存储一位二进制信息“0”或者“1”。
T1-T6组成了一个 SRAM 的存储位元。T1、T2 是工作管,T3、T4 是负载管,T1~T4 组成两个反向器,它们交叉耦合,组成一个触发器,T5、T6、T7、T8是门控管。 当该存储位元未被选中时,X、Y 地址译码线为低电平,T5-T8 截止,触发器和两条位线隔开。若 T1 截止,A 点高电位,T2导通,B 点低电位,B 点的低电位又使 T1 更加截止,这是一个稳定状态,此时,存储位元存储的信息是“1”;反之,T2 截止,B 点高电位,T1 导通, A 点低电位,A 点的低电位又使 T2 更加截止,此时,存储位元存储的信息是“0”。
读操作时,X、Y 地址译码线上是高电位,选中该存储位元,T5-T8导通,A、B 两点分别与位线 D 与 D#相连,存储位元的信息被送到 I/O 和 I/O#线上。I/O 和 I/O#线接着一个差动放大器,从其电流方向,可以判断存储位元所存信息是“1”还是“0”。也可以只有一个输出端接到外部,看其有无电流通过,就可以判断所存信息是“1”还是“0”。
写操作时,X、Y 地址译码线上是高电位,选中该单元,T5-T8导通,A、B 两点分别与位线 D 与 D#相连。写“1”,则在 I/O 线上输入高电位,在 I/O#线上输入低电位,使 A 点变高电位,B 点变低电位,从而使 T1 截止 T2导通,存储位元中存入“1”;写“0”,则 在 I/O 线上输入低电位,在 I/O#线上输入高电位,使 A 点变低电位,B 点变高电位,从而使 T2 截止 T1 导通,存储位元中存入“0”。
只要不对 SRAM 断电,存放在里面的数据就一直保存着。SRAM 的速度很快,一般来说访问时间是几个纳秒,因此,SRAM 被广泛的用在第二级 Cache 中。
-
SRAM 存储器的组成 在静态存储器中,包括
存储体、读写电路、地址译码电路和控制电路等 部分,其中存储体是所有存储位元的集合;地址译码电路对访存时来自地址总线的内容译码,把用二进制代码表示的地址转换成输出端的高电位,驱动相应的读写电路,以便选择所要访问的存储单元。 -
地址译码方式有两种:线性译码方式和双向译码方式。
线性译码方式 每一行代表一个字,每一列对应于这个字的一个位。在这种方式中,地址译码器只有一个,译码器的输出叫字选线,字选线选择某个字(即某个存储单元)的所有位。线性译码方式适用于小容量的存储器 。双向译码方式 双向译码方式适用于二维译码矩阵, 它将存储器的地址分为 X 和 Y 两段,分别用水平和垂直两个译码器译码,每个译码器各自输出若干条选择线,每个基本的存储位元位于 X 和 Y 选择线的交点,当两条选择线都处于有效电位 时,该存储位元被选中。整个存储器由若干个这样的集成片组成一个立体结构,每一片的 X 地址和 Y 地址相同的位组成存储器的一个字,双向译码方式适用于大容量的存储器 。线性译码方式的优点是结构简单,缺点是所用的选择线太多,而双向译码方式就可以很好地解决这个问题。一个 n 位地址的存储器,如果按
照线性译码方式,那么共有 2n根选择线 ,若按照双向译码方式,则每个译码器只有 n/2 个地址输入,2n/2 个输出,于是整个存储器共有 2n/2+1 根选择线 。 -
SRAM 的读/写过程 读:在整个读周期中,读信号始终有效,先加上需要访问的地址,并在读/写端加上有效信号,等信号稳定后,再加上片选信号,经过一段时间延时,数据被读到输出端的缓冲寄存器中,至此方可撤去片选信号,然后再撤去地址和其他控制信号。TR 是读操作所需的最小周期,在此周期内,地址不能改变;TA 是取数时间,定义为从地址线上的信号稳定到数据能从存储器读出所需的最短时间,显然小于读周期;TCO定义为从片选信号 CS#有效到数据能被读出所需的最短时间。 写:先加上地址和读/写信号,同时数据信号也加到数据总线上,等信号稳定后,再加上片选信号,经过一段时间延时,数据被写入存储器相应单元中,至此方可撤去片选信号,然后在撤去地址和其他控制信号。
在有效数据出现前,RAM的数据线上存在着前一时刻的数据Dout,故在地址线发生变化后,CS#,R/W#需要
滞后 taw再有效,以避免将无效数据写入到RAM错误。但写允许失效后,地址必须保持一段时间,称为写恢复 时间。RAM数据线上的有效数据必须在CS#,R/W#失效前的tDW时刻出现,并延续一段时间,以保证数据可靠写入。TW是写操作所需的最小周期, TCW定义为片选信号 CS#必须有效的最短时间。 -
有些 RAM 的读/写过程与此不同:读操作先加上地址和片选信号(有的片选信号就是地址的一部分),再加读/写信号(读),经过一段时间延时,数据被读到输出端的缓冲寄存器中。写操作先加上地址和片选信号和数据信号,再加上读/写控制信号(写),经过一段时间延时,数据被写入存储器相应单元中。
计算机实际运行时,分配给读/写操作的周期应大于上述时间,以保证操作的正确执行。
动态 MOS 存储器(DRAM)
-
存储位元:当该存储位元未被选中时,字线为低电平,电容 C 上有电荷,则存储位元存储的信息是 “1”;反之,存储位元存储的信息是“0”。 读操作时,字线上是高电位,选中该存储位元,T 导通。存储在电容 C 上的电荷通过 T 输 出到数据线上,通过读出放大器电路输出。电容上有电荷表示原来存的是“1”,无电荷表示原来存的是“0”。
写操作时,字线上送高电位,T 管导通,写入信息由数据线存入电容 C。
由此可见,对 DRAM 存储位元的
读操作就是对电容 C 的放电过程,是破坏性的读 ,因此,有必要在读完以后再把原来的数据写回存储位元,这个过程称为“再生 ”。电容存在着漏电阻,因此电容中的电荷很快就会通过漏电阻放电而中和,为了长时间保存信息,就必须定时补充电荷,这就是所谓的 “刷新”。
其实
刷新 与再生 是一回事,都是将电容上的信息重写一遍,只不过再生是配合读操作进行的,而刷新是定期对存储矩阵进行扫描,扫至哪一个位元,就将该存储位元读/写一次,所以刷新与再生的执行过程都是先读后写。DRAM 集成度高、功耗低、成本低。现在的微型计算机中
大都采用 DRAM 作为主存 。除了单管结构外,还有三管、四管结构的 DRAM 存储位元, 其存储机理与单管结构的存储位元并无区别,只是读/写方式有些不同。总之,存储位元所用的 晶体管越多,占用硅片面积越大,但外围电路就相对简单写;反之,矩阵简单,外围电路就相对复杂。 -
DRAM 存储器的组成 逻辑上, 存储器组织成 4 个 2048×2048 的方阵,可以采用各种物理排列。 22 位的存储器地址被分为两组,每组都从这 11 根地址线输入,第一次选择高 11 位地址(行地址),第二次选择低 11 位地址(列地址),这种方法称为时分复用。在时分复用的情况下,行地址选通信号(RAS#)和列地址选通信号(CAS#)为芯片提供时序控制信号。
地址线的分时复用和方阵型行列结构,每增加一个专用的地址引脚,便使得行地址和列地址的指示范围加倍,因此存储器芯片的容量以 4 的倍数增长。 行译码器有 11 根地址输入线,输出 211=2048 根译码信号,每一根行译码输出信号可选择控制一行位元(共 2048 个,即连接到 2048 个位元的字线)。同样列译码器有 11 根地址输入线,列译码器输出 211=2048 根译码信号,每一根列译码信号连接控制某一列 2048 个电位元的数据的输入输出。只有被行、列译码信号同时选中的位元才被激活。由于存储器矩阵是由 4 个 2048×2048 模块组成,每个模块有一根数据线 i D 相连,4 个模块组成 4 位数据线。在每个模块中,行、列译码信号同时选中的位只可有一位,4 个模块则共有 4 位被选中,组成 4 位数据位。
在“写”存储器时,选中的位线根据相应的数据线值经放大器放大后写入位元中; “读” 存储器时,每一选中的位元值经读出放大器输出到数据线上。因为此 DRAM 只有 4 位位元参与读/写,因此,必须将多片 DRAM 连接到 DRAM 控制器上才能在总线上读写一个字。
刷新电路,每几个毫秒,DRAM 对所有存储位元刷新一次,防止数据丢失。
-
DRAM 的读/写过程 在读周期中,行地址选通信号 RAS#的下降沿时送行地址,列地址选通信号 CAS#的下降沿时送列地址,读/写控制信号 R/W#在列地址信号出现之前加入(R/W#=1),等到被行、列地址所选中单元的数据读出有效后,RAS#和 CAS#同时上升,此时将数据输出到 MDR。
写周期与此类似, 同样是在 RAS#的下降沿时送行地址,在 CAS#的下降沿时送列地址,在列地址信号出现之前加入读/写控制信号 R/W#(R/W#=0),但在 R/W#的上升沿将 MDR 中的数据写进指定的单元。写入数据应在CAS#有效前的一段时间出现,他的保持时间应为CAS#有效后的一段时间,这是因为数据的写入实际上是有CAS#的下降沿激发而成的。即WE,CAS#有效均要大于数据Din有效的时间。
DRAM 的刷新
-
所有的 DRAM 都需要刷新操作,刷新过程需要外部电路的支持,所以
DRAM 的外部接口比 SRAM 的复杂 。DRAM 采用“读出”方式进行刷新,从上一次刷新结束到下一次对整个 DRAM 全部刷新一遍为止,这一段时间间隔称为刷新周期 。 -
简单的刷新操作是,当刷新所有存储位元时,DRAM 芯片并不进行实际的读写操作,刷新计数器产生行地址,刷新计数器的值被当作行地址输出到行译码器,并且激活 RAS#线,从而使得相应行的所有位元被刷新。 另一种刷新操作是利用 CAS#信号比 RAS#信号提前动作来实现刷新。这是因为在 DRAM 器件内部具有刷新地址计数器,每个刷新周期这个地址计数器自动加 1,故不需要外加的刷新地址计数器。
-
通常, DRAM 允许的单元刷新间隔时间是 2ms,其刷新电路的工作方式一般有三种。
-
集中式刷新 指在一个刷新周期中,利用一段固定的时间,依次对 DRAM 的所有行逐一刷新 , 在刷新期间禁止读/写存储器,这段禁止读/写存储器的时间又称为访存“死区 ”。集中式刷新的缺点是在刷新期间,存储器处于禁止访问状态,“死区”时间过长,不利于系统并行设计。但是,集中式刷新的硬件电路简单、 设计处理容易。64K×1 位 DRAM 芯片中,存储电路由 4 个独立的 128×128 的存储矩阵组成。设存储器存储周期为 500ns,单元刷新间隔是 2ms。则每个刷新周期内可安排 4000 个周期,其中必须有 128 个周期用于刷新,其余 3872 个周期用于正常的访存操作。那么,访存“死区”时间为 128 ×500ns=64μ s,占整个刷新周期的 3.2%。
-
分散式刷新 在这种方式下,系统把对每一行的刷新分散到各个存储周期中 。每个存储周期被分为两个阶段,前一阶段内进行正常的访存操作,后一阶段刷新某一行,则存储周期增长了一倍 。分散刷新没有充分利用最大允许的刷新周期,延长了存储周期,缩短了刷新周期,从而降低 了计算机系统的运算速度。以 64K×1 位 DRAM 芯片为例,存储电路由 4 个独立 的 128×128 的存储矩阵组成。单元刷新间隔是 2ms,芯片存储周期仍为 500ns,那么存储器存储周期为 1μ s(=1000ns),刷新周期为 128μ s。在每个 2ms 内包含了 2000 个存储周期,存储矩阵中的每行在一个 2ms 内被刷新 10 次以上。
-
异步式刷新 异步刷新采取折中的办法,在 2ms 内分散地把各行刷新一遍 。这样就避免了分散式刷新中不必要的多次刷新,提高了整机速度。同时又解决了集中式刷新中“死区”时间过长的问题。以 64K×1 位 DRAM 芯片为例,存储电路由 4 个独立的 128×128 的存储矩阵组成。单元刷新间隔是 2ms,存储器存储周期是 500ns,则刷新信号的周期为 2ms/128=15.625μ s。刷新电路每隔 15.625μ s 产生一个刷新信号,刷新一行存储单元的内容。
-
在同样大小的芯片中,DRAM的集成度高与SRAM。DRAM行列地址按先后顺数输送,减少了芯片引脚,封装尺寸也减少。
DRAM的功耗比SRAM小 。DRAM比SRAM便宜。由于使用动态元件,DRAM的速度比SRAM慢。
只读存储器
-
只读存储器简称 ROM,它只能读出,不能写入,它的最大优点是具有
非易失性 ,即撤去电源,数据照样存在。目前大量使用的是半导体 ROM 集成存储芯片。 -
掩膜式只读存储器 (MROM) 掩膜式只读存储器中的内容是由生产过程中的一种掩膜工艺决定的,一旦生产完毕,信息就不能更改,以后只能读其内容而不能改写了。掩膜式只读存储器可靠性高,集成度高,价格便宜, 适合于程序成熟、批量生产的场合,用户可向厂家定做,生产批量一般都在 10 万片以上才较为合算。 -
可编程只读存储器 (PROM) 可编程只读存储器 PROM 的内容是由用户在使用前一次性写入的,此后就只能读其内容而不能改写了。熔丝式 PROM,其内部是许多熔丝组成的阵列,熔丝的接通表示存“1”, 断开表示存“0”。在 PROM 产品出厂时,每个存储位的熔丝均接通,用户一次性写入,即 PROM 的编程原理就是在芯片的特定管脚上加上高电平,使选定的熔丝被烧断。熔丝被烧断后就不能再接通了。除了熔丝式 PROM 外,还有 PN 结击穿型 PROM。 目前,PROM 已基本被淘汰。 -
可多次编程序的只读存储器 光擦除可编程只读存储器 (EPROM)芯片上有一个石英窗口 ,当紫外线照射该窗口达到 15 分钟时,EPROM 里的内容就被全部擦除了。电擦除可编程只读存储器 (E2PROM) 可以在电路板上用电直接擦除,不必从电路板上取下来,而且速度比 EPROM 快。E2PROM 改写的次数是有限的,一般为 10 万次。其读写操作可按每个位或字节进行 ,类似 SRAM,但每字节的写入周期要几毫秒,比 SRAM 长得多。这两类器件编程时都是用电和写入软件将新数据写入。
-
闪述存储器 (Flash Memory) 闪存是近年在EPROM和E2PROM基础上发展起来的另一种快速的非易失性存储器, 它既有 E2PROM 写入方便的优点,又有 EPROM 的高集成性。和 EPROM 一样的是它用单管存储一位信息,和 E2PROM 一样的是它采用电擦除方式,可以按块擦除和重写,且闪存的擦除也不需要从电路中拿下来。E2PROM 的擦除是逐点进行的,就是说在对每一点编程时先将该点擦除然后烧写 ; Flash 工艺的 ROM 则是一次性擦除 的,因此其编程速度比普通的 E2PROM 快。现在所用的各类常见主板和一部分显示适配器(显卡)都是采用 Flash ROM 作为 BIOS 芯片,现在的许多掌上计算机和移动电话中也大量采用了这种 Flash ROM 作为主存储器。
主存储器与 CPU 的连接
现代微型计算机(PC)的主存储器基本包括两个部分
- ROM,又叫非易失性存储器。其内部存放的是生产厂家烧写的固定指令和数据,这类指令和数据是对计算机进行初始化的低级操作和控制程序(即 BIOS 程序),使计算机能开机运行。在一般情况下 ROM 内的程序是固化的,不能改写,只能从中读出信息,但是现在的许多微型计算机中的 ROM 采用了快速的闪存(Flash Memory)来制造,从而可以用一些特殊的程序改写 ROM,对计算机 BIOS 进行升级。
- RAM。主存的绝大部分是由 RAM 构成的,因此 RAM 对主存的性能起着决定性的因素RAM 又被称为易失性存储器。CPU 现场操作的大部分二进制信息都是存放在 RAM 中的。
存储器芯片介绍
因其不同的工作原理,不同存储器芯片封装的引脚类型不同。 典型的 SRAM 芯片引脚,除工作电压 VCC和接地 GND 外,一般还有地址线、双向数据线和片选 CS#及输出使能 OE#。
DRAM 芯片容量普遍比 SRAM 芯片容量大得多,除与 SRAM 相同的芯片引脚外,DRAM 还有行地址选通信号 RAS#和列地址选通信号 CAS#引脚。
各种 ROM 芯片的引脚类型比较类似,不同的是,ROM 芯片除工作电源 VCC外,还有程序电压 VPP引脚,其数据线在一般情况下是单向读出的。
为了与主存储器连接, CPU芯片提供的相关引脚一般有:地址线、数据线、访存控制信号 MREQ#和 R/W#等信号。
存储容量的扩展
-
位扩展 位扩展的目的是增加同一个地址的存储单元的位数 。位扩展的操作是:将参加位扩展的存储芯片的 CS#、 WE#和地址线分别连在一起,不同存储芯片的数据端分别引出。其中一片的数据线作为高位, 另一片的数据线作为低位。 -
字扩展 字扩展指增加存储器中字的数量,即容量扩展 。字扩展的结果是两个 SRAM 芯片作为一个整体顺序编址,而存储器的字长与SRAM 芯片字长一样。字扩展的操作是:将参加字扩展的存储芯片的数据线、读写控制信号 WE#和地址线分别连在一起,由片选信号来区分各芯片的地址范围,从而选择对不同的存储芯片进行读写操作。 -
字位扩展 字位扩展指按字扩展的方法增加存储器字的数量,同时按位扩展的方法增加存储字长。一个存储器的容量假定为 M×N 位,若使用 t×k 位的芯片(t<M,k<N),则一共需要(M/t) ×( N/k) 个存储器芯片。
主存储器与 CPU 的连接
- 根据 CPU 芯片提供的地址线数目,确定 CPU 访存的地址范围,并写出相应的二进制地址码;
- 根据地址范围的容量,确定各种类型存储器芯片的数目和扩展方法;
- 分配 CPU 地址线。CPU芯片提供的地址线数目是一定的,且大于每一个存储芯片提供的地址线数量。对每一个存储芯片,
CPU地址线的低若干位直接连接存储芯片的地址线 ,这些地址线的数量刚好等于存储芯片提供的地址线数量。剩下的CPU高若干位地址线(对于不同存储芯片而言,其数量是不同的)皆参与形成存储芯片的片选信号 ; - CPU的数据线与存储芯片的数据线不一定相等,因此,必须对存储芯片扩位,使其数据位数与CPU的数据线数相等。
- CPU读写命令线一般可直接与存储芯片的读写控制端相连,通常高电平为读,低电平为写。有些CPU的读写命令线是分开的,此时CPU的读命令线应与存储芯片的允许读控制端相连,CPU的读命令线应与存储芯片的允许读控制端相连,CPU的写命令线应与存储芯片的允许写控制端相连。
- 片选线的连接是CPU与存储芯片正确工作的关键。存储器由许多存储芯片组成,那一片被选中完全按取决于该存储芯片的片选控制端CS#是否能够接受到来自CPU的片选有效信号。片选有效信号与CPU的访问控制信号MREQ#有关,因为只有当CPU要求访存时,才需要选择存储芯片。
高速存储器
- 提高存储器速度有以下几种有效途径:主存采用更高速的技术来缩短存储器的读出时间,或加长存储器的字长,使 CPU 一次可存取的数据宽度加长; 采用并行操作的多端口存储器; 在 CPU和主存之间加入一个高速缓冲存储器(Cache),以缩短读出时间; 在每个存储器周期中存取几个字。
双端口存储器
-
双端口存储器指同一个存储器具有两组相互独立的读写控制线路,允许两个独立的 CPU 或控制器同时异步地访问存储单元,是一种高速工作的存储器。
-
双端口 RAM 是一种常用的双端口存储器,其最大的特点是存储数据共享。 2K×16 位的 SRAM ,提供了两个相互独立的端口,即左端口和右端口。它们
分别具有各自的地址线、数据线和控制线,可以对存储器中任何位置上的数据进行独立的存取操作。 当左端口和右端口的地址不相同时,在两个端口上同时进行读写操作,不会发生冲突。当任一端口被选中驱动时,就可对整个存储器进行读写,每一个端口都有自己的片选控制信号和输出使能控制信号。若左、右端口同时访问相同的存储单元,则会发生读写冲突 ,忙信号 BUSY#的设置解决了此问题。这时,判断逻辑决定对哪个端口优先进行读写操作,而暂时关闭另一个被延迟的端口(通过置 BUSY#=0 来实现)。读写操作对 BUSY#=0 的端口无效,直到优先端口完成读写操作后, 被延迟端口的 BUSY#复位,被延迟端口才开放,允许进行读写操作。FIFO(
先进先出的存储器 )则是另一种常用的双端口存储器,其内部存储器均采用双端口 RAM,但是,FIFO 只允许两个端口一个写,一个读 ,因此 FIFO 是一种半共享式存储器。在双机系统中,只允许一个 CPU往 FIFO 写数据,另一个 CPU从 FIFO 读数据。
多体交叉存储器
- 多体交叉存储器可以在不改变每个存储体存取周期的情况下,
提高存储器的带宽 。 - 多体交叉结构的主存由 M 个一字宽的存储体(或称存储模块)组成,每个存储体有相同的容量和存取速度,又
有各自独立的地址寄存器、地址译码器、读写电路和驱动电路。 - 由于每个存储体都是一字宽,因而总线的宽度是一字宽,只要送到各存储体的 M 个地址不发生冲突(任何两个地址不同属于一个存储体),M 个存储体就可以同时读出 M 个字。CPU 同时访问 M 个存储体,由存储器控制部件控制它们
分时使用数据总线 进行信息传递。(同时读出,分时传送) - 多体交叉存储器的编址方法是这样的:CPU 给出的存储器地址的
低 x 位(2x=M),译码选择 M 个不同的存储体 ,剩下的高若干位则是存储字在存储体内的相对地址 。连续的存储器字地址分布在相邻的不同存储体内,同一个存储体内的地址都是不连续的 。 - 每个存储体的字长都等于数据总线宽度,存储体存取一个字的存储周期为 T,总线传送周期为 τ,存储器的交叉存储体数为 M,为了实现流水线方式存取,应当满足
T=Mτ ,T/τ 称为交叉存取度,当交叉存储体数大于或等于 T/τ 时,可以保证启动某模块后经 Mτ 时间再次启动该模块时,它的上次存取操作已经完成 。这样,连续读取 M 个字所需的时间为 t=T+(M-1)τ ,相比在同一个存储体内连续读取 M 个字所需的时间来说,采用多体交叉存储器的组织方式大大提高了存储器的带宽。对每个存储体而言,存取周期没有缩短。宏观上,在一个存取周期内,存储器向 CPU提供了 4 个存储字。 - 排队器:为了防止两个以上的请求源同时请求访问同一个存储体,并防止将代码错送到另一个请求源等各种错误的发生,在控存内设置一个排队器来确定请求源的优先级别:对已发生代码丢失的请求源应列为最高优先级,对严重影响CPU工作的请求源给予次高优先级。
- 控存标记触发器用来接受排队器的输出信号,一旦相应某请求源的请求,其被置为1,以便启动节拍发生器工作。
- 节拍发生器产生固定节拍,与机器主脉冲同步,使控制线路按一定时序发出信号。
- 控制线路将排队器给出的信号与节拍发生器提供的节拍信号配合,向存储器各部件发出各种控制信号,实现对总线的控制及完成存储器的读写操作,并向请求源发出回答信号,表示存储器已经响应请求。
相联存储器
-
相联存储器是一种随机存取类的存储器。在相联存储器中,一个字是通过它的
部分内容而不是它的地址进行检索的 。相联存储器的检索是对一个字中某些指定位进行检查比较 ,看是否与特定的样式相匹配,若匹配,则检索成功,否则检索不成功。这种比较能在所有字中同时进行,这使得相联存储器如同普通的随机存储器一样,检索时间是固定的,不依赖于存储位置或前面的存取样式 。 -
如果按顺序查找,在按地址访问的存储器中寻访一个字的平均操作是 m/2 次(m 是存储器的字数总和),而在相联存储器中仅需要一次检索操作,因此大大提高了处理速度。 -
相联存储器主要用于虚拟存储器中存放段表、页表和快表,在高速缓存中存放 Cache 行地址,以及在数据库与知识库中按关键字检索。
-
存储器采用高速半导体存储器组成。检索寄存器用来存放检索字,检索寄存器的位数和相联存储器的存储字的位数相等,每次检索时,取检索寄存器中若干位为检索项。屏蔽寄存器用来存放屏蔽码,屏蔽一些不用选择查找的字段,屏蔽寄存器的位数和检索寄存器的位数相同。符合寄存器用来存放查询比较的结果,其位数等于相联存储器的地址数,每一位对应一个存储字,位的序数就是相联存储器的地址。比较电路用于将检索项 、和存储器中所有单元内容的相应位进行比较,如果符合就将符合寄存器的相应位置“1”,否则置“0”。代码寄存器用来存放存储体中读出的代码,或存放向存储体中写入的代码。
相联存储器通过关键字寻访存储器,所谓关键字就是用于寻址存储器的字段,于是,存放在存储器中的字可以看成具有下列格式: KEY DATA ,其中,KEY 是关键字,DATA 是被读写的信息。
高性能的存储芯片
SDRAM (同步DRAM)能在系统时钟的控制下进行数据的读出和写入,CPU给出的地址和控制信号会被SDRAM锁存,直到指定的时钟周期数后再响应。此时CPU可以执行其他任务而无需等待。支持猝发式访问模式 ,即CPU发出一个地址就可以连续访问一个数据块。RDRAM (RambusDRAM)采用专门的DRAM和高性能的芯片接口取代现有的存储器接口。主要解决存储器带宽的问题,通过高速总线获得存储器请求(包括地址,操作类型和字节数),总线最多可寻址320块RDRAM芯片,传输速率可达1.6GBps。不像传统的DRAM采用RAS#,CAS#和WE#信号来控制,而是采用异步的,面向块的传输协议传送地址信息和数据信息。一个RDRAM芯片就像一个存储系统,通过一种新的互连电路将各个芯片连接成一个环,数据通信在主存控制器的控制下进行,数据交换以包为单位。带cache的DRAM (CDRAM),又称为增强型的DRAM(EDRAM)。首先在行选通信号的作用下,将高位地址经地址线输入,分别保存在行地址锁存器 中和最后读出行地址锁存器中,由此指定的全部数据被读到SRAM中暂存,然后在列选通信号的作用下,将列地址输入,保存到地址锁存器中。在读命令有效时,读出数据。下次读数据时输入的行地址立即与最后读出行锁存器的内容比较,相同则说明数据在SRAM中,在输入列地址,读出数据,否则驱动DRAM阵列更新SRAM,再读数据。
高速缓冲存储器 Cache
-
程序局部性原理认为,在一个较短的时间间隔内,程序访问的地址往往集中在一个不大的范围内。
时间局部性 说的是,若某个地址被访问,则在不久的将来仍有可能被访问。空间局部性 说的是若某个地址被访问,则这个地址周围的单元也很可能被访问。 -
所以根据程序局部性原理,把 Cache 介于 CPU 和主存之间,Cache中存储频繁使用的指令和数据。这样,访存操作的平均速度就提高了。
Cache 不是主存容量的扩充,它保存的内容是主存中某些单元的副本。
Cache 的基本原理
-
CPU 与 Cache 之间的数据交换以字为单位,而 Cache 与主存之间的数据交换以字块为单位。一个块由若干字组成,是定长的,在 Cache 中数据块大小称为行,在主存中数据块大小称为块,行与块是等长的。
-
Cache 除了包含存储体外,还包含控制逻辑。若 Cache 在 CPU 芯片外,它的控制逻辑一般与主存控制逻辑合在一起,称为主存/Cache 控制器;若 Cache 在 CPU内,则由 CPU提供它的控制逻辑。Cache 及其控制逻辑完全由硬件实现。
-
分配给 Cache 的地址存放在一个
相联存储器 中,当 CPU提供字地址时,相联存储器按内容进行查找,从而判定 Cache 是否“命中”。此外,从结构上讲, Cache 还应该包含标记、行数据有效位、替换位等部分,这些内容在不同计算机系统中不尽相同, 其设计与具体的 Cache 案例有关。 -
计算机系统中有了 Cache 以后, CPU访存读一个字时,首先 Cache 控制逻辑根据地址判断这个字是否在 Cache 中,若在,就立即送给 CPU,称为 Cache “读命中”;否则,称为 Cache “读不命中”,通常有两种方法解决 Cache 的“读不命中”情况:其一,将主存中该字所在的数据块复制到 Cache 中,然后再把这个字传送给 CPU;其二,启动常规的主存读周期,把此字从主存读出送到 CPU,与此同时,把包含这个字的数据块从主存中读出送到 Cache 中。两种方法中,都有可能发生 Cache 中行数据的替换,即当 Cache 已没有空闲的位置容纳即将装入的新行时,只能按照某种替换算法选择某一旧行被新行替换掉。
-
Cache 的命中率 在所有的存储器访问中由 Cache 满足 CPU需要的部分应占很高的比例, 即 Cache 的命中率应接近于 1。在一个程序执行期间,设 Nc表示 Cache 完成存取的总次数, Nm表示主存完成存取的总次数, h 定义为命中率,
命中率指 CPU访问主存数据时,命中 Cache 的次数占全部访问次数的比率 ; 反之,失效率就指 CPU访问主存数据时,不命中 Cache 的次数,占全部访问次数的比率。命中率h=Nc/(Nc+Nm)*100%。若 tc表示命中时 Cache 的访问时间,tm表示 Cache 不命中时主存的访问时间,则 Cache/主存系统的平均访问时间ta为: ta=h·tc+(1-h)tm或ta=h·tc+(1-h)(tm+tc)。我们追求的目标是,以较小的硬件代价使 Cache/主存系统的平均访问时间 ta越接近 tc越好。 设 r=tm/tc表示主存慢于 Cache 的倍率,e 表示访问效率,则有: e=tc/ta=tc/(h·tc+(1-h)tm)=1/(h+(1-h)r)=1/(r+(1-r)h)。由上述公式看出,为提高访问效率,命中率 h 越接近 1 越好,r 值以 5—10 为宜,不宜太大。
命中率 h 与程序的行为、Cache 的容量、组织方式、块的大小有关。 -
一般而言,cache容量越大,其CPU命中率就越高,当cache容量达到一定值时,命中率不会因容量的增大而有明显的提高。
-
块长与命中率之间的关系取决于程序的局部特性,当块由小到大增长时,起初会因为局部性原理使命中率有所提高,当倘若继续增大块长,命中率可能下降,因为所装入缓存的有用数据反而少于被替换掉的有用数据。由于块长增大,导致缓存中块数的减少,命中率下降。
-
cache的基本结构 地址映射变换机构:将CPU送来的主存地址转换为cache地址。主要是主存块号与cache块号的转换。若建立了对应关系,则CPU可以直接访问cache存储体。否则分为cache已满和cache未满的情况。
主存与 Cache 的地址映射方式
-
为了把主存块放到 Cache 中,必须应用某种方法把主存地址定位到 Cache 中,称为地址映射。主存地址与 Cache 地址间存在着对应关系,这个关系称为映射函数。地址映射完全由硬件实现,变换过程很快,软件人员未感觉到 Cache 的存在,这种特性称为 Cache 的透明性。 设i表示主存块号, j表示Cache行号, 主存容量为2m块, Cache容量为2c行, 每个字块中含 2b 个字。
-
直接映射 直接映射是一种多对一的映射关系,主存的一块只能拷贝到 Cache 的一个特定行位置上去 。 在直接映射方式下,Cache 的行号 j 和主存的块号 i 有如下函数关系j=i mod 2c 。按照这个映射关系,主存地址被划分成块内地址、字块地址和高位标记三部分 。 根据 Cache 的行数将主存分为若干大组,每个大组包 含 2c个数据块,每个大组中地址偏移量相同的数据块,映射到 Cache 中的同一行 ,该 Cache 行地址等于偏移量的值。由此可知,每个 Cache 行最多有 2m-c个主存字块可能映射过来,所以, Cache 的标记只需 m-c 位即可指明该 Cache行对应的主存块来源,即数据块在主存中所处的大组的组号。直接映射方式下,CPU 访存的过程描述:
CPU 给出一个字的 m+b 位主存地址,Cache 控制逻辑将中间的 c 位地址取出,作为 Cache 的行地址,通过访问存放 Cache 行地址的相联存储器, 取出标记字。将取出的标记与主存的高 t=m-c位相比较,若符合且行数据有效,则命中;否则是不命中。 直接映像的缺点是机制不灵活,Cache 命中率低。
-
全相联映射 全相联映射中,
主存地址被划分成块内地址和高位标记两部分 。将主存中一个块的地址(块号)与块的内容(字)一起存入 Cache 行中。其中块地址存于 Cache 的标记部分。这种带全部块地址一起保存的方法,可使主存的一个块直接拷贝到 Cache 中的任意一行上 。CPU给出了一个字 m+b位的主存地址,为了快速检索,主存地址中 m 位的块号与 Cache 中所有行的标记同时在比较器中进行比较。如果块号命中,则按字地址从 Cache 中读取一个字;否则,Cache 不命中。 全相联映像的优点是机制灵活,命中率高。缺点是硬件开销大,要进行 2c 路比较,通常采用相联存储器来实现。在全相联映射中,调入 Cache 的行采用高速 SRAM 存储器存储,按地址访问,而记录对应行的主存高位标记部分采用相联存储器来实现,这样可以按所查找的内容快速查找主存地址所对应的块是否存在于 Cache 中。
全相联映射方式的主要缺点是比较器电路难于设计和实现,因此只适合于小容量的 Cache。
-
组相联映射 组相联方式将 Cache 的行分成 2c-r组,每组 2r行。主存的字块存放到 Cache 中的哪个组是固定的, 至于映射到该组哪一行是灵活的。 即有如下函数关系: j=(i mod 2c-r)*2r+k,其中 0≤k≤2^r -1^。 按照 Cache 的组数将主存分为若干大组,每个大组包含 2c-r个数据块,每个大组中偏移量相同的数据块,映射到 Cache 中的同一组, 该Cache组地址等于偏移量的值。由于每一个Cache组都包含2r行,数据块应该复制到该Cache组中的哪一行,则遵循全相联映射方式。 ,中间 c-r 位对应 Cache 的主存地址中的低 b 位对应 块内地址组地址 ,高 m-c+r 位对应 Cache 行的标志 。当 CPU 给定一个主存地址时,首先用中间的 c-r 位找到 Cache 的相应组,然后将高 m-c+r 位与该组 2r行中的所有标记同时进行比较。哪行的标记与之相符,哪行命中。此后再以主存地址的低 b 位检索此行中的字,完成所要求的存取操作。如果此组没有一行的标记与之相符, 即 Cache 不命中。 组相联映像的优点是大大增加了映射的灵活性,主存中一块可映射到 Cache 的 2r块,提高了命中率。每次比较只是进行 2r路比较,r 较小时,硬件开销不是很大。组相联映像通常采用 2 路、4 路和 8 路比较,即取 r=1,r=2,r=3。
替换算法
当新的一块数据需要装入 Cache 时,原来存储的一个 Cache 行必须被替换。对于直接映射, 某个特定的块只可能有一个相对应的行,因此,不需要对将被替换的 Cache 行进行选择。
随机替换算法 在发生替换时,该算法随机挑选一个候选的 Cache 行来进行替换,而与使用情况无关,其结果往往导致 Cache 的命中率很差。但是,统计表明,与 Cache 的其他替换算法相比较,随机替换只在性能上稍逊于其他基于 Cache 行使用情况的算法。先进先出算法 (FIFO) 在发生替换时,该算法把最先调入的那一个 Cache 行替换出去。FIFO 算法用循环或环行缓冲技术很容易实现,是一般来说,采用先进先出算法也不能得到很高的 Cache 命中率。 开销小,易实现。最近最少使用算法 (LRU) 该算法统计哪一个Cache行是近段时间使用次数最少的Cache行,需替换时就将它替换出去。 采用该替换算法能得到较高的 Cache 命中率。 可以通过为每个 Cache 行设置一个计数器来实现 LRU 替换算法,Cache 每命中一次,命中行的计数器被清零,其他行的计数器加 1,需要替换时,就将计数器值最大的行替换出去。
写策略
写贯穿策略 (Write Through) 最简单的的写策略,其定义如下:当 CPU 写 Cache 命中时,所有写操作既对 Cache 也对主存进行 ;当 CPU 写 Cache 不命中时,直接写主存,然后有两种做法: 其一,不将该数据所在的块拷贝到 Cache 行,称为 WTNWA 法;其二,将该数据所在块拷贝到 Cache 的某行,称为 WTWA 法。 写贯穿策略保证了主存数据总是有效 。在多处理器系统中,任何其他的 CPU-Cache 模块监视对主存的访问,以保证自己的 Cache 和主存的一致性,从而产生了大量的存储信息量,可能引起瓶颈问题。增加了访存次数 ,读操作不涉及对主存的写操作,写操作的时间就是访问主存的时间 。相对于写回策略,写贯穿策略中,只要写入 Cache,就要对主存写操作,使 Cache 不能在 CPU和主存之间起到写方面的高速缓存作用,就降低了 Cache 的功效。 写回策略 (Write Back) 当 CPU写 Cache 命中时,写操作只是对 Cache 进行, 而不修改主存的相应内容 ,仅当此 Cache行被换出时,相应的主存内容才被修改 ;当 CPU写 Cache 不命中时,先将该数据所在块拷贝到 Cache 的某行,余下操作Cache 写命中时相同。 写操作的时间就是访问cache的时间,可以减少主存的写操作次数,但在读操作cache失效时要发生数据替换,引起被替换块写回主存的操作。 ,CPU 修改 Cache 行时,标记其修改位,当此 Cache 行被换出时,判别此 Cache 行的修改位,从而决定是否将 Cache 行数据写回主存相应单元。为了区别 Cache 行是否被改写过,应为每个 Cache 行设置一个 修改位减少了对主存写的次数 ,使 Cache 在 CPU 和主存之间读/写两方面都起到了高速缓存的作用,但是其控制相对复杂,最大的弊端就是存在导致 Cache 和主存数据不一致的隐患 。- 当 CPU 访存写一个字时,Cache 控制逻辑根据地址判断这个字是否在 Cache 中,若不在, 称为 Cache“写不命中”,此时,直接将该字写入主存中,且不再调入 Cache;否则,称为 Cache “写命中”,
Cache 的多层次设计
-
第一,容量问题。Cache 容量越大、性能越好,价格也越高; 第二,Cache 中行的大小问题。设置合适大小的行,能使 CPU 的效率提高很多; 第三,如何组织 Cache 的问题。采取哪种地址映射方式、哪种替换策略,使 Cache 中的字和主存中的字相对应, 以及保持 Cache 一致性的问题; 第四,指令和数据共用同一个 Cache 还是分享不同 Cache 的问题。共用同一个 Cache 的设计简单,但是效率相对较低,用不同的 Cache 分别存放指令和数据是当前 Cache 发展的趋势; 第五,Cache 的层次问题。近年来,CPU芯片的特点之一是把 Cache 做到片内,片外同一封装内还有容量大一些的二级 Cache,甚至在封装之外可能还有第三级 Cache。
-
单级 Cache 与两级 Cache 由于集成度的提高,当今的计算机系统已经实现了将 Cache 置于处理器芯片以内,这样的 Cache 被称为片内 Cache,而位于处理器芯片以外的 Cache 被称为片外 Cache,由比主存动态RAM和ROM存取速度更快的静态RAM组成,片外 Cache 通过外部总线与 CPU连接。片内 Cache 因为减少了 CPU在外部总线上的活动,所以加快了执行时间。 CPU内部的数据路径较短,存取片内 Cache 甚至比零等待状态的总线周期还要快, 在这段时间内,总线空闲,可用于其他传送。通常,对于片内 Cache 而言,仍需要一个位于片外的 Cache 配合其工作,片外 Cache 由 SRAM 组成,片内 Cache(L1 Cache)