例1:某计算机主存容量256MB,按字编址,字长1B,块大小32B,Cache容量512KB。对如下的直接映射方式、4-路组相联映射方式、全相联映射方式的内存地址格式,求:
(1)计算A、B、C、D、E、G字段的位数;(6分)
(2)若某字的地址为(2BF3A2E)16,若采用4-路组相连映射方式,则该字对应的标记D是什么?对于包含该地址在内的组,对应的字地址范围是多少?(结果用十六进制表示。)(3分)
直接映射方式:
标记A | Cache行号B | 字地址C |
---|---|---|
4-路组相联映射方式: | ||
标记D | Cache组号E | 字地址F |
– | – | – |
全相联映射方式: | ||
标记G | 字地址H | |
– | – |
解题:
(1)由主存容量256MB=2^28B,且按字编址,字长为1B,可得地址总位数为28位。由块大小为32B,字长1B,得字地址位数为5位。Cache容量为512KB,总共可以分为512KB/32B=16K(行),Cache行号位数为14位。若按4-路组相连进行组织,则共有16K/4=4K(组),组号位数12位。
B的位数14,C的位数5,A的位数28-5-14=9.
E的位数12,F的位数5,D的位数28-5-12=11.
H的位数5,G的位数28-5=23.
(2)(2BF3A2E)16=(0010 1011 1111 0011 1010 0010 1110) 2
若采用4-路组相连,则标记D为高11位地址(0010 1011 111)2,用十六进制表示为(15F)16。
**由于内存和Cache映射时是以块为单位进行映射,因此在4-路组相连映射情况时,相当于将D和E固定,对F进行排列组合。**也就是说,包含该地址在内的组对应的字地址范围是:(0010 1011 1111 0011 1010 0010 0000) 2 ~ (0010 1011 1111 0011 1010 0011 1111) 2,即有(2BF3A20)16~(2BF3A3F)16
例2:将 4K×8 的 DRAM 存储芯片组装成 128M×32 的存储器,按字节从地址 0 开始编址,字长 32 位。设存储周期为 400ns,数据总线宽度为 32 位,总线传送周期为50ns,试求:
(1)若采用顺序存储方式,则地址为(1A2C0005)16的字位于哪个模块?在模块内第几个字?(从 0 开始编号;结果用十六进制表示)
解题:因按字节编址,每一 32 位字长需要 2 位来进行编码,128M 个字长需要 27 位来进行编码,因此 128M×32 位的存储器地址线为 29 位。 (易错)
用 4K×8 的 DRAM 存 储 芯 片 组 装 成 128M×32 的 存 储 器 , 总 共 需 要(128M×32)/(4K×8)=217 块存储芯片。其中,每 4 个存储芯片为一个模块来进行字长扩展,则总共有 215模块。
因采用顺序存储方式,因此 29 位地址中,高 15 位用于模块选择,接下去的 12 位为片内选择,最后 2 位是字长内不同字节选择。
对于给定的地址(1A2C0005)16=(0001 1010 0010 1100 0000 0000 0000 0101)2,最高 3 位000 位无效地址,接下来的 15 位 1 1010 0010 1100 00 为模块编号,随后的 12 位 00 0000 0000 01 为片内编号,最后 2 位 01 为字长内字节编号。因此该地址位于(68B0)16模块内的(001) 16字。
例3: 某机器字长为 32 位,按字编址,总容量为 64M×32。其中,ROM 的容量为4M×32,占用低位地址空间,由 1M×16 的 ROM 芯片构成;RAM 的容量为 60M×32,占用高位地址空间,由 4M×16 的 DRAM 芯片构成。ROM 芯片有CS̅̅̅信号控制端,DRAM
芯片有CS̅̅̅和WE ̅̅̅̅̅信号控制端,CPU 的控制信号为𝑅/𝑊̅ (读/写)。请问:
(1) 总共需要多少 ROM 芯片?ROM 的地址范围是多少(用十六进制表示)?(2 分)
(2) 总共需要多少 DRAM 芯片?RAM 的地址范围是多少(用十六进制表示)?(2 分)
(3) 若 ROM 和 RAM 采用顺序方式进行字、位扩充,请画出存储器 ROM 和 DRAM 同CPU 连接的组成逻辑框图。(6 分)
(4) 若在 CPU 和内存间引入 512K 的高速缓存 Cache,且采用 4-路组相连映射方式,块大小为 32 字节,则 Cache 可以分为多少组?若将包含内存地址(5010 CA00)16的块调入 Cache,则将映射到 Cache 的哪个组(下标从 0 开始)?
解题:(1)ROM 芯片数:4M×32/(1M×16)=8(片)由于总存储容量是 64M×32 位,按字编址,且字长为 32 位,因此地址线数量是 26 位。且ROM 占低位地址,因此最低的 4M 字是 ROM 的范围,具体而言地址范围是(000 0000)16 –(03F FFFF) 16。 (1 分)
(2)DRAM 芯片数:60M×32/(4M×16)=30(片) (1 分)
根据题意,DRAM 占高位地址内存空间,即高 60M 均属于 DRAM 的。具体而言,地址范围是(040 0000)16 – (3FF FFFF) 16。 (1 分)
(3)ROM 和 DRAM 芯片,都是两片经由位数扩充组成一组,ROM 共 4 组,DRAM 共15 组。按 32 位字长进行编制,因此实际的地址位数为 26 位。对于 ROM 而言,片内是 20位,片选是高 2 位;对于 RAM 而言,片内是 22 位,片选是 4 位。由于 ROM 和 RAM 的片内地址线和片选线数量均不一致,因此只能向 ROM 看齐。具体而言,26 位地址线中的高 6 位用于片选译码,译出 64 种片选信号,其中对应000000–000011 的属于 ROM 的 4 组片选信号,剩余的 000100–111111 共 60 种情况用于 RAM 的片选。然而 RAM 实际上只有15 组,且 RAM 的片内地址线应该为 22 位,因此每连续的 4 种情况对应 RAM 的一组。例如 000100~000111 对应用于 RAM 的组 0,其它依次类推。
(4))因采用 4-路组相连,因此每个组大小为 4×32=128B。这样 512KB 的 Cache 总共可以分成512KB/128B=4K=4096组。
对于给定的 DRAM 地址(110 CA00)16,共 28 位,其中最高 2 位超出地址线数量 26,因此这最高 2 位没有作用;接下来的 26 位为有效地址。由于内存按 32 位字长进行编址,因此块内实际有 8 个字,因此块内编号需要 3 位;由于 Cache 有 4096 组,因此组号为 12
位;剩下的 tag 为 26-3-12=11 位。按此格式,可知包含(110 CA00)16 的块映射到的组号为(1001 0100 0000)2=(940)16
例4:设某机器字长32位(即数据线、地址线位数均为32位),按字编址。在该机器上运行如下的C语言程序:
int a[16], k, sum=0;
for (k=0; k<16; k++) sum += a[k];
设整型数据在内存中占4个字节(即一个字长),内存足够大,数组元素放在内存中的连续单元,k和sum已经放在寄存器中。假设主存和Cache的块大小为4字长,数组元素a[0]-a[3]存放在主存的B0块中,数组a的其它元素依次存放;计算机的Cache有8行,行号为L0-L7;内存数据块映射到Cache时采用直接映射方法。试回答下列问题:
(1) 采用直接映射时,内存地址格式如何?简述理由;(3分)
(2) 数组元素a[5]放在Cache的哪一行中?简述理由;(2分)
(3) 就该程序而言,Cache的命中率是多少?简述理由。
解题:(1)由于每块有 4 个字,因此块内地址 2 位。Cache 总共有 8 行,因此采用直接映射方式时,用于 Cache 行号的地址为 3 位,剩余的 32-2-3=27 位为标记位。因此,内存地址格式如下:
标记(27 位) Cache 行号(3 位) 块内编址(2 位)
(2)a[5]属于内存数据块 B1,通过 1%8=1 方式映射到 Cache 的 L1 行。
(3)当对 a[0]进行累加时,a[0]在内存中,因此需要访问内存来获得 a[0]。内存在将 a[0]传送给 CPU 的同时,根据局部性原理将 a[0]-a[3]同时传送给 Cache。因此,在累加 a[1]-a[3]时,这 3 个元素均可以在 Cache 中找到。对于其它数据块,有类似的情况,即某块的第 0
个元素需要访问内存,该块内的其余元素可以在 Cache 中获得。因此,执行此段 C 语言程序,共访问内存 4 次,访问 Cache 12 次,则 Cache 的命中率为:12/(12+4)=75%