第三章———并行存储器与cache存储器

一、并行存储器

由于CPU和主存储器之间在速度上是不匹配的,这种情况便成为限制高速计算机设计的主要问题。为了提高CPU和主存之间的数据传输率,除了主存采用更高速的技术来缩短读出时间外,还可以采用并行技术的存储器。

1、双端口存储器

(1)双端口存储器的逻辑结构

双端口存储器由于同一个存储器具有两组相互独立的读写控制电路而得名。由于进行并行的独立操作,因而是一种高速工作的存储器,在科研和工程中非常有用。举例说明, 双端口存储器IDT7133的逻辑框图。如下图

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAY2h5MzIzMg==,size_20,color_FFFFFF,t_70,g_se,x_16

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

(3)有冲突读写控制:当两个端口同时存取存储器同一存储单元时,便发生读写冲突。为解决此问题,特设置了BUSY标志。在这种情况下,片上的判断逻辑可以决定对哪个端口优先进行读写操作,而对另一个被延迟的端口置BUSY标志(BUSY变为低电平),即暂时关闭此端口。

(4)判断冲突的判断方式有以下两种。

①如果地址匹配且在CE之前有效,片上的控制逻辑在CEL和CER之间进行判断来选择端口(CE判断)。

②如果CE在地址匹配之前变低,片上的控制逻辑在左、右地址间进行判断来选择端口(地址有效判断)。

无论采用哪种判断方式,延迟端口的BUSY标志都将置位而关闭此端口,而当允许存取的端口完成操作时,延迟端口BUSY标志才进行复位而打开此端口。

2、多模块交叉存储器

1.存储器的模块化组织

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

在顺序方式中某个模块进行存取时,其他模块不工作。而某一模块出现故障时, 其他模块可以照常工作。 另外通过增添模块来扩充存储器容量也比较方便。但顺序方式的缺点是各模块一个接一个串行工作,因此存储器的带宽受到了限制。

采用交叉方式寻址的存储器。用地址码的低位字段经过译码选择不同的模块,而高位字段指向相应模块内的存储字。这样,连续地址分布在相邻的不同模块内,而同一个模块内的地址都是不连续的。因此,从定性分析,对连′续字的成块传送,交叉方式的存储器可以实现多模块流水式并行存取,大大提高存储器的带宽。由于CPU的速度比主存快,假如能同时从主存取出n条指令,这必然会提高机器的运行速度。多模块交叉存储器就是基于这种思想提出来的。

二、cacte基本原理

1. cache的功能

是为了解决CPU和主存之间速度不匹配而采用的一项重要技术。其原理基于程序运行过程中的空间局部性和时间局部性特征。

解决CPU和主存之间的速度不匹配问题,一般采用高速的SRAM构成,CPU和主存之间的速度差别很大采用两级或多级Cache系统早期的一级Cache在CPU内,二级在主板上,现在的CPU内带L1 Cache和L2 Cache全由硬件调度,对用户透明。

2. cache的基本原理

cache 除包含SRAM外,还要有控制逻辑。若cache在CPU芯片外,它的控制逻辑一般与主存控制逻辑合成在一起, 称为主存/chace 控制器:若cache 在CPU内,则由CPU提供它的控制逻辑。

CPU与cache 之间的数据交换是以字为单位,而cache与主存之间的数据交换是以块为单位。二个块由若干字组成, 是定长的。当CPU读取内存中一个字时, 便发出此字的内存地址到cache和主存。此时cache控制逻辑依据地址判断此字当前是否在cache中:若是,则cache命中,此字立即传送给CPU;若非,则cache缺失(未命中),用主存读周期把此字从主存读出送到CPU,与此同时,把含有这个字的整个数据块从主存读出送到cache中。

3、Cache的命中率

从CPU来看,增加一个cache的目的,就是在性能上使主存的平均读出时间尽可能接近cache的读出时间。为了达到这个目的,在所有的存储器访问中由cache满足CPU需要的部分应占很高的比例,即cache的命中率应接近于1。由于程序访问的局部性,实现这个目标是可能的。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAY2h5MzIzMg==,size_20,color_FFFFFF,t_70,g_se,x_16

4、cache结构设计必须解决的问题

在设计cache结构时,必须解决几个问题:①主存的内容调入cache时如何存放?②访存时如何找到cache中的信息?③当cache空间不足时如何替换cache中已有的内容?④需要写操作时如何改写cache的内容?

其中,前两个问题是相互关联的,即如何将主存信息定位在cache中,如何将主存地址变换为cache地址。与主存容量相比,cache 的容量很小,它保存的内容只是主存内容的一个子集,且cache与主存的数据交换是以块为单位。为了把主存块放到cache中,必须应用某种方法把主存地址定位到cache中,称为地址映射。“映射”词的物理 含义是确定位置的对应关系,并用硬件来实现。这样当CPU访问存储器时,它所给出的一个字的内存地址会自动变换成cacte的地址,即cache地址变换。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAY2h5MzIzMg==,size_20,color_FFFFFF,t_70,g_se,x_16

 

4、cache 的替换策略

cache工作原理要求它尽量保存最新数据。当一个新的主存块需要拷贝到cache, 而允许存放此块的行位置都被其他主存块占满时,就要产生替换。

替换问题与cache的组织方式紧密相关。对直接映射的cache来说,因一个主存块只有一个特定的行位置可存放,所以解决问题很简单,只要把此特定位置上的原主存块换出cache 即可。对全相联和组相联cache来说,就要从允许存放新主存块的若干特定行中选取一-行换出。如何选取就涉及替换策略,又称替换算法。硬件实现的常用算法主要有以下三种。

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

LFU算法认为应将一 段时间内被访问次数最少的那行数据换出。为此,每行设置一个计数器。新行调入后从0开始计数,每访问一一次,被访行的计数器增1。当需要替换时,对这些特定行的计数值进行比较,将计数值最小的行换出,同时将这些特定行的计数器都清零。这种算法将计数周期限定在两次替换之间的间隔时间内,因而不能亚格反映近期访问情况。

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

LRU算法将近期内长久未被访问过的行换出。为此,每行也设置一个计数器, 但它们是cache每命中一次, 命中行计数数器清零,其他各行计数器增1. 当需要替换时,比较各特定行的计数值,将计数值最大的行换出。这种算法保护了刚复制到cache中的新数据行件合cache工作原理,因而使cache有较高的命中率。

3)随机替换

随机替换策略实际上是不要什么算法,从特定的行位置中随机地选取一行换出即可。这种策略在硬件上容易实现,且速度也比前两种策略快。缺点是随意换出的数据很可能马上又要使用,从而降低命中率和cache工作效率。但这个不足随着cache容量增大而减小。研究表明,随机替换策略的性能只是稍逊于前两种策略。

4)、轮转替换

5、cache的写操作策略

cache的写入更改了cache的内容。如何与主存内容保持一 致,可选用如下三种写操作策略。

1)写回法(write back, copy back)

写回法:当CPU写cache 命中时,只修改cache的内容,而不立即写入主存; 只有当此行被换出时才写回主存。这种方法便cache真正在CPU-主存之间读/写两方面都起到高速缓存作用。对一个cache行的多次写命中都在cache中快速完成,只是需要替换时才写回速度较慢的主存,减少了访问主存的次数。实现这种方法时,每个cache行必须配置一个修改位,以反映此行是否被CPU修改过。当某行被换出时,根据此行修改位是1还是0,来决定将该行内容写回主存还是简单弃去。

如果CPU写cache 未命中,为了包含欲写字的主存块在cache分配一行,将此块整个复制到cache 后对其进行修改。主存的写修改操作统一留到换出时再进行。显然,这种写cache与写主存异步进行的方式可显著减少写主在次数。但是存在不一致性的隐患。

( 2)全写法(write through)

全写法要求:当写cache命中时,cache与主存同时发生写修改,因而较好地维护了cache与主存的内容的一致性。 当写cache未命中时,只能直接向主存进行写入。但此时是否将修改过的主存块取到cache,有两种选择方法:一种称为WTWA法,取主存块到cache并为它分配一个行位置: 另一种称为 WTNWA法,不取主存块到cache。

全写法是写cache与写主存同步进行,优点是cache中每行无须设置一个修改位,以及相应的判断逻辑。缺点是,cache 对CPU向主存的写操作无高速缓冲功能,降低了ceache的性能。

3)写一次法(write once)

写一次法是基于写回法并结合全写法的写策略:写命中与写未命中的处理方法和写回法基本相同,只是第一次写命中时要同时写入主存。这是因为第一次写cache命中时,CPU要在总线上启动一个存储写周期,其他cache监听到此主存块地址及写信号后,即可复制该块或及时作废,以便维护系统全部cache的一致性。奔腾CPU的片内数据cache就采用了写一次法。

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值