计算机组成原理存储器的校验,计算机组成原理 - CH06 存储器 Memory

6.1概述

从逻辑上来说,

存储器的存储单元是按照线列排列的, 存储器单元的地址从0开始编址, 直到处理器可以寻址的最大容器.

6.2 存储器的类型

计算机系统都使用两种基本类型的存储器: 随机存储器(random access memory,

RAM) 和只读存储器(read-only memory, ROM).

现在的计算机系统一般都采用两种类型的存储器芯片来构建大规模的RAM存储器: 静态随机存储器(SRAM)和动态随机存储器(DRAM).

DRAM用作主存储器, SRAM用作高速缓存存储器. DRAM可以分成许多类型,

包括多层结构的DRAM(MDRAM), 快速翻页模式(FPM)的DRAM, 扩展数据输出(EDO)的DRAM, 并发EDO DRAM,

同步动态随机存储器(SDRAM), 同步连接的(SL)DRAM, 双倍数据传送率的(DDR)SDRAM,

以及直接RAM总线的(DR)DRAM等. 而SRAM也可以分成各种不同的类型:'异步SRAM,

同步SRAM和流水线并发体系结构的SRAM.

大部分计算机系统使用一定数目的ROM存储器来存放一些运行计算机系统所需要的关键信息.有5种不同类型的基本ROM存储器:

ROM, PROM, EPROM, EEPROM和闪存(flash memory).

6.3 存储器的层次结构

当今的计算机系统都采用各种不同类型的存储器的组合配置. 这种方案称为存储器分层结构(hierarchical memory).

通常存储器的速度越快,

单位信息存储的成本也越高

存储器分层结构系统的基本类型包括:寄存器, 高速缓存, 主存储器和辅助存储器.

现代计算机一般都具有一个数目较小的高速存储器系统, 称为高速缓存. 高速缓存用来暂时存放一些存储器单元中频繁使用的数据.

这种高速缓存会被连接到一个容量较大的主存储器. 通常主存储器的速度中等.

然后再使用一个容量非常大的辅助存储器作为机器存储器系统的补充. 这种辅助存储器系统一般由硬盘和一些可移动的存储介质组成.

采用这种存储器分层结构的组织方式, 可以提高对存储器系统的有效访问速度, 而且只需使用少量快速(并且非常昂贵)的芯片.

通常可以按照存储器离开处理器的距离(distance)来对存储器分类,较慢的存储器技术用于距离处理器较远的存储器系统,

而较快的存储器技术用于靠近CPU的存储器系统. 由于价格的因素, 倾向于速度快的存储器的使用数量比速度慢的存储器要少.

基本术语:

命中 (hit) ---- CPU请求的数据就驻留在要访问的存储器层中. 通常, 只是在存储器的较高层上才会关心所谓命中率的问题.

缺失 (miss)----

CPU请求的数据不在要访问的存储器层

命中率(hit rate) ---- 访问某个特定的存储器层时,

CPU找到所需数据的百分比.

缺失率, 又称为未命中率 (miss rate) ----

访问某个特定的存储器时, CPU找不到所需的数据百分比. 注意:缺失率=1-命中率

命中时间 (hit time) ----

在某个特定的存储器层中, CPU取得所请求的信息需要的时间

缺失损失(miss penalty) ---

CPU处理一次缺失事件所需要的时间, 其中包括利用新的数据取代上层存储器中的某个数据块所需要的时间,

再加上将所需数据传递给处理器所需要的附加时间.

较低层(显然也是速度较慢, 规模较大和价格较便宜) 的存储器系统会响应较高层的存储器对位于存储器单元X处的数据请求. 同时,

这些低层存储器也会将位于地址 X+1, X+2, ..., 处的数据送出, 也就是将整个数据块返回较高层的存储器系统.

计算机程序对存储器的引用常常会有集中成组成簇的形式, 这就是引用的局部性(locality of reference)的一个例证.

在处理某个缺失事件时, 处理器不是简单地将所要搜索的数据传递给较高层的存储器, 而是将包含该数据的整个数据块全部返回.

由于引用的局部性特性, 同时返回的额外数据很有可能在不久的将来被引用.

引用的局部性有下面三种基本形式:

时间局部性 (Temporal

locality): 最近访问过的内容很可能在不久的将来再次被访问.

空间局部性 (Spatial

locality): 对存储器地址空间的访问形成团簇的集中倾向(例如, 在数组成循环操作中)

顺序局部性 (Sequential

locality): 访问存储器的指令倾向于按顺序执行

6.4 高速缓存存储器

处理器利用高速缓存临时存放一些即将需要的信息.

计算机会将已经访问过的和CPU可能将要访问的数据存放在一个速度较快的, 比较靠近CPU的高速缓存存储器中.

高速 缓存对这种新数据块的定位操作取决于两个因素: 高速缓存的映射策略和高速缓存的大小

L1高速缓存通常集成在微处理器中,

而L2高速缓存则位于CPU和主存储器之间.

设计高速缓存存储器的基本法则是: 既要求高速缓存的容量昼小,

使高速缓存存储器每位的总平均成本可以接近于主存储器; 又必须保证高速缓存的容量足够大,

可以很好地满足系统的速度要求.

高速缓存存储器并不通过地址进行访问, 而是按照内容进行存取. 所以,高速缓存存储器有时也会被称为内容寻址存储器( content addressable

memory), 或简称为CAM.

6.4.1 高速缓存的映射模式

当生成一个存储器的地址时, CPU会首先搜索高速缓存存储器, 查找所要求的数据字是否已经存放在高速缓存中.

如果在高速缓存中没有找到所要求的字, 那么CPU会把主存储器中该字所在位置的整个块装入到高速缓存存储器中.

CPU使用主存储器地址的其中一个地址域, 对已驻留在高速缓存中的请示数据, 直接给出数据在高速缓存中的位置,

这种情况称为高速缓存命中(Cache hit); 而CPU对没有驻留在高速缓存中的请求数据, 会指示出数据将要存放在高速缓存中的位置,

这种情况称为高速缓存缺失(未命中, cache miss). 接下来, CPU会通过检查高速缓存块的一个有效位(valid bit),

来验证所引用的高速缓存块的合法性. 如果所检验的有效位为0, 即表示要引用的高速缓存块不正确, 产生了一次高速缓存命中.

但是,CPU还需要继续完成下一个操作步骤后,才能完全确认这次的高速缓存命中事件.

CPU随后要将属于该高速缓存块的标记与主存储器地址的标记域(tag field)进行比较. 标记是主存储器地址中的一组特殊的二进制位,

用来标识数据块的身份, 即产生了一次高速缓存命中. 在此基础上, 还需要在高速缓存块中定位找出所要求的数据字的存储位置.

这项工作可以通过使用主存储器地址中一个称为字域(word field)的字地址来完成.字域代表数据字的块内地址,

所有的高速缓存映射模式都要求有一个字域.最后,地址中剩余的字段由特定的映射模式来决定.

直接映射的高速缓存

直接映射的高速缓存采用模块方式来指定高速缓存和主存储器之间的映射关系.

高速缓存中实际存储的信息内容要比主存储器复制的数据信息多.

二进制的主存储器地址被划分为几个域

标记

每个域的大小取决于主存储器和高速缓存存储器的物理特性. 字(word)域, 有时双称为偏移量(offset) 域,

用来唯一地识别和确定来自某个指定的数据块中的一个数据字. 块(block) 域也是如此, 必须选择一个唯一的高速缓存块.

当CPU生成该地址时, 首先取出块域的位, 并利用这个数值引导CPU找到正确的高速缓存块. 数值表示应该对高速缓存第n块进行校验,

如果高速缓存块检验正确, 随后将标记域的数值1(存在于主存储器地址中)与高速缓存第n块中的标记进行比较. 如果高速缓存的标记也为1,

说明主存储器的第n个数据块目前正驻留在高速缓存中的第0块存储空间

全关联高速缓存

允许主存储器中的数据块可以存放到高速缓存的任意位置.

这样一来, 整个高速缓存需要按照关联存储器(associative memory) 的模式构建,

以便CPU可以对这种高速缓存存储器执行平行搜索.

也就是说,单一的搜索操作必须将所请求的标记与存放在高速缓存中的所有(all)标记进行比对.

使用关联映射方式时, 需要将主存储器的地址划分成标记域和字域两部分.

当要在高速缓存中搜索某个特定的主存储器数据块时, CPU会将该主存储器地址的标记域与高速缓存中存放的所有合法的标记域进行比对.

如果发现有一个比对相同, 就表示找到了所要求的数据块. 记住, 标记可以唯一地识别和确定一个主存储器中的数据块.

如果没有一个标记匹配, 就表示产生了一个高速缓存缺失, 而且数据块必须从主存储器转移到高速缓存.

对于直接映射方式, 如果一个已经被数据块占据的高速缓存单元需要存放新的数据块, 那么就必须移除当前在高速缓存中的数据块.

如果这些块的内容已经被修必过, 就要把这些数据块重写到主存储器. 如果数据块的内容没有发生变化,

就直接使用新的数据块覆盖原来的数据块, 然而, 对于全关联映射方式, 如果高速缓存已经装满,

就需要一种置换算法来决定将从高速缓存中丢弃哪个数据块. 被丢弃的块被称为牺牲块(victim block).

最简单的置换算法是先进先出(first in , first out)的置换算法.

组关联高速缓存

N路的组关联高速缓存映射(N-way set associative Cache mapping),

它是上面两种方法的某种组合形式.这种方法不是将数据块映射到高速缓存中的某一个空间块, 而是映射到由几个高速缓存块组成的某个块组中.

同一个高速缓存中的所有组的大小必须相同.

在组关联高速缓存的映射方式中, 主存储器地址分为三部分: 标记域, 组域和字域. 标记域和字域的作用与前面介绍的直接映射方式相同;

而组域, 表示主存储器中的数据块会被映射到高速缓存中的块组

6.4.2 转换策略

在直接映射方式中, 如果多个主存储器的数据块争用某个高速缓存块, 那么只有一种可能的动作: 即将现有的数据块从高速缓存中踢出,

为新的数据块留出存放空间,这一过程称为置换(replace-ment) ,对于全关联高速缓存和组关联高速缓存,就需要用某种置换算法来确定哪一个块是要从高速缓存中被移除的"牺牲"块.决定这种置换的算法称为置换策略(replacement policy).

最佳置换算法的基本思想是, 替换掉在未来最长的时间段内不再使用的高速缓存块. 例如可以考虑时间局部性.推测最近没有被使用过的数值,

为每个高速缓存块分配一个时间标签, 选择最近最少被使用的高速缓存块作为牺牲块. 这种算法称为最近最少被使用(least recently used,

LRU)算法.

先进先出(first in, first out,

FIFO)是另外一种较为流行的方法. 利用这种方法 ,

存放在高速缓存中时间最长的块将选择作为牺牲块从高速缓存存储器中被移除, 而不管这个块在最近何时被使用过.

6.4.3 有效存取时间和命中率

分层存储器系统的性能可以采用其有效存取(访问)时间(effective access time,

EAT), 或者称为每次访问所需要的平均时间来量度,EAT是使用命中率与相连存储器层次的相对访问时间产生的加权平均.

6.4.4

何时高速缓存的方法会失效

当程序具有局部性时, 高速缓存的操作方式非常有效, 但是, 如果程序的局部性不好, 高速缓存就会失效,

并且导致存储器的层次结构的性能很差. 特别是面向对象的编程可能会导致程序的局部性.

6.4.5 高速缓存的写策略

高速缓存中的脏块是指已经被修改过的数据块.高速缓存的写策略(write

policy)会决定何时更新对应的主存储器数据块来保证与高速缓存块的数据一致性.

写通(write-through)--- 写通策略是指在每次写操作时, 处理器会同时更新高速缓存和主存储器中对应的数据块. 写通策略的明显缺点是, 每次写操作都要访问主存储器.

使用写通策略意味着每一次对高速缓存的写操作都必需伴随一次对主存储器的写操作, 这样减慢了系统的速度.

回写(write-back)---- 也称为copyback, 是指当只有某个高速缓存块被选择作为牺牲块而必须从高速缓存中移除时,

处理器才更新主存储器中对应的数据块. 回写策略的缺点是,

主存储器和高速缓存的对应单元在某些时刻可能会存放着不同的数值. 而且, 如果某个进程在回写主存储器完成之前发生中断(或崩溃),

那么高速缓存中的数据可能会丢失.

6.5 虚拟存储器

虚拟存储器(virtual memory) 使用硬盘作为RAM存储器的扩充.

使用虚拟存储器,

计算机可以寻址比实际主存储器更多的主存储器空间. 教育处机使用硬盘驱动器保持额外的主存储器空间.

硬盘上的这部分区域被称为页文件(page file), 因为这些页文件在硬盘上保持主存储器的信息块.

实现虚拟存储器最常用的方法是使用主存储器的分页机制(paging), 这种方法是将主存储器划分成固定大小的块,

并且程序也被划分成相同大小的块.

虚拟地址 (virtual

address) ---- 进程所使用的逻辑地址或程序地址,

只要CPU生成一个地址, 就总对应指虚拟地址空间

物理地址 (physical

address) ---- 物理存储器的实际地址

映射 (mapping) ----- 一种地址变换机制,

通过映射可以将虚拟地址转换成物理地址. 这类似于高速缓存映射

页帧 (page frame)

---- 由主存储器(物理存储器) 分成的相等大小的信息块或数据块

页 (pages) ---- 由虚拟存储器 (逻辑地址空间)

划分成的信息块或数据块, 每页的大小与一个页帧相同, 在硬盘上存储热气页及以供进程使用

分页(paging) ----

将一个虚拟页从硬盘复制到主存储器的某个页帧的过程

存储碎片 (fragmentation) ---- 变得不能用的存储器单元

缺页 (page fault) ----- 当一个请求页在主存储器中没有找到时所发生的事件,

必须将请求页从硬盘复制到存储器.

6.5.1 分页

分页的基本思想非常简单: 按照固定大小的信息块(页帧) 为各个进程分配物理存储空间,

并且通过将信息写入页表(page table)的方式跟踪记录过程的不同页的存放位置, 每个进程都有自己的页表,

页表通常驻留在主存储器中, 页表存储该进程的每个虚拟页的物理位置, 页表一般有N行, N代表该进程的虚拟页的页码数,

如果当前进程的某些页不在主存储器中, 则页表会通过设置一个有效位(valid bit) 为0来指示;

如果进程的某一页当前已经在主存储器中, 则表示该页的有效位设置为1. 因此, 每个页表的入口目录都由下面的两 部分内容组成:

有效位和帧数.

你可能感兴趣的:(计算机组成原理存储器的校验)