高等计算机系统结构

108
高高高高高高 高高 高高高高高高高高高高高高高高高高高高高高高 高高高 高高 2007 高 11 高 高高高高高高高高高高高高高高

Upload: liberty-preston

Post on 02-Jan-2016

64 views

Category:

Documents


0 download

DESCRIPTION

清华大学计算机科学与技术系高性能计算研究所 郑纬民 教授 2007 年 11 月. 计算机科学与技术系研究生课程. 高等计算机系统结构. 第一章 高等计算机的核心技术 —— 并行处理 第二章 加速比性能模型与可扩展性分析 第三章 互连与通信 第四章 划分与调度 第五章 并行存储器系统 第六章 Cache Coherence 第七章 Memory Consistency 第八章 指令级并行处理. 高等计算机系统结构. 第六章 Cache Coherence. 6.1 Cache Coherence 问题 - PowerPoint PPT Presentation

TRANSCRIPT

高等计算机系统结构清华大学计算机科学与技术系高性能计算研究所

郑纬民 教授2007 年 11 月

计算机科学与技术系研究生课程

高等计算机系统结构第一章 高等计算机的核心技术——并行处理第二章 加速比性能模型与可扩展性分析第三章 互连与通信第四章 划分与调度第五章 并行存储器系统第六章 Cache Coherence

第七章 Memory Consistency

第八章 指令级并行处理

第六章 Cache Coherence

6.1 Cache Coherence 问题6.1.1 Cache Coherence 的提出6.1.2 多个 Cache 不一致的原因6.1.3 两种设计 Cache 一致性协

议策略6.2 监听总线协议6.3 基于目录的 Cache 一致性协议6.4 三种 Cache 一致性策略

6.1 Cache Coherence 问题6.1.1 Cache Coherence 问题的提出

在多处理器系统中,多个 Cache 中,对应的 copy 内容应该一致,如下图:

Memory

Cache

P

Cache

P

……

Cache

P

这几个 copy应该一致

6.1.2 多个 Cache 不一致的原因 1. 共享可写数据的不一致性( sharing

of writable data )

P1 P2

更新前

x x

x

处理机

Cache

sharedmemory

P1 P2

写通过

x’ x

x’

P1 P2

写回

x’ x

x

2. 进程迁移的不一致性

P1 P2

迁移前

x

x

处理机

Cache

P1 P2

写通过

x x’

x’

P1 P2

写回

x’ x

x

上图中: 右图为:包含共享变量 x 的进程原来在 P1 上运行,并对 x 进行了修改(但采取写回策略,所以暂时没有修改 Memory ),由于某种原因迁移到 P2 ,修改过的 x’ 仍在 P1 的 Cache中, P2 运行时从 Memory 中得到 x ,这个 x其实是“过时”的,所以造成了不一致。

中间图为: P2 中运行的进程对 x 进行了修改,采取写通过策略,所以把 Memory 中的x 也修改为 x’ ,由于某种原因该进程迁移到 P1 ,但 P1 的 Cache 中仍为 x ,所以造成不一致。

3. I/O 操作(绕过 Cache 的 I/O 操作)

P1 P2

x x

存储器

P1 P2

写通过

x x

P1 P2

写回

x’ x

xx’ x’ x x

I/O存储器 输入 存储器 输出

c1 c2

总线

上图中: 中间图为:当 I/O 处理机将一个新的数据 x’ 写入主存储器时,绕过采用写通过策略的 cache ,则 C1 和共享存储器之间产生了不一致。

右图为:直接从主存储器输出数据时(绕过 Cache ),采用写回策略的高速缓存产生不一致性。

6.1.3 两种设计 Cache 一致性协议策略 1. 写无效( write invalidate )

任一处理器写它的私有 Cache 时,它都使所有其它的 Cache 中的副本失效。

对 Write-through ,它也更新 memory 中的副本(最终是一个 Cache 中的副本和 memory中的副本是有效的)。

对 Write-back ,它使 memory 中的副本也失效(最终只有一个 Cache 中的副本是有效的)。

2. 写更新( write update ) 任一处理器写它的私有 Cache 时,它

都立即更新所有其它的 Cache 中的副本。 对 Write-through ,它也更新主存储器

中的副本。 对 Write-back ,对存储器中副本的更

新延迟到这个 Cache 被置换的时刻。

3. 示意图 下图表示数据块 x 在共享存储器和三

台处理机的 Cache 中的副本一致的情形。

x

共享存储器

Cache

P1

x

P2

x

x

P3

……

……

总线

处理机

下图表示 P1 进行写无效操作后的情形。写通过:

x’

I 表示无效P1

I

P2

x’

I

P3

……

……

写回:

x’

I 表示无效P1

I

P2

I

I

P3

……

……

下图表示 P1 进行写更新操作后的情形(写通过)。

x’

I 表示无效P1

x’

P2

x’

x’

P3

……

……

4. 写无效的问题主要开销在两个方面:

( 1 )作废各 Cache 副本的开销; ( 2 )由作废引起缺失造成的开销,

即处理机需要访问已经作废的数据时将引起Cache 的缺失。

后果: 如果一个处理机经常对某个块连续写,

且各处理处理机间对共享块的竞争较小,这时写无效策略维护一致性的开销是很小的。如发生严重竞争,即处理机之间对某个地址的共享数据竞争,将产生较多的作废,引起更多的作废缺失。结果是共享数据在各 Cache 间倒来倒去,产生颠簸现象,当缓存块比较大时,这种颠簸现象更为严重。

5. 写更新的问题 由于更新时,所有的副本均需要更新,

开销很大。

第六章 Cache Coherence

6.1 Cache Coherence 问题6.2 监听总线协议

6.2.1 写一次协议6.3 基于目录的 Cache 一致性协议6.4 三种 Cache 一致性策略

6.2 监听总线协议 (Snoopy protocol)

通过总线监听机制实现 Cache 和共享存储器之间的一致性。

适用性分析: 适用于具有广播能力的总线结构多

机系统,允许每台处理机监听其它处理机的存储器访问情况。

只适用于小规模的多处理机系统。

6.2.1 写一次 (write-once) 协议 写无效监听一致性协议,将写通过和写回策略结合。

为了减少总线流量,高速缓存块的第一次写用写通过方法,产生一份正确的主存储器副本,并使其它的 Cache 中的副本无效,之后就采用写回方法更新 Cache 与主存储器。

1. 一致性协议的内容 一致性协议包括: ( 1 ) Cache 可能出现的状态集合 ( 2 )共享主存的状态 ( 3 )为维护一致性而引起的状态转

换。

2. 每份 Cache 中的副本可能出现的四种状态 ( 1 )有效( valid state ):与主存储器

副本一致的 Cache 副本,即该副本未经修改,所以这个 Cache 副本不是唯一的副本。

( 2 )保留( reserved state ):这一 Cache 副本是第一次修改,并用写通过方法写入主存,所以这一 Cache 副本和主存储器副本一致。

( 3 )重写( dirty state ): Cache 副本不止一次被修改过,由于不再采用写通过方法,所以这个 Cache 副本是唯一的副本。与存储器和其它的 Cache 副本都不一致。主存储器中的副本也是无效的。

( 4 )无效( invalid state )与存储器或其它的 Cache 副本不一致,或在 Cache 中找不到。

3. 局部命令( Local commands ) ( 1 ) P-Read :本地处理机读自己

的 Cache 副本。 ( 2 ) P-Write :本地处理机写自己

的 Cache 副本。

4. 一致性命令 ( 1 ) Read-blk :从另一 Cache读

一份有效的副本。 ( 2 ) Write-inv :在写命中时在总

线上广播一个无效命令。 ( 3 ) Read-inv :在写缺失时在总

线上广播一个无效命令。

Dirty: modified more than once, the only copy in the system;

Invalid: inconsistent copy;

Reserved: after written once, the only copy consistent with memory;

Valid: A copy consistent with the memory copy.

5. Write-Once 一致性协议状态转移图其中,四种状态的含义如下:

Invalid Valid

Dirty Reserved

Read-inv(4) P-Write(1)

P-Write(hit:local still dirty)

P-Write(hit:local, not memory

update, local copy becomes dirty)

P-Write(hit:local,updatememory copy,

broadcastwrite-inv

to all cache,local copybecomesreserved)

Read-blk(3)

Read-inv(4)

P-Read(2)

Read-blk(3)

Read-inv(4)/Write-inv(5)P-Read

(hit:alwayslocal,

no statetransition)

下一节( 用鼠标点击连线来察看详细信息)

P-Write(1)

(1)P-Write(miss: take a dirty copy from a remote cache, or from memory; send Read-invto invalidate all copies; update local copy into a dirty one).

Invalid Valid

Dirty Reserved

下一节

Invalid Valid

Dirty Reserved

(2)P-Read(miss: if no dirty copy exists, memory supplies a validcopy, otherwise, the cache inhibits memory and supplies a copy

and updates memory. Both copies become valid).

P-Read(2)

下一节

Invalid Valid

Dirty Reserved

(3)Read-blk(read from remote processors, the localcopy become valid).

Read-blk(3)

下一节

Invalid Valid

Dirty Reserved

(3)Read-blk(read from remote processors, the localcopy become valid).

Read-blk(3)

下一节

Invalid Valid

Dirty Reserved

(4)Read-inv(A remote cache reads a block during a write-miss,updates it and invalidates all other copies).

Read-inv(4)

下一节

Invalid Valid

Dirty Reserved

(4)Read-inv(A remote cache reads a block during a write-miss,updates it and invalidates all other copies).

Read-inv(4)

下一节

Invalid Valid

Dirty Reserved

(4)Read-inv(A remote cache reads a block during a write-miss,updates it and invalidates all other copies).

(5)Write-inv(A remote cache updates its local copy during a write-hits and invalidates all other copies).

Read-inv(4)/Write-inv(5)

下一节

(1)P-Write(miss: take a dirty copy from a remote cache which then updates memory, or from memory; send Read-inv to invalidate all copies; update local copy into a dirty one).

(2)P-Read(miss: if no dirty copy exists, memory supplies a valid copy, otherwise, the cache inhibits memory and supplies a copy and updates memory. Both copies become valid).

(3)Read-blk(read from remote processors, the local copy become valid).

(4)Read-inv(A remote cache reads a block during a write-miss, updates it and invalidates all other copies).

(5)Write-inv(A remote cache updates its local copy during a write-hits and invalidates all other copies).

6. Write-Once 一致性协议状态转移表

必是局部进行,不影响有效状态第一次写命中,用写通过法。同时修改本地和主存副本并广播 Write-inv使所有副本失效

commandcurrent

statenextstate status

P-Read 有效 有效 Read-hit

P-Write 有效 保留 Write-hit

action

第二次写命中,用写回法。但不修改主存的副本

P-Write 保留 重写 Write-hit

写缺失时,则从主存或远程 Cache 送来副本

。并广播 Read-inv使所有其它副本无效。

commandcurrent

statenextstate status

P-Write 无效 保留 Write-miss

action

(续表)

第二次以后更多的写命中,用写回法。无状态改变。

P-Write 重写 重写 Write-hit

commandcurrent

statenextstate status action

(续表)

读缺失时 ,如远程 Cache中没有重写副本,则主存中一定有一份正确的副本,供给发请求的Cache。如远程的 Cache有重写的副本,则它禁止主存操作,并将副本发给请求的 Cache,两种情况均使发请求的 Cache得到的副本为有效。

P-Read 无效 有效 Read-miss

远程 Cache 读此副本,读后两份副本均有效Read-blk

保留或重写 有效

commandcurrent

statenextstate status action

(续表)

写缺失时,远程 Cache读一个块,并修改它,并使所有其它 Cache的

副本无效。Read-inv

除无效外的其它状态

无效

写命中时,一远程 Cache修改其本地副本,并使数据块的其它副本无效

Write-inv 有效 无效

commandcurrent

statenextstate status action

(续表)

如果副本处于重写状态,必须通过块替换写回主存,否则不产生替换操作

Write-inv 有效 无效 替代

7. 一个具体的例子如下图的系统:

Memory

C1

P1

C2

P2

C3

P3

读的情况: ( 1 )如果 C1 为 Valid ,读 C1 ,则 Read hit ,状态不变。 ( 2 )如果 C1 为 Reserved ,读 C1 ,则 Read hit ,状态不变。 ( 3 )如果 C1 为 Dirty ,读 C1 ,则 Read hit ,状态不变。 ( 4 )如果 C1 为 Invalid , C2 和 C3 没有东西,则读 C1 时 Read miss ,这时只有 memory 中有正确的副本,把它取到 C1 , C1 改为 Valid ( P-Read负责实现状态的改变)。

( 5 )如果 C1 为 Invalid , C2 为 Dirty ,则读 C1 时 Read miss ,这时只有 C2 中的内容是正确的,要发 Read-blk信号把副本从 C2读到 C1 ,同时修改 memory ,把 C1 , C2都改为 Valid (程序状态转移图中 P-Read(2)使 C1Valid , Read-blk(3) 使 C2 Valid )。 ( 6 )如果 C1 为 Invalid , C2 为 Reserved ,则读 C1 时 Read miss ,这时发 Read-blk信号把 C2C1 , C1 , C2 都改为 Valid ,其中 Read-blk(3)负责把 C2 由 ReservedValid , P-Read(2)负责把 C1 由 InvalidValid 。

写的情况: ( 1 )如果 C1 为 Valid ,写 C1 ,则 Write hit ,发 P-write 修改 C1 内容,修改 memory ,发 Write-inv(4)给所有 Cache , C1 变成Reserved 状态。 ( 2 )如果 C1 为 Reserved ,写 C1 ,则Write hit ,发 P-write 修改 C1 内容,不修改memory , C1 状态变为 Dirty 。 ( 3 )如果 C1 为 Dirty ,写 C1 ,则 Write hit ,发 P-write 修改 C1 内容,不修改 memory ,状态仍为 Dirty 。

( 4 )如果 C1 为 Invalid , C2 , C3 没有东西,这时 memory 中有这个地址的数据副本,从 memory 中读取该副本到 C1 ,再把要写的内容写入 C1 ,这时 C1 和 memory 内容不一致,把 C1 的状态变为 Dirty 。 ( 5 )如果 C1 为 Invalid , C2 为 Dirty ,这时 memory 中内容和 C2 中的内容不一致,把 C2C1 ,再把要写的内容写入 C1 ,C1Dirty ,发 Read-inv 使其它所有 Cache 的副本变成无效状态。

( 6 )如果 C1 为 Invalid , C2 为 Reserved ,这时 memory 中的内容和 C2 内容一致,把 C2C1 ,再把要写的内容写入 C1 ,这时C1 与 memory 内容不一致,使 C1Dirty ,发 Read-inv 使其它所有 Cache 的副本变成无效状态。

C1 的三种状态的图示 :

x

x

P1

x

P2

x

P3

C1 C2 C3

memory

validC1 中的副本和 memory 中一致

x’

x’

P1

I

P2

I

P3

C1 C2 C3

memory

Reserved Invalid

C1 中的副本和 memory 中一致,都正确

x’

x’’

P1

I

P2

I

P3

C1 C2 C3

memory

Dirty Invalid

C1 中的副本和 memory 不一致,只有 C1 中的副本正确

8. 其它的一些问题 CPU 要向 Cache 写数据,如果 write miss ,表示该数据块不在 Cache 中或者该数据快处于无效状态,那么需要把正确的数据从 memory 或其它的 Cache 中取过来,然后再写操作。

为什么不能直接写? ( 1 )可能该数据块根本不在 Cach

e 中,所以需要从其它地方调入。 ( 2 )已在 Cache 中,但数据不正

确,这时如果直接写入数据,整个数据块可能还是不正确的。例如,数据不正确的原因是 100号单元数据已修改,如果要写入一个数据到 101单元,这时不能直接写,否则 100号单元还是错的。

Cache Coherence 问题概要:多处理机系统共享存储器Cache 块的状态访问的数据是最新的,不是“过时”的

内容

第六章 Cache Coherence

6.1 Cache Coherence 问题6.2 监听总线协议6.3 基于目录的 Cache 一致性协议

6.3.1 目录的一般性问题6.3.2 全映射目录6.3.3 有限目录6.3.4 链式目录

6.4 三种 Cache 一致性策略

6.2 基于目录的 Cache 一致性协议6.2.1 目录的一般性问题 1.Cache 一致性协议的开销分析

( 1 )采用写无效协议无效后,当其它处理机再读该副

本时,出现 Read miss ,要有开销 ( 2 )采用写更新协议

需要更新所有 Cache 和 memory中的副本,所以开销大,有些处理机对更新后的数据可能不会使用。

2. 基于目录的一致性协议的基本思想 当处理机台数增加时,一般不用总

线结构,而采用多级互连网络。多级互连网络实现广播功能代价很大。

为什么需要广播功能?把一致性命令,如 Write-inv , Read-inv等命令要发送给所有的 Cache 。

能不能只发送给存放该副本的 Cache?

——基于目录的协议的基本思想

3. 目录的结构 ( 1 )目录里放什么——有关 Cache

副本驻留在哪里的信息:所有共享数据块的所有 Cache 副本的地址表。

( 2 )每个目录项(每个数据结构)包含若干个指向这个块(每个数据块有个目录项)的 Cache 副本地址的指针以及一个重写位(用来说明是否有一个 Cache 允许把有关的数据写入)。

( 3 )基于目录的 Cache 一致性协议是依靠一个目录来记录系统之中哪些处理机的 Cache 中有指定存储块的副本。当一台处理机希望写某个共享块时,通过目录向有该块的副本的那些处理机“点对点”的发无效信号,使所有其它的副本无效。

4. 目录的方式( 1 )集中目录方式(中心目录)

1976年 Tang 提出。用一个中心目录存放所有 Cache

目录的副本,它能提供为保证一致性所需要的所有信息。

缺点:容量非常大,必须采用联想方法

来检查,冲突多,检索时间长。

( 2 )分布式目录1978年 Censier 和 Feautrier 提出。每个存储模块维护各自的目录,

目录中记录着每个存储块的当前信息。当前信息指明哪些 Cache 有该存储块的副本。

如下面的图:

D1

M1

D2

M2……

Dm

Mm

D1

M1

D2

M2……

Dm

Mm

互连网络

如果 C2读 miss ,这时 C1 中有 Dirty 的副本,则把它写回 memory ,内存再给C2 一个副本,变成 Valid 。

如果 C1 写命中,它告诉 memory控制器,控制器发无效命令给在 D1 的当前向量中有记录的所有 Cache 。

5. 三种目录 全映射( full map )目录:存放与

全局存储器中每个块有关的数据。系统中的每个 Cache 可以同时存储任何数据块的副本,即每个目录项包含 N 个指针( N 是处理机数目)。

有限( limited )目录:每个目录项有固定数目的指针(小于 N )。

链式( chained )目录:将目录分布到各个 Cache (其余同全映射目录)。

6.2.2 全映射目录 1.目录项结构

目录项中有 N 个处理机位(对应 N 台处理机)和一个重写位,如下图所示:

目录项:

重写位( 1位) 处理机位( N位)

处理机位表示相应处理机的 Cache block 的状态(存在或不存在)。

有一个也只有一个处理机位为“ 1” ,那么该处理机可以对该块进行写操作。

Cache 的每个块有两个状态位:有效位有效块是否允许写

有效1位

Cache 的状态位应该和目录项的状态一致。

1位允许写

目录项:

重写位( 1位) 处理机位( N位)

Cache 状态位:

2.目录的三种情况我们来看三台处理机(三个 Cache )的例子。( 1 ) C1 , C2 , C3 都没有单元 X 的副本

Shared Memory

x: c 0 0 0 data

C1

P1

C2

P2

C3

P3

( 2 ) C1 , C2 , C3同时请求 X单元的副本,这时目录项中的三个指针(处理机位)被置一,表示这些 Cache 中已有数据副本。

目录项的重写位被置为未写( c )状态,表示无一处理机允许写入该数据块。

Shared Memory

x: c 1 1 1 data

x:

P1

x:

P2

x:

P3

C1 C2 C3

( 3 ) C3请求对该块的写允许权时出现第( 3 )种情形,重写被置成 D 状态,且有一个指针指向 C3 的数据块。

Shared Memory

x: D 0 0 1 data

P1 P2

x:

P3

C1 C2 C3 data

3. 第二种情况第三种情况的过程 P3向 C3 发出写请求时:

( 1 ) C3检测出包含单元 X 的块是有效的,但 Cache 中的块允许位状态表示不允许处理机对该块进行写操作。

( 2 ) C3向包含单元 X 的存储器模块发出写请求,并暂停 P3工作。

( 3 )该存储器模块发出一个无效请求给 C1和 C2 (根据目录项的内容发几个无效信号)

( 4 ) C1 和 C2收到无效请求后,把相应位置 1 ,表示含单元 X 的块已无效,并发送一个回答信号给请求的存储器模块。

( 5 )存储器模块收到回答信号后,将重写位置 1 ,清除指向 C1、 C2 的指针,发出允许信号给 C3 。

( 6 ) C3收到写允许信号后,修改 Cache 的状态并激活处理机 P3 。

4. 目录所占空间 假设存储器大小和处理机台数 N 成

正比,即台数增加时,存储器的模块数也增加,所以数据块的个数也和 N 成正比。

另外目录项的大小也和处理机台数 N成正比,所以目录的总所占空间和 N2成正比。

即:目录项数 *项大小 = O ( N2)

太大不便于扩展。

6.2.3 有限目录 解决目录过大的问题。任意一个数据块在 Cache 中同时存在的

副本数量有一定限制,那么目录大小的增加不会超过一个常数。

符号表示法: DiriX

i:指针的数量。X 是 NB ,表示没有广播功能的方案。

DirNNB 表示没有广播功能的全映射方式 DiriNB ( i〈 N ):使用 i 个指针的没有广播功能的有限目录协议方式。 除了多于 i 个 Cache请求读一个特定的数据块的情况外,有限目录协议与全映射协议类似。

有限目录中指针不是每台处理机一位,而是针对处理机的二进制标识符进行编码,所以指针占 log2N位存储器。

在全映射方式中,每个处理机对应一个指针,所以 N 台处理机一共用了 N位,而有限目录中只用 log2N位,设 N =16 ,则 log216 = 4 。

如果允许两个指针,则需要 8位。 所以目录的存储容量为 O ( Nlog2N ),比全映射容易扩充。

如果多处理机系统中的处理机具有局部性,即在任何给定的时间间隔内,只有一小部分处理机访问某个给定的存储器字,那么有限目录足以应付这个小的工作处理机组了。

6.2.4 链式目录 用目录指针链来跟踪共享数据副本。

两种方法,单链法与双链法。 数据块共享副本的数目并无限制。

所占的空间及可扩展性同有限目录。 它的工作原理如下过程所示。

( 1 ) P1 要读单元 X ,则 memory 发送一份副本给 C1 ,同时送给 C1 一个链结束指针( CT : Chain Termination ),存储器也保存指向 C1 的指针。

Shared Memory

x: c data

P1 P2 P3

C1 C2 C3x: CTdata

( 2 )当 P2 要读单元 X 时,存储器送一份副本给 C2 ,同时送给 C2 一个指向 C1 的指针,存储器保存指向 C2 的指针。

Shared Memory

x: c data

P1 P2 P3

C1 C2 C3x: CTdata x: data

( 3 )重复以上步骤,所有 Cache 都得到单元X 的副本。

( 4 )如果 P3 要对单元 X 进行写操作,它必须沿着链发送一个数据无效信息。为了保证顺序一致性,在有链结束指针的处理机回答无效信号之前,存储器模块不给 P3 写允许权。

无效命令从一个 Cache 到一个 Cache顺序进行,不象 snoopy 协议那样同时发送给所有 Cache 。

( 5 )替换。假设 C1到 CN都有单元 X 的副本,还假设单元 X 和单元 Y 都映射到同一个高速缓存块(直接映射法)。如果处理机Pi要读单元 Y ,它首先必须把 X 所在的块从 Cache 中去掉,这可以采用两种方法:

1 )沿着链发一个消息使 Ci+1的指针指向 Ci-1,这样使 Ci从链中去掉(这时 Ci

中存放 Y 了)。 2 )使 Ci+1到 CN中的单元 X 无效

(这时 Ci中存放 Y 了)。

目录占用的存储容量:指针的尺寸以处理机数目的对数关系

增长(这和有限目录相同) log2N ,每个 Cache 块的指针数目与处理机个数无关。

解决 Cache 一致性的其它办法:( 1 )不允许有私有 Cache : Shared Ca

che 方案( 2 )可写的共享数据不存放在 Cache 中

第六章 Cache Coherence

6.1 Cache Coherence 问题6.2 监听总线协议6.3 基于目录的 Cache 一致性协议6.4 三种 Cache 一致性策略 6.4.1 采用 Write-Through策略的 Cache 6.4.2 采用 Write-Bach策略的 Cache 6.4.3 采用 Write-Once策略的 Cache

6.4 三种 Cache 一致性策略6.4.1 采用 Write-Through 策略的 Cache 数据块的两种状态:

有效和无效(指本地处理机相应数据块的状态,并非整个 Cache 的状态。 )

一致性的四种操作: Rr 和 Wr :其它处理机对该数据块(指在

其它处理机 Cache 中的数据块)的读写 Rl 和 Wl :是本地处理机对该数据块的读

写状态转移图如下:

有效 无效Rr

Wl

Rl

Rl, Wl

Wr

Rr, Wr

Cache 的数据块为无效时: 其它处理机的任何操作都不会影响本

地 Cache 的这种无效状态; 只有在本地处理机读或者写了数据

块中的某个数据,即对 Cache执行了 Read 或Write命令时,该数据块的状态才会成为“有效”。

Cache 的数据块为“有效”时: 本地处理机的读、写操作,不会影

响该状态; 其它处理机对存有相同内容的数据

块读,不会影响该状态; 其它处理机对存有相同内容的数据

块执行了写操作,该数据块状态变成无效。

6.4.2 采用 Write-Back 策略的 Cache 1. 数据块的三种状态

RO ( 只读)状态:表示整个系统中不止一个副本正确(例如一个在 Cache 中,一个在 memory 中)。

读 - 写状态:表示整个系统中,只有这个副本是正确的,其它都“过时”(即无效),这说明这个 Cache 的数据块至少被写过一次,但 memory 中的内容还没有被修改。

无效状态:“过时”数据。

2. 一致性的四种操作: Rr 和 Wr :其它处理机对该数据块(指

在其它处理机 Cache 中的数据块)的读写 Rl 和 Wl :是本地处理机对该数据块的

读写状态转移图如下:

3. 处于 RO 状态 本地读,远程读不会改变状态 本地写,使 ROR-W (这时只有

一个数据块正确) 远程写,使 RO 无效

无效

RO

Wl

Wr

Rl, RrW-R

4. 处于读 - 写状态

无效

RO

Rr

Wr

Rl,Wl W-R

本地读、写不会改变状态 远程读:这时只有这个 Cache 的数

据块是正确的,所以要有“写回”动作(即把内容写回 Memory ),另外还需要把正确的数据传递给远程读的处理机相应的 Cache 。

两个 Cache 的状态 RO

远程写:把本地处理机的数据块传递给远程处理机,远程处理机对数据块进行写操作,远程处理机对应的 Cache 状态变为RO ,而本地的 Cache 变为无效状态。

5. 处于无效状态

无效

RO

Wl

Rr,Wr

W-R

Rl

本地读:无效 RO

本地写:无效 WR (同时使其它拥有相同内容的数据块的 Cache 中相应的数据块的状态变成无效)

远程写、远程读:不影响状态的改变

6.4.3 采用 Write-Once 策略的 Cache 1. Write-Through 和 Write-Back 的缺点

Write-Through 策略的弱点是每次都要修改 memory ,所以总线流量增大;

Write-Back 策略的弱点是 Cache 写了一次后, Memory 中的内容不一致。

2. Write-Once 的基本思想 把 Write-Through 和 Write-Back 两

者的优点结合在一起:减少总线流量。 Cache 的第一次写采用 Write-Throug

h 策略(有一个以上的副本正确); Cache 而后的写采用 Write-Back 策

略(只有一份副本正确)。 为了区分是否是第一次写,把

“读 - 写”状态分成两个状态: Reserved和 Drity 。

3. 数据块的四种状态 有效状态( Valid ):相当于 Writ

e-Back里的“只读”,从共享存储器中读入的并与存储器副本一致的 Cache 数据块。

无效状态( Invalid ):在 Cache中找不到或 Cache 中的数据块内容与共享存储器中的内容不一致的 Cache 数据块。

保留状态( Reserved ):数据从共享存储器读入 Cache 只被写过一次。 Cache中的副本与共享存储器中的副本是一致的,并且它是正确的副本。

重写状态( Dirty ): Cache 中的数据块不止一次被写过,此时共享存储器中的数据块也不是正确的数据块,唯一正确的数据块在 Cache 中。

4. 如果处于“有效”状态

有效

保留

WrRl, Rr

无效

Wl

重写

( 1 )本地读 Rl ,不影响状态。( 2 )本地写 Wl (第一次写),采用 Write-Through 策略,这时要发无效命令给其它Cache 中相应的副本,并修改 memory 。

有效保留( 3 )远程写 Wr (不管是第几次写),远程 CPU会发无效命令:有效无效( 4 )远程读 Rr :不影响状态。

5. 如果处于“保留”状态

有效

保留

Wr

Rl

无效

Rr

重写 Wl

( 1 )本地读 Rl ,不影响状态。( 2 )远程读 Rr :这时 Cache 中只有处于保留状态的数据块是正确的,所以把该数据块送到远程 CPU 的 Cache 中(远程 Cache 中该数据块变为有效),本数据块状态已变为有效。

( 3 )本地写 Wl :第二次及以后的写,采取 Write-Back 策略,不修改 Memory ,状态由Reserved 变为 Dirty (这时只有一个副本有效),发无效命令给其它 Cache 的对应的副本,使 Memory 中的副本也无效。( 4 )远程写 Wr :远程 CPU会发无效命令,使状态由 Reserved 变为 Invalid 。

6. 如果处于“重写”状态

有效

保留

WrRr

无效

Rl , Wl

重写

( 1 )本地读 Rl :不影响状态。( 2 )本地写 Wl :不影响状态。( 3 )远程读 Rr :这时只有这个 Cache 的数据块是正确的,所以把该数据块发送给远程的 Cache ,远程 Cache 的数据块和本 Cache 中的数据块都变得有效。( 4 )远程写 Wr :远程 CPU 写后,发无效命令使状态由重写无效。

7. 如果处于“无效”状态

有效

保留

RlWr, Rr 无效

Wl

重写

( 1 )本地读 Rl :这时产生 Read-Miss ,设法找到有效的数据块调入 Cache :

如果系统存在处于有效,保留或重写状态的相应数据块,则将其调入本地 Cache

如果系统中不存在处于有效、保留或重写状态的相应数据块,则说明共享存储器中的数据块是正确的,直接从共享存储器读入即可。

读入后相应数据块进入“有效”状态。

( 2 )远程读 Rr :状态不变( 3 )本地写 Wl :一定是 Write-Miss ,系统首先把正确的内容调入 Cache ,然后写 Cache ,因为是第一次写,所以 Write-Through 策略,同时写 memory ,将本地 Cache 状态置为“保留”,同时将系统中其它相应的数据块置为“无效”( 4 )远程写 Wr :状态不变