408 知识点笔记

您所在的位置:网站首页 925号存储器 408 知识点笔记

408 知识点笔记

2024-07-16 00:22| 来源: 网络整理| 查看: 265

3 存储器层次结构

【随机存取】

随机存取就好像素数可以通过下标直接访问需要的元素。ROM 和 RAM 都是采用随机方式访问信息,ROM 只能进行取,RAM 可取可存

【存储器的分类】

在这里插入图片描述 关于此图,做如下几点注释:

CDROM 用户只能读出不能修改或写入新的内容,非常类似 ROM 的特性,故称只读型光盘为 CDROM,但其本质与 ROM 不同Flash 从原理上讲仍属于 ROM,是 EEPROM 的改进产品

【闪存(Flash Memory)】

信息可读可写,但是读写速度是不一样的:闪存必须在空白区域写,如果目标区域已经有数据,先擦除后写,而读不必如此存储单元为 MOS 管,是半导体存储器断点信息不丢失,是非易失性存储器随机访问,可替代外部存储器

【相联存储器】

根据存储内容(不需要地址)来进行存取的存储器称为相联存储器(即 TLB)

【RAM / ROM】

1)RAM

RAM 的缺点是断电信息丢失,分静态 RAM 和动态 RAM,静态 RAM 做 Cache,动态 RAM 做主存,都是易失性 RAM

2)ROM

断点后内容可保留,一般把一些固定的、不变的程序存放在这里,ROM 和 RAM 一起构成了主存

3)一些总结

存放系统程序或各类常数使用 ROM 芯片,存放用户程序应该选用 RAM 芯片SRAM 常用作 Cache,DRAM 和 ROM 用作主存

【存储容量】

记住这个公式, 存 储 容 量 = 存 储 字 数 × 字 长 存储容量 = 存储字数 \times 字长 存储容量=存储字数×字长

【带宽的概念】

带宽衡量数据传输速度,表示单位时间内存取的信息量

△☼▽ (3 通道存储总线)

在这里插入图片描述

分析:B,总带宽为 3×8×1333MB/s ≈ 32GB/s

△☼▽ 在这里插入图片描述

分析:每一个时钟周期为 1 / 50 M H z = 20 n s 1/50MHz = 20ns 1/50MHz=20ns (1)一次读所花费的时间为 ( 1 + 3 + 8 ) × 20 n s = 240 n s (1+3+8)\times20ns = 240ns (1+3+8)×20ns=240ns,故存储器的带宽为 32 B 240 n s ≈ 133.3 M B / s \frac{32B}{240ns}\approx133.3MB/s 240ns32B​≈133.3MB/s(2)同理 32 B ( 1 + 2 + 8 + 3 ) × 20 n s ≈ 114.3 M B / s \frac{32B}{(1+2+8+3)×20ns}\approx114.3MB/s (1+2+8+3)×20ns32B​≈114.3MB/s(3) 32 B 0.65 × 240 n s + 0.35 × 280 n s ≈ 126.0 M B / s \frac{32B}{0.65\times240ns+0.35\times280ns}\approx126.0MB /s 0.65×240ns+0.35×280ns32B​≈126.0MB/s

【SRAM / DRAM】

1)半导体存储芯片的基本结构 在这里插入图片描述 考察芯片引出线:地址线 + 数据线 + 1 根读写控制线 + 1 根控制线

△☼▽

在这里插入图片描述

分析:D,数数据线 8 根,地址线 9 根,外加 1 根读写控制线和 1 根片选线,一共 19 根

2)半导体存储芯片的译码驱动方式

① 线选法(单译码)

一个编码结果选中一行

(算地址线)假设该矩阵有 N N N 行,然后就可以通过公式 ⌈ l o g 2 N ⌉ \left \lceil log_2N \right \rceil ⌈log2​N⌉ 算出地址线所需要的根数(算译码输出线)如果输入线有 n n n 根,则译码需要 2 n 2^n 2n 根输出线 在这里插入图片描述

② 重合法(双译码)

需要行地址线和列地址线选中存储矩阵中的一个元素

(算地址线)如果存储矩阵是 N × N N\times N N×N,则一共需要 2 ⌈ l o g 2 N ⌉ 2\left \lceil log_2N \right \rceil 2⌈log2​N⌉ 根地址线

在这里插入图片描述 ③ 千万注意,DRAM 采用地址复用技术,行列地址分两次传送

△☼▽(2018年真题)

在这里插入图片描述

分析: C,DRAM 采用行列地址复用技术,我们应使得行列差值不可太大,排除 A、D 选项,看 C、D 选项,地址线仅需要 6 根(因为地址复用,只用取行或列所需地址线的最大值,都是 64);其次,DRAM 的刷新按行进行,要求减小刷新开销,即行数尽量小

3)一些总结内容

RAM 是易失性 RAM,但不意味只要电源不断存储信息就不会丢失,DRAM 需要定期刷新SRAM 的读出是非破坏性读出,DRAM 的读出是破坏式读出,因此读后需要再生

【刷新】

1)集中刷新

(认真分析下面的例子,即是考察集中刷新的一个角度)

假设电容上的电荷基本只能维持 2 ms,在 2ms 内必须要刷新一次。假设存储周期为 0.5us,那么在一个刷新周期里有 4000 个存储周期。假设该存储矩阵有 32 行,则对 32 行集中刷新需要 16us,刷新的时候是不能进行读/写操作的,于是可以计算出死区的占用比例为 32/4000=0.8%

2)分散刷新

扩展定义,

存 储 周 期 = 读 或 写 周 期 + 刷 新 一 行 的 时 间 存储周期 = 读或写周期 + 刷新一行的时间 存储周期=读或写周期+刷新一行的时间

此时,存储周期为读或写周期的两倍,此处刷新一行的时间又看成是等于存储周期的

在这里插入图片描述

由上可知,分散刷新将存储器的存储周期人为地延长了,因此严重降低了系统的速度

3)异步刷新

对于 128x128 的存储芯片,如果要在 2ms 内刷新一遍,即每隔 15.6us(2000us/128≈15.6us)刷新一行,而每行刷新的时间仍然等于一个读/写周期

异步刷新的死时间为一个读/写周期

△☼▽

在这里插入图片描述

分析:刷新都是从单个芯片的存储矩阵入手(刷新按行进行,且整个存储器中的所有芯片的相同行同时进行刷新) 1) 2000 u s / 64 = 31.25 u s 2000us/64=31.25us 2000us/64=31.25us,可取相邻两行之间的刷新为 31.25 u s 31.25us 31.25us 2)采用集中刷新方式,存储器刷新一遍最少用 64 64 64 个周期,死区时间为 0.5 u s × 64 = 32 u s 0.5us\times64=32us 0.5us×64=32us,死时间率为 32 u s / 2000 u s × 100 % = 1.6 % 32us/2000us\times100\%=1.6\% 32us/2000us×100%=1.6%

【再生和刷新】

再生: 随机的,某个存储单元只有在破坏性读出之后才需要再生,一般是按存储单元进行

刷新: 定时的,许多记忆单元长期未被访问而需要刷新,以存储体矩阵中的一行为单位进行

(注意以存储体矩阵中的一行为单位 ,如芯片内部采用 128×128 的存储阵列,问所有存储单元刷新一遍需要多少个存储周期,即 128 个存储周期)

【存储周期、存取时间和储存时间】

存储周期: 连续两次启动同一存储所需的最小时间间隔

存取时间: 从上一次启动存储器到完成读写操作为止,一般小于存储周期,包括读出时间和写入时间

存储时间: 即写入时间

【图形显示下的存储器容量计算】

下题的第一小问即为此类计算问题的理论所在

△☼▽

在这里插入图片描述

分析:(1)在图形方式中,每个屏幕上的像素都是由存储器中的存储单元的若干比特指定其颜色。每个像素所占用的内存位数决定于能用多少种颜色表示一个像素。每个像素的颜色数 m m m 和每个像素所占用存储器的比特数 n n n 之间的关系是: n = l o g 2 m n = log_2m n=log2​m(2)由于显示缓冲存储器的容量应该按照最高灰度(65536色)计算,故容量为 640 × 480 × l o g 2   65536   b i t 8 = 614400   B \frac{640\times480\times log_2\ 65536\ bit}{8}=614400\ B 8640×480×log2​ 65536 bit​=614400 B

【芯片】

1)存储基元

(问一个 a × b a\times b a×b 的芯片有多少存储基元)

对 64 K × 8 64K\times8 64K×8 位的芯片,该芯片的存储基元(同基本单元电路)总数为 512 K = 2 19 512K = 2^{19} 512K=219

2)地址线和数据线

设地址线为 a a a,数据线为 b b b,则片容量为 2 a × b 2^a\times b 2a×b,在片容量固定的情况下,片字数越少,片字长越长,引脚数越多(下面一道题会解释这句话)

△☼▽

在这里插入图片描述

分析:存储基元总数 = 64 K × 8 位 = 512 位 = 2 19 位 64K\times8位=512位=2^{19}位 64K×8位=512位=219位 要求 2 a × b = 2 19 2^a\times b=2^{19} 2a×b=219, a = 19 , b = 1 , 总 和 为 20 a=19,b=1,总和为 20 a=19,b=1,总和为20 a = 18 , b = 2 , 总 和 为 20 a=18,b=2,总和为 20 a=18,b=2,总和为20 a = 17 , b = 4 , 总 和 为 21 a=17,b=4,总和为 21 a=17,b=4,总和为21 a = 16 , b = 8 , 总 和 为 24 a=16,b=8,总和为 24 a=16,b=8,总和为24 ⋯ \cdots ⋯ 令 F ( a ) = a + b = a + 2 19 − a F(a)=a+b=a+2^{19-a} F(a)=a+b=a+219−a, F ′ ( a ) = 1 − 2 19 − a l n 2 F'(a)=1-2^{19-a}ln2 F′(a)=1−219−aln2,当 1 ⩽ a ⩽ 18 1\leqslant a\leqslant 18 1⩽a⩽18 时, F F F 单减,故 F m i n = F ( 19 ) = F ( 18 ) F_{min}=F(19)=F(18) Fmin​=F(19)=F(18) 故,有两种方案:地址线 19 根,数据线 1 根;或地址线 18 根,数据线 2 根

【片选信号】

1)片选信号的产生

以一道题为例,地址线 A15 ~ A0,若用 16K × 1 位芯片构成 64KB 存储器,由地址码 A15, A14 译码产生片选信号

为什么?

用 16K × 1 位芯片构成 64KB 存储器需要 4×8 片芯片,每 8 片芯片为一组,总共 4 组,需要两位做片选信号,64K = 216,16 位地址,16K = 214,A13 ~ A0 为每个模块提供地址,A15 ~ A14 通过 2-4 译码器产生片选信号

2)片选信号的确定

注意两个点,

是先编址 ROM 还是先编址 RAM字扩展占据一个片选信号,位扩展一组占据一个片选信号

【芯片地址】

1)没有规定片选信号

以 8 片 2K × 4 位芯片组成一个 8K × 8 位存储器为例,分 4 组,每 2 片 2K × 4 构成 1 片 2K × 8,2K = 211,8K = 213,选取第 12、13 位做片选信号,于是,

在这里插入图片描述

△☼▽(模拟题一)

在这里插入图片描述

分析:C,具体分析如下 在这里插入图片描述

2)规定片选信号

△☼▽

在这里插入图片描述

分析: (1)每一组芯片的容量为 1K × 8 位,即 1KB,故需要 10 根地址线,地址范围为 000H ~ 3FFH (2)存储器容量为 4KB,有 12 位,由图可知,规定各组芯片的片选端由 A15 和 A14 进行译码,芯片组内地址线为 A9 ~ A0,A13 ~ A10 空闲,假设 A13 ~ A10 全为 0,于是 在这里插入图片描述 第一组的寻址范围为 0000H ~ 03FFH 第二组的寻址范围为 4000H ~ 43FFH 第三组的寻址范围为 8000H ~ 83FFH 第四组的寻址范围为 C000H ~ C3FFH 3)由于 A3 ~ A10 没有参与译码(部分译码),故会产生地址重叠现象

【全译码/部分译码】

1)全译码法

全译码法将除片内寻址外的全部高位地址线都作为地址译码器的输入,译码器的输出作为各芯片的片选信号,将它们分别接到存储芯片的片选端,以实现对存储芯片的选择

全译码法的优点是:每片芯片的地址范围是唯一确定的,而且是连续的,也便于扩展,不会产生地址重叠的存储区,但全译码法对译码电路要求较高

2)部分译码法

所谓部分译码法即用除片内寻址外的高位地址的一部分来译码产生片选信号,部分译码法会产生地址重叠

【寻址范围】

1) 寻 址 范 围 = 存 储 器 容 量 一 地 址 大 小 寻址范围 = \frac{存储器容量}{一地址大小} 寻址范围=一地址大小存储器容量​,注意是按字节编址还是按字编址

2)若知地址反推存储器容量

△☼▽

在这里插入图片描述

分析:0CBFFFH + 1 - 0A4000H = 28000H = 0010 1000 0000 0000 0000 = 217+215 = 160KB

3)最高可用地址

在求最高可用地址的时候,需要注意存储地址起始单元(如下面一题)

△☼▽ 在这里插入图片描述

分析:BFFFH,32KB = 215B,若 32KB 的存储地址起始单元为 0000H,则其对应的范围为 7FFFH,现首地址为 4000H,最高可用地址为 7FFFH + 4000H = BFFFH

【地址寄存器、数据寄存器位数】

注意两个点:

地址寄存器的位数只和主存空间大小联系按字/半字/字节编址,三者的寻址范围是不一样的

△☼▽ (2011年真题) 在这里插入图片描述

分析:D,MAR 应保证访问到整个主存地址空间,反过来,MAR 的位数决定了主存地址空间的大小,所以应该看主存地址空间大小 65MB,而不是 32MB

△☼▽ 在这里插入图片描述

分析: 1)若按字节编址,1MB = 220 × 8bit,地址寄存器为 20 位,数据寄存器为 8 位,编址范围为 00000H~FFFFFH 2)若按半字编址,1MB = 219 × 16bit,地址寄存器为 19 位,数据寄存器为 16 位,编址范围为 00000H~7FFFFH 3)若按字编址,1MB = 218 × 32bit,地址寄存器为 18 位,数据寄存器为 32 位,编址范围为 00000H~3FFFFH

【连芯片】

△☼▽ (最简单的字扩展加位扩展)

在这里插入图片描述

分析: 64 K × 32 16 K × 16 = 4 × 2 \frac{64K\times32}{16K\times16}=4\times2 16K×1664K×32​=4×2, 16 K = 2 14 16K=2^{14} 16K=214, 64 K = 2 16 64K=2^{16} 64K=216 在这里插入图片描述

△☼▽ (规定地址空间) 在这里插入图片描述

分析: 32 K × 8 16 K × 8 = 2 \frac{32K\times8}{16K\times8}=2 16K×832K×8​=2, 16 K = 2 14 16K=2^{14} 16K=214,故第一片 RAM 芯片的地址范围为 8000 H ∼ B F F F H 8000H \sim BFFFH 8000H∼BFFFH(1000 0000 0000 0000 ~ 1011 1111 1111 1111),第二片 RAM 芯片的地址范围为 C 000 H ∼ F F F F H C000H \sim FFFFH C000H∼FFFFH(1100 0000 0000 0000 ~ 1111 1111 1111 1111),因此两片 RAM 的 A 15 , A 14 A_{15},A_{14} A15​,A14​ 分别为 10 和 11;另,ROM 芯片不要连接在 R/W 信号线上,RAM 芯片一定要连 在这里插入图片描述

【双口 RAM】

具有两组相互独立的地址线、数据线和读/写控制线。双口 RAM 存在的一个问题是很有可能在同一时间两个端口同时操作存储器的同一存储单元,这样就发生了冲突。为解决此问题,特地设置了 BUSY标志,当某存储单元被某端口访问时,就对另外一个端口设置 BUSY 延迟,另一个端口就无法访问该存储单元

在这里插入图片描述

双端口存储器可以同时对同一区间、同一单元进行读操作。但是,只要涉及写操作,就不能同时进行

【单字多体存储器】

要使单字多体存储器很好发挥作用,需要一个前提:指令和数据在主存内必须连续存放。一旦遇到转移指令,或者操作数不能连续存放,这种方法的效果就不明显了

单字多体存储器把存储器的存储字长增加 n 倍(下图中 n = 4),于是单字多体存储器的最大带宽比单子单体储存器的最大带宽提高 n 倍。但一般由于一次读取的 n 个字很有可能并不是最近需要的,所以不可能达到最大带宽 在这里插入图片描述 单字多体存储器的缺点是:单字多大提存储器必须是凑齐了 n 个数据字之后才能作为一个存储字一次写入存储器

【多体并行存储器】

1)高位交叉编址多体存储器

每个模块内的体内地址顺序是连续的(一个体存满后,再存入下一个体)

在这里插入图片描述 高位地址表示体号(带下划线的部分),低位地址来定位体内地址

高位交叉编址的优点:非常有利于存储器的扩张,只需将存储单元的编号往后加即可

高位交叉编址的缺点:由于各个模块一个接一个的串行工作,因此存储器的带宽受到了限制

2)低位交叉编址多体存储器

在这里插入图片描述 低位地址可用来表示体号,高位地址来定位体内地址。这样,连续地址分布在相邻的不同模块内,而同一个模块的地址都是不连续的

3)关于低位地址表示体号的考察

① 冲突的产生

△☼▽(2015年真题)

在这里插入图片描述

分析:4 体交叉编址,采用低 2 位表示体号,下图给出了每个地址所在的模块,显然 访问 8004 时对 0 号体进行访问,接着访问 8000 时还是对 0 号体进行访问,故发生访存冲突 在这里插入图片描述

② 从第几个芯片开始读数据

核心的一句话:从不同体开始读数据可能会影响完全读出某个数据所需要的存储周期数

△☼▽ (2017年真题)

在这里插入图片描述

分析:C,根据题意知,研究对象即一个 4 体交叉编址的存储器,低 2 位表示体号,主存 804 001AH 对应的体号为 2,故从 2 号体开始读出 8B 数据,第一个存储周期从 2、3 号读出 2B数据,第二个存储周期从 0 号到 3 号 4 个体中读出 4B,第 3 个周期从 0、1 号体读出 2B,故读出 x 一共需要 3 个存储周期

4)定性分析

模块的字长等于数据总线的宽度,假设模块存储周期为 T T T,总线传输周期为 τ \tau τ,且存储器由 m m m 个模块组成,为了实现流水线方式存取,应当满足

T = m τ T=m\tau T=mτ

若采用低位交叉编址的多体存储器,连续读取 n n n 个字所需要的时间 t 1 t_1 t1​ 为:

t 1 = T + ( n − 1 ) τ t_1=T+(n-1)\tau t1​=T+(n−1)τ

若采用高位交叉编址的多体存储器,连续读取 n n n 个字所需要的时间 t 2 t_2 t2​ 为:

t 2 = n T t_2=nT t2​=nT

高位交叉编址中的并行性体现在不同的请求源并行地访问不同的体

低位交叉编址的并行性体现在同一请求源并行地访问不同的体

5)与其他知识点的综合

△☼▽(2013年真题)

在这里插入图片描述

分析: (1)CPU 的时钟周期为 1/800MHz = 1.25ns,总线的时钟周期为 1/200MHz = 5ns,总线带宽 4B/5ns = 800 MB/s (2)每次突发传送 32B,Cache 一块的大小恰好为 32B,故只需要一个度突发传送总线事务来完成一个主存块的读取 (3)(8 体交叉编址读出并传送 n 个字的时间)一次读突发传送总线事务包括一次地址传送和 32B 数据传送,用一个总线时钟周期传输地址,根据低位交叉存储器,数据全部取出需要 40ns+(8-1)×5ns = 75ns,又数据的读取与传输是可以重叠的,故完成一次读突发传送总线事务所需的时间为 = 5+75+5 = 85ns(最后一个 5ns 是最后一个体读出的数据的传输时间) (4)(怎么算 CPU 执行时间,CPU 执行时间 = 执行所有指令的时间 + Cache 缺失导致的额外时间)BP 的 CPU 执行时间包括:Cache 命中的指令执行时间和 Cache 缺失时的额外开销,故 BP 的CPU执行时间为 100×4×1.25ns+100×1.2×5%×85ns = 1010ns

△☼▽

在这里插入图片描述

分析: (1)1s 有 80M 个时钟周期,CPI = 4,故 MIPS = 8M/4×10-6 = 20;每条指令访存 1.5 次,每秒共访存 20M×1.5 = 30M 次,Cache 的缺失率为 1%,故平均每秒 Cache 缺失 1%×30M = 0.3M 次;当 CPU 缺失时,CPU 访问主存,主存与 Cache 之间以块为单位传送数据,故每秒 CPU 与主存需要交换的数据大小为 0.3M×16B = 4.8MB,进一步可知,在不考虑 DMA 传送的情况下,主存带宽至少为 4.8MB/s 才能满足 CPU 的访存要求 (2)每秒产生的缺页次数为 300K×0.0005% = 1.5 次,由数据缓冲寄存器位数可知,每传送 4B 数据磁盘控制器就发出一次 DMA 请求,故磁盘 I/O 接口平均每秒发出的 DMA 请求次数至少是 1.5×4KB/4B = 1.5K 次 = 1536 次 (3)DMA 请求优先级更高,因为若 DMA 请求得不到及时响应,I/O 传输数据就可能会丢失 (4)每 1/4 个存储存储周期可以传送 4B 数据,若每个体的存储周期为 50ns,则最大带宽为 4B/(50ns/4) = 320MB/s (考虑一个体的存储字长等于数据寄存器的位数,即 4B,总线传输周期为 50ns/4,亦即每 50ns/4 传输 4B 数据)

【与 Cache 命中率相关的计算】

关于命中率的计算,注意是 指令 Cache 命中率 还是 数据 Cache 命中率Cache-主存系统效率的计算 C a c h e − 主 存 系 统 效 率   e = t c h t c + ( 1 − h ) t m Cache-主存系统效率\ e = \frac{t_c}{ht_c+(1-h)t_m} Cache−主存系统效率 e=htc​+(1−h)tm​tc​​平均访问时间的计算 平 均 访 问 时 间   t a = h t c + ( 1 − h ) t m 平均访问时间\ t_a=ht_c+(1-h)t_m 平均访问时间 ta​=htc​+(1−h)tm​

【Cache和主存之间的映射方式】

1)直接映射

在这里插入图片描述 i = j   m o d   C i=j\ mod\ C i=j mod C

i i i 为 Cache 中的组号, j j j 为主存中的块号, C C C 为 Cache 的块数

缺点是:

不够灵活,因为每个主存块只能固定地对应某个 Cache 块,即使 Cache 内还空着许多位置也不能占用冲突概率高(抖动)

应用场合:适合大容量 Cache

2)全相联映射

如下图,主存有 256 块,Cache 需要 8 位(28 = 256) 来做标记,这样才能识别每一个主存块。而在直接映射方式中只需要识别每个组号即可,8 个 Cache 块,256 个主存块,主存块分 32 组,故在 Cache 中只需 5 位来作为标记位,这样就足够识别该块属于哪一组

在这里插入图片描述 缺点:tag 的位数增加了,访问 Cache 主存字块标记需要和 Cache 的全部标记进行比较,才能判断所访问主存地址的内容是否已在 Cache 内。这种比较通常采用按内容寻址的相联存储器来完成

应用场合:适用于小容量的 Cache

3)组相联映射(块冲突概率最小) 在这里插入图片描述 i = j   m o d   Q i=j\ mod\ Q i=j mod Q

i i i 为 Cache 中的组号, j j j 为主存中的块号, Q Q Q 为 Cache 的组数

组相连映射中,主存地址从高位到低位分为 3 部分:Tag + 组号 + 块内字地址

块 内 字 地 址 = l o g 2 ( 块 大 小 ) 组 号 = l o g 2 ( C a c h e 组 数 ) T a g = 主 存 地 址 其 余 位 块内字地址=log_2(块大小) \\ 组号=log_2(Cache组数)\\ Tag=主存地址其余位 块内字地址=log2​(块大小)组号=log2​(Cache组数)Tag=主存地址其余位

求主存块映射到 Cache 的组号,两种方法:

告知块号,根据公式 i = j   m o d   Q i=j\ mod\ Q i=j mod Q ,注意块号、组号是从 0 开始 ( m o d   2 k mod\ 2^k mod 2k,即取二进制序列的低 k k k 位,基于这样的理解,我们可以知道从主存块号求得 Cache 组号,即取块号的低 k k k 位,记 Q = 2 k Q=2^k Q=2k,于是,我们也可以将块号转二进制,但需要注意的是此时块号的二进制仅包含标记字段和组号字段,块号和单元号是不相同的内容,单元号包含主存块号和块内地址)告知单元号,转换成二进制,对应两个字段

下面以题来说明两种方法:

△☼▽(2009年真题)

在这里插入图片描述

分析:C 方法一:直接计算出 129 号单元在主存的位置。主存块大小 32B,按字节编址,因此主存 129 号单元(32×4+1)在主存的第 5 块,块号为 4;Cache 共 16 块,每组 2 块,共 8 组,故主存块号为 4 的块被映射到 Cache 的组号为 4(4 mod 8 = 4) (我们考虑一下将块号转化为二进制的方法,块号为 4,即 0100B,组号取低 3 位,即 100B,组号为 4) 方法二:129 = 1000 0001B,块内地址占 5 位,组号占 3 位,即 100B = 4,故组号为 4

△☼▽(2016年真题)

在这里插入图片描述

分析:这是一道很好的题,把逻辑地址 → 物理地址 → Cache 地址全部整合在了一起 (1)虚拟地址 32 位,页大小 8KB,页内偏移占 13 位,故 A = 19;物理地址中的 D 也表示页内偏移,故 D = 13 位,物理地址24 位,故 C = 11 ;Cache 一块的大小等于主存块的大小,即 64B,故块内偏移占 6 位,即 G = 6 ,Cache 数据区 64KB,有 1K 块,按 2 路组相联方式,故有 29 组,组号占 9 位,即 F = 9,剩下 Tag 标记位占 24-9-6 = 9 位,即 E = 9 TLB 标记字段 B 中存放的是虚页号,表示该 TLB 项对应哪个虚页表的页表项 (2)4099 = 4096+3,即 1 0000 0000 0011B,故所映射的 Cache 组号为 0 0000 00011B = 3,对应 H 字段的内容为 0 0000 1000B (3)Cache 缺失带来的开销小,处理缺页的开销大,因为处理缺页需要访问磁盘,而 Cache 缺失只需要访问主存 (4)因为采用直写策略时需要同时写快速存储器和慢速存储器,而写磁盘的速度比写主存慢很多很多,所以在 Cache-主存层次,Cache 可以采用直写策略,而在主存-外存层次,修改页面内容时总是采用回写策略

另外一种组相连方式:(该方式在真题中只出现够一次,系命题组老师采用的教材不同引起,搂一眼就行)

该方式先将主存按 Cache 大小分区,再将各个分区中的块进行分组,主存不同区的相同序号的组和 Cache 同序号的组采用直接映射

在这里插入图片描述

△☼▽(2012年真题)

在这里插入图片描述

分析:C 根据上面描述,先画出主存和 Cache 的映射如下: 在这里插入图片描述 (这里有一个可以学习的小技巧,在画表格研究替换的过程中,可以把块 1、块 3 作为两组分别的每次填入位置,这样可以很清楚地把哪一块挪出去)

4)三种映射方式下的主存地址

在这里插入图片描述 5)Cache 标记项问题

每一个 Cache 行对应一个标记项,对于组相连映射方式来说,每一组的标记项放在一起构成一行,将各组从上到下排列,成为一个标记项阵列,如下所示

在这里插入图片描述 对于全相联映射和直接映射来说,标记项一行就是一组

(其实标记阵列容量的计算对直接映射、全相联和组相联来说没有什么特别不一样之处,标记阵列的大小都是标记项位数乘以 Cache 的块数)

对于每个标记项来说,其结构如下所示

在这里插入图片描述 注意,题目如果说到采用写回方式,即一定有 1bit 的脏位(又称 一致性维护位)

△☼▽

在这里插入图片描述

分析:C 按字节编址,主存块大小 4×32/8=16B,字块内地址 4 位,4K字/4字=1K 块,Cache 字块地址 10 位,标记 32-10-4=18 位;4K字 数据有 4K×32=128K 位,标记项有 18+1+1=20 位,标记阵列有 1K×20=20K 位,故 Cache 的总容量为 148K 位

△☼▽

在这里插入图片描述

分析: (1)标记项占 21 位,组号占 5 位,块内地址占 6 位 (2)标记阵列有 (21+1+1)×128 = 2994 位,Cache 的总位数为 2994+128×64×8=68480 位

【Cache 写操作策略】

1)写回法(Write Back)

当 CPU 写命中时,只修改 Cache 的内容,而不立即写入主存,只有当此行被换出时才写回主存,这种方式可以减少访问主存的次数。为了实现这种方式,对 Cache 的每行都必须设置一个修改位(或者称为脏位)。当某行被换出时,根据此行的修改位来决定将该行内容写回主存还是简单舍去

千万注意,写不命中时,CPU 不会在主存中直接修改数据,而是在找到之后直接复制到 Cache 中进行修改,等从 Cache 中换出此块时,再复制到主存中

此知识点可设置综合题的细节题,如当使用写回算法时,求 Cache 的位数,此时,一些考生可能不会加上修改位(如上面习题所示)

2)全写法(Write Through)

当写 Cache 命中时,Cache 与主存同时发生写修改,因而较好地保持了 Cache 与主存内容的一致性。当写 Cache 未命中时,直接在主存中修改。至于在主存中修改后是否要复制到 Cache 中,视情况而定,可以复制也可以不复制

3)写一次

写一次是上面两种策略的一个折中,写命中和写未命中的处理方法都与写回法基本相同,仅仅是第一次写命中时要同时写入主存

【局部性原理】

△☼▽△ 在这里插入图片描述

分析:C,对数组的遍历体现了空间局部性,对 i 和 sum 的访问体现了时间局部性

对数组遍历空间局部性的解释

对数组的遍历,一般而言,如果一个高速缓存的块大小为 B B B 字节,那么一个步长为 k k k 的引用模式( k k k 的单位取决于数据类型,设占 w o r d s i z e wordsize wordsize 字节)平均每次循环会有 m i n ( 1 , w o r d s i z e × k B ) min(1,\frac{wordsize\times k}{B}) min(1,Bwordsize×k​) 次缓存不命中,故而,当 k = 1 k=1 k=1 时,取得最小值,所以对步长为 1 1 1 的引用的确具有良好的空间局部性

简而言之,for(int i=0;i



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3