计算机体系结构知识点汇总
第一章计算机体系结构的基本概念 1. 计算机系统结构的经典定义
程序员所看到的计算机属性,即概念性结构与功能特性。
(计算机组成:指计算机系统结构的逻辑实现。计算机实现:计算机组成的物理实现)
2. 计算机系统的多级层次结构:
1. 虚拟机:应用语言机器->高级语言机器->汇编语言机器->操作系统机器
2. 物理机:传统机器语言机器->微程序机器
3. 透明性:在计算机技术中,把这种本来存在的事物或属性,但从某种角度看又好像不存在的概念称为透明性。
4. 编译:先用转换程序把高一级机器上的程序转换为低一级机器上等效的程序 5. 解释:对于高一级机器上的程序中的每一条语句或指令,都转去执行低一级机器上的一段等效程序。
常见的计算机系统结构分类法有两种:Flynn 分类法、冯氏分类法(按系统并行度Pm:计算机系统在单位时间内能处理的最大二进制位数 )进行分类。
Flynn 分类法把计算机系统的结构分为4类:
单指令流单数据流(SISD)
单指令流多数据流(SIMD)
多指令流单数据流(MISD)
多指令流多数据流(MIMD)
IS 指令流,DS 数据流,CS (控制流),CU (控制部件),PU (处理部件),MM ,SM (表示存储器)
7. 计算机设计的定量原理:
1. 大概率事件优先原理(分配更多资源,达到更高性能)
2. Amdahl 定理:加速比:Sn=T0(加速前)
Tn(加速后)= 1−Fe +Fe/Se为可改进比例(可1
改进部分的执行时间/总的执行时间),Se 为部件加速比(改进前/改进后)
3. 程序的局部性原理:时间局部性:程序即将使用的信息很可能是目前使用的信息。空间局部性:即将用到的信息可能与目前用到的信息在空间上相邻或相近。
4. CPU 性能公式:
1. 时钟周期时间
2. CPI :CPI = 执行程序所需的时钟周期数/IC
3. IC(程序所执行的指令条数)
8. 并行性:计算机系统在同一时刻或者同一时间间隔内进行多种运算或操作。
同时性:两个或两个以上的事件在同一时刻发生。
并发性:两个或两个以上的事件在同一时间间隔内发生。
从处理数据的角度来看,并行性等级从低到高可分为:
1. 字串位串:每次只对一个字的一位进行处理。
最基本的串行处理方式,不存在并行性。
2.字串位并:同时对一个字的全部位进行处理,不同字之间是串行的。 开始出现并行性。
3. 字并位串:同时对许多字的同一位(称为位片)进行处理。
具有较高的并行性。
4. 全并行:同时对许多字的全部位或部分位进行处理。
最高一级的并行。
从执行程序的角度来看,并行性等级从低到高可分为:
1. 指令内部并行:单条指令中各微操作之间的并行。
2. 指令级并行:并行执行两条或两条以上的指令。
3. 线程级并行:并行执行两个或两个以上的线程。
通常是以一个进程内派生的多个线程为调度单位。
4. 任务级或过程级并行:并行执行两个或两个以上的过程或任务(程序段)
以子程序或进程为调度单元。
5. 作业或程序级并行:并行执行两个或两个以上的作业或程序。
提高并行性的技术途径:
1. 时间重叠
引入时间因素,让多个处理过程在时间上相互错开,轮流重叠地使用同一套硬件设备的各个部分,以加快硬件周转而赢得速度。
2. 资源重复
引入空间因素,以数量取胜。通过重复设置硬件资源,大幅度地提高计算机系统的性能。
3. 资源共享
这是一种软件方法,它使多个任务按一定时间顺序轮流使用同一套硬件设备。
3. 系列机
由同一厂家生产的具有相同系统结构、但具有不同组成和实现的一系列不同型号的计算机。
7. 存储程序原理的基本点:指令驱动
8. 冯·诺依曼结构的主要特点
1. 以运算器为中心。
2. 在存储器中,指令和数据同等对待。
指令和数据一样可以进行运算,即由指令组成的程序是可以修改的。
3. 存储器是按地址访问、按顺序线性编址的一维结构,每个单元的位数是固定的。
4. 指令的执行是顺序的
5. 指令由操作码和地址码组成。
6. 指令和数据均以二进制编码表示,采用二进制运算。
9. 软件的可移植性
一个软件可以不经修改或者只需少量修改就可以由一台计算机移植到另一台计算机上正确地运行。差别只是执行时间的不同。我们称这两台计算机是软件兼容的。
实现可移植性的常用方法:采用系列机、模拟与仿真、统一高级语言。 软件兼容:
向上(下)兼容:按某档机器编制的程序,不加修改就能运行于比它高(低)档的机器。
向前(后)兼容:按某个时期投入市场的某种型号机器编制的程序,不加修改地就能运行于在它之前(后)投入市场的机器。
向后兼容是系列机的根本特征。
兼容机:由不同公司厂家生产的具有相同系统结构的计算机。
第二章计算机指令集结构
1.CPU 中用来存储操作数的存储单元的主要类型:堆栈、累加器、通用寄存器组
2. 通用寄存器型指令集结构进一步细分为3种类型
寄存器-寄存器型(RR 型)
寄存器-存储器型(RM 型)
存储器-存储器型(MM 型)
3. 指令集结构的设计
主要考虑3个因素:速度、成本、灵活性
对指令集的基本要求:完整性、规整性、高效率、兼容性
4. 设计RISC 机器遵循的原则
1. 指令条数少而简单。只选取使用频度很高的指令,在此基础上补充一些最有用的指令。
2. 采用简单而又统一的指令格式,并减少寻址方式;指令字长都为32位或64位。
3. 指令的执行在单个机器周期内完成。(采用流水线机制)
4. 只有load 和store 指令才能访问存储器,其他指令的操作都是在寄存器之间进行。
(即采用load-store 结构)
5. 大多数指令都采用硬连逻辑来实现。
6. 强调优化编译器的作用,为高级语言程序生成优化的代码。
7. 充分利用流水技术来提高性能。
5. 指令由两部分组成:操作码、地址码
指令集的3种编码格式:变长编码格式、定长编码格式、混合型编码格式
第三章流水线技术
1. 流水线技术:把一个重复的过程分解为若干个子过程,每个子过程由专门的功能部件来实现。把多个处理过程在时间上错开,依次通过各功能段,这样,每个子过程就可以与其他的子过程并行进行。(流水线中的每个子过程及其功能部件称为流水线的级或段,段与段相互连接形成流水线。流水线的段数称为流水线的深度。)
2. CPU 流水线:
1. IF (取指令):根据PC 值从指令内存中读取一条指令,并且设置下一周期的PC 值。
2. ID (解码):根据操作码从指令中提取操作数。
3. EX (执行):执行指令
4. MEM (内存操作)
5. WB (回写):修改寄存器
3. 通过时间:第一个任务从进入流水线到流出结果所需的时间。
排空时间:最后一个任务从进入流水线到流出结果所需的时间。
4. 流水线分类:
1. 单功能流水线与多功能流水线
单功能流水线:只能完成一种固定功能的流水线。
多功能流水线:流水线的各段可以进行不同的连接,以实现不同的功能。
2. 静态流水线与动态流水线
静态流水线:在同一时间内,多功能流水线中的各段只能按同一种功能的连接方式工作。
动态流水线:在同一时间内,多功能流水线中的各段可以按照不同的方式连接,同时执行多种功能。
3. 线性流水线与非线性流水线
线性流水线:流水线的各段串行连接,没有反馈回路。数据通过流水线中的各段时,每一个段最多只流过一次。
非线性流水线:流水线中除了有串行的连接外,还有反馈回路。
5. 表示方法:
1. 连接图:
Figure 1多功能流水线,可执行乘与加
2. 时空图:
Figure 2静态: 加法完成后再进行乘法。动态:不要求加法完成
6. 性能指标:
1. 吞吐率:在单位时间内流水线所完成的任务数量或输出结果的数量。
TP n
K
2. 加速比:完成同样一批任务,不使用流水线所用的时间与使用流水线所用的时间之比。
S =T s k
3. 效率:流水线中的设备实际使用时间与整个运行时间的比值,即流水线设备的利用率。
E =n
+- n个任务实际占用的时空区/k个段总的时空区
n
Tk=(k+n-1) △tE=TP△t 4. 当流水线各段时间相等时,流水线的效率与吞吐率成正比。 TP =
5. 流水线的效率是流水线的实际加速比S 与它的最大加速比k 的比值。
S E=S=nk
从时空图上看,效率就是n 个任务占用的时空面积和k 个段总的时空面 之比。
7. 流水线相关:
1. 数据相关:数据相关具有传递性,反映了数据的流动关系如果两条指令使用相同的名,但是它们之间并没有数据流动,则称这两条指令存在名相关。
2. 名相关:
反相关:如果指令j 写的名与指令i 读的名相同,则称指令i 和j 发生了反相关。
指令j 写的名=指令i 读的名
输出相关:如果指令j 和指令i 写相同的名,则称指令i 和j 发生了输出相关。
指令j 写的名=指令i 写的名
3. 控制相关:控制相关是指由分支指令引起的相关
8. 流水线冲突:
1. 结构冲突:因硬件资源满足不了指令重叠执行的要求而发生的冲突。
2. 数据冲突:当指令在流水线中重叠执行时,因需要用到前面指令的执行结果而发生的冲突。
3. 控制冲突:流水线遇到分支指令和其他会改变PC 值的指令所引起的冲突。
9. 解决流水线冲突: 1. 数据冲突有:
写后读冲突(RAW )
在 i 写入之前,j 先去读。 j 读出的内容是错误的。对应于数据相关
写后写冲突(WAW )
在 i 写入之前,j 先写。最后写入的结果是 i 的。错误!对应于输出相关
读后写冲突(WAR )
在 i 读之前,j 先写。i 读出的内容是错误的!由反相关引起。
定向技术:在某条指令产生计算结果之前,其他指令并不真正立即需要该计算结果,如果能够将该计算结果从其产生的地方直接送到其他指令需要它的地方,那么就可以避免停顿。
流水线互锁机制,插入“暂停”。
作用:检测发现数据冲突,并使流水线停顿,直至冲突消失。
依靠编译器解决数据冲突
让编译器重新组织指令顺序来消除冲突,这种技术称为指令调度或流水线调度。
MIPS
若检测到RAW 冲突,流水线互锁机制必须在流水线中插入停顿,并使当前正处于IF 段和ID 段的指令不再前进。
分支指令的条件测试和分支目标地址计算在EX 段完成,对PC 的修改在MEM 段完成。
一条指令的执行过程分为以下5个周期:
1. 取指令周期(IF )
IR ← Mem[PC] 。
PC 值加4。(假设每条指令占4个字节)
2. 指令译码/读寄存器周期(ID )
译码。
用IR 中的寄存器编号去访问通用寄存器组,读出所需的操作数。
3. 执行/有效地址计算周期(EX )不同指令所进行的操作不同:
存储器访问指令:ALU 把所指定的寄存器的内容与偏移量相加,形成用于访存的有效地址。
寄存器-寄存器ALU 指令:ALU 按照操作码指定的操作对从通用寄存器组中读取的数据进行运算。
寄存器-立即数ALU 指令:ALU 按照操作码指定的操作对从通用寄存器组中读取的第一操作数和立即数进行运算。
分支指令:ALU 把偏移量与PC 值相加,形成转移目标的地址。同时,对在前一个周期读出的操作数进行判断,确定分支是否成功。
4存储器访问/分支完成周期(MEM )
该周期处理的指令只有load 、store 和分支指令。其他类型的指令在此周期不做任何操作。
load 和store 指令
load 指令:用上一个周期计算出的有效地址从存储器中读出相应的数据。 store 指令:把指定的数据写入这个有效地址所指出的存储器单元。
分支指令
分支“成功”,就把转移目标地址送入PC 。
分支指令执行完成。
5. 写回周期(WB )
ALU 运算指令和load 指令在这个周期把结果数据写入通用寄存器组。 ALU 运算指令:结果数据来自ALU 。
load 指令:结果数据来自存储器系统。
相关:两条指令之间存在某种依赖关系。
流水线冲突是指对于具体的流水线来说,由于相关的存在,使得指令流中的下一条指令不能在指定的时钟周期执行。
第四章:向量处理机
1. 在流水线处理机中,设置向量数据表示和相应的向量指令,称为向量处理机。(不具有向量数据表示和相应的向量指令的流水线处理机,称为标量处理机。)
2. 处理方式:
1. 横向(水平) 处理方式
向量计算是按行的方式从左到右横向地进行。
组成循环程序进行处理。i
数据相关:N 次 功能切换:2N 次
不适合于向量处理机的并行处理。
2. 纵向 (垂直) 处理方式
向量计算是按列的方式从上到下纵向地进行。
两条向量指令之间:数据相关:1次 功能切换:1次 对处理机结构的要求:存储器-存储器结构
3. 纵横 (分组) 处理方式又称为分组处理方式。 把向量分成若干组,组内按纵向方式处理,依次处理各组。 对处理机结构的要求:寄存器-寄存器结构
3. 提高向量处理机性能的方法:
1. 设置多个功能部件,使它们并行工作。
2. 采用链接技术,加快一串向量指令的执行。
3. 采用循环开采技术,加快循环的处理。(分段开采:当向量长度大于向量寄存器的长度,将向量分为长度相等的段)
4. 采用多处理机系统,进一步提高性能。
4. 链接特征:具有先写后读相关的两条指令,在不出现功能部件冲突和源向量冲突的情况下,可以把功能部件链接起来进行流水处理,以达到加快执行的目的。 链接特性的实质:把流水线定向的思想引入到向量执行过程的结果。
5. 向量处理机性能的主要参数:
1. 一行向量长度为n 指令的执行时间Tvp=Ts+Te+(n−1) Tc
(
Ts为向量处理部件建立的时间,Te为流水线的通过时间,Tc为流水线的时钟周期时间。
2. 每秒多少个浮点运算结果(MFLOP 或一个浮点运算的时间)
3. 一组向量指令的处理时间
4. 向量流水线的最大性能R ∞
5. 半性能向量长度n1/2
第5章指令级并行
这种指令之间存在的潜在并行性称为指令级并行。
指令级并行度ILP :指令中存在的一种并行性,计算机可以并行执行两条及以上的指令。开发ILP 的途径有两种:1. 资源重复(主要基于硬件的动态开发方法) 2. 流水线技术。(基于软件的静态开发方法)
1. 流水线处理机的实际CPI
理想流水线的CPI 加上各类停顿的时钟周期数:
CPI流水线 = CPI理想 + 停顿结构冲突 + 停顿数据冲突 + 停顿控制冲突
理想CPI 是衡量流水线最高性能的一个指标。
动态分支预测:在程序运行时,根据分支指令过去的表现来预测其将来的行为。
2. 分支历史表BHT (Branch History Table)或分支预测缓冲器(Branch Prediciton Buffer)
最简单的动态分支预测方法。
用BHT 来记录分支指令最近一次或几次的执行情况(成功或不成功),并据此进行预测。
BTB
目标:将分支的开销降为 0
方法:分支目标缓冲
将分支成功的分支指令的地址和它的分支目标地址都放到一个缓冲区中保存起来,缓冲区以分支指令的地址作为标识。
这个缓冲区就是分支目标缓冲器(Branch-Target Buffer,简记为BTB ,或者Branch-Target Cache)。
3. 开发ILP 的两种方法:
1. 记分牌动态调度算法
目标:在没有结构冲突时,尽早执行没有数据冲突的指令(指令执行时可以跨越,但是在输出段都是按序流出的),实现每个时钟周期执行一条指令。
记分牌硬件的实现:1. 记分牌中维护着三张表,分别记录指令的执行状态、寄存器的状态、功能部件状态、数据相关关系。 2.它把流水线的译码段ID 分为了两个段:流出和读操作数。
记分牌流水线处理步骤:
1)流出(ID )
如果当前流出指令所需的功能部件空闲(无结构冲突),并且其它执
行指令的目的寄存器与该指令的不同(无WAW 冲突),记分牌就向功
能部件流出该指令,并修改记分牌内部的记录表。
2)读操作数
(ID)
监测源操作数的可用性(前面已流出并且正在执行的指令都不对该寄
存器进行写操作),如果数据可用,它就通知功能部件从寄存器中读
出源操作数并开始执行
3)执行(EX )
取到操作数则开始执行,产生出结果后,就通知记分牌它已经执行完
成
4)写结果(WB )
若WAR 冲突已经消失,记分牌则通知功能部件把结果写入目的寄存器
记分牌三张表:
1)指令状态表
2)功能部件状态表,每个部件有一项,每一项由以下9个字段组成: Busy :忙标志,指出功能部件是否忙。初值为“no ”;
Op :该功能部件正在执行或将要执行的操作;
Fi :目的寄存器编号;
Fj ,Fk :源寄存器编号;
Qj ,Qk :指出向源寄存器Fj 、Fk 写数据的功能部件 ;
Rj ,Rk :标志位,“yes ”表示Fj ,Fk 中的操作数就绪且还未被
取走。否则就被置为“no ”。
3)结果寄存器状态表:指出哪个功能部件将结果写入寄存器
2. Tomasulo 动态调度算法:
1. 基本思想:①记录和监测指令相关,操作数一旦就绪就立即执行,把发生RAW 冲突的可能性减小到最小。②通过寄存器换名来消除WAR 冲
突和WAW 冲突
2. 基本结构:
(1) 保留站:保存已经流出并等待到本功能部件执行的指令,在保
留站通过流出逻辑来完成的寄存器换名(顺序流出,乱序执行 )
(2) 公共数据总线(CDB ):所有功能部件计算结果都送到CDB ,由
它把这些结果直接送到各个需要该结果的地方(乱序完成)
(3) Load/store缓冲器:作用是①存放计算有效地址的分量。②记
录正在进行的load 访存,等待存储器的响应/保存正在进行
store 访存的目标地址,等待存储数据的到达。③保存完成了
的load 的结果(从存储器取来的数据)/保存该store 的地址
和数据
3. 指令执行步骤:
1)流出
2)执行
3)写结果
2. 基本程序块:一段除了入口和出口以外不包含其他分支的线性代码段。
3. 循环级并行:使一个循环中的不同循环体并行执行。
4. 程序顺序:由源程序确定的在完全串行方式下指令的执行顺序。
保持异常行为是指:无论怎么改变指令的执行顺序,都不能改变程序中异常的发生情况。
数据流:指数据值从其产生者指令到其消费者指令的实际流动。
静态调度
依靠编译器对代码进行静态调度,以减少相关和冲突。
它不是在程序执行的过程中、而是在编译期间进行代码调度和优化。
通过把相关的指令拉开距离来减少可能产生的停顿。
动态调度
在程序的执行过程中,依靠专门硬件对代码进行调度,减少数据相关导致的停顿
不精确异常:当执行指令i 导致发生异常时,处理机的现场(状态)与严格按程序顺序执行时指令i 的现场不同。
精确异常:如果发生异常时,处理机的现场跟严格按程序顺序执行时指令i 的现场相同。
记分牌算法和Tomasulo 算法是两种比较典型的动态调度算法。
Tomasulo 算法基本思想
1. 核心思想
记录和检测指令相关,操作数一旦就绪就立即执行,把发生RAW (read and write
)
冲突的可能性减少到最小;
通过寄存器换名来消除WAR 冲突和WAW 冲突。
更多地依赖于硬件
寄存器换名可以消除WAR 冲突和WAW 冲突。
寄存器换名是通过保留站和流出逻辑来共同完成的。
Tomasulo 算法具有以下两个特点:
冲突检测和指令执行控制是分布的。
每个功能部件的保留站中的信息决定了什么时候
指令可以在该功能部件开始执行。
计算结果通过CDB 直接从产生它的保留站传送到所有需要它的功能部件,而不用经过寄存器。
每个保留站有以下几个字段:
Op :要对源操作数进行的操作。
Qj ,Qk :将产生源操作数的保留站号。
等于0表示操作数已经就绪且在Vj 或Vk 中,或者不需要操作数。
Vj ,Vk :源操作数的值。
对于每一个操作数来说,V 或Q 字段只有一个有效。
对于load 来说,Vk 字段用于保存偏移量。
Busy :为“yes ”表示本保留站或缓冲单元“忙”。
A :仅load 和store 缓冲器有该字段。开始是存放指令中的立即数字段,地址计算后存放有效地址。
循环展开和指令调度
增加指令间并行性最简单和最常用的方法
开发循环级并行性——循环的不同迭代之间存在的并行性。
在把循环展开后,通过重命名和指令调度来开发更多的并行性。
编译器完成这种指令调度的能力受限于两个特性:
程序固有的指令级并行性;
流水线功能部件的执行延迟。
循环展开和指令调度时要注意以下几个方面:
保证正确性。
在循环展开和调度过程中尤其要注意两个地方的正确性:循环控制,操作数偏移量的修改。
注意有效性。
只有能够找到不同循环体之间的无关性,才能有效地使用循环展开。
使用不同的寄存器。
(否则可能导致新的冲突)
删除多余的测试指令和分支指令,并对循环结束代码和新的循环体代码进行相应的修正。 注意对存储器数据的相关性分析
例如:对于load 指令和store 指令,如果它们在不同的循环迭代中访问的存储器地址是不同的,它们就是相互独立的,可以相互对调。
注意新的相关性
由于原循环不同次的迭代在展开后都到了同一次循环体中,因此可能带来新的相关性。
第九章动态互联网络
互联网络是一种开关元件按照一定的拓扑结构和控制方式构成的网络,用来实现计算机系统中节点之间的相互连接
动态网络分类:总线网络、多级互联网络、交叉开关网络
互联网络三要素:互联结构、开关和控制方式
1. 基本互联函数:
1)交换函数:二进制地址编码中第k 位互反的输入端与输出端之间的连接。
2)均匀洗牌网络。
3)PM2I 函数:PM2+1 X = X+2i modN
PM2−1 X = X−2i modN
2. 互联网络的结构参数:
1) 网络规模N :指互联网络中节点的个数。它表示该网络所能连接的部件的
数量。网络规模越大,这个互联网络的连接能力越强
2) 节点度d :指互联网络中节点所连接的边数,包括入度,出度。
3) 节点距离:从一个节点到另一个节点终止所需要跨越边数的最小值
4) 网络直径D :指网络中任意两个节点之间距离的最大值(网络直径越小越
好)
5) 等分宽度b (主要反映网络的最大流量):把由N 个节点构成的网络切成
节点数相同的(N/2)的两半,在各种切法中,沿切口边数的最小值称为该网络的等分宽度。而线等分宽度位B=b×ω(通道宽度,单位是位数)
6) 对称性:从任意节点看,网络结构都是相同的
3. 静态互联网络:各节点之间有固定的连接通路,且在运行中不能改变的网络。
1) ILLIAC IV 网:采用PM2±0和PM2±n/2构成其互连网络,实现各处理单
元之间的上下左右互连 。
2) 带环立方体CCC
带环3-立方体
一个带环n-立方体由N = 2n 个结点环构成,每个结点环是一个有n 个结点的环,网络规模(结点总数) 为n*2n个。直径通常为D=2n,结点度为3,等分宽度b=N/(2k),对称。
4. 动态互联网络:由交换开关组成,可按运行程序的要求动态改变连接状态的
网络
1) Omega 网络(相当于一个banyan 网)
5. 路由选择和消息传递方式:
1)线路交换:传递之前建立一条到目的节点的物理通路然后交换
2)包交换:
1)存储转发:
2)虚拟直通(接收寻径的报头即可做出下一跳的判断,输出链路空闲则
不用存储直接转发)
3)虫蚀方式:将信息切割成片(头片->寻径信息和包序列号,数据片)
6. 流量控制策略:
1. 包冲突的解决:两个相邻节点之间传送一个片要满足三个条件:①源缓冲区已存有该片②通道已分配好③接收缓冲区准备接收该片
2. 确定性寻径
第10章多处理机
MIMD(多指令流多数据流) :一块芯片上多个处理器
MIMD 计算机的分类:集中式共享存储器结构。分布式存储器多处理机
多处理机分类
◆ 紧耦合系统 \ 松耦合系统
◆ 同构型 \ 异构型多处理机系统。
◆ 按系统组成结构
并行向量处理机(PVP)
对称多处理机(SMP)
大规模并行处理机(MPP)
分布共享存储器多处理机(DSM)
工作站机群(COW)
1. Cache 的一致性问题:由于缓存存在于cpu 与内存中间,所以任何外设对内存的修改并不能保证cache 中也得到同样的更新,同样处理器对缓存中内容的修改也不能保证内存中的数据 得到更新。这种缓存中数据与内存中数据的不同步和不一致现象将可能导致使用DMA 传输数据时 或 处理器运行自修改代码时产生错误。
Cache 的一致性就是直Cache 中的数据,与对应的内存中的数据是一致的。
2. Cache 一致性协议:
1)目录式协议:物理存储器中数据块的共享状态被保存在一个称为目录的地方。
2)监听式协议:当物理存储器中的数据块被调入Cache 时,其共享状态信息与该数据块一起放在该Cache 上。当某个Cache 要访问存储器时,它会把请求放到总线上广播出去,其它Cache 通过监听总线来判断是否要更新