# 第 6 章家庭作业:6.22~6.30
家庭作业 6.22(★★)假设要求你设计一个每条磁道位数固定的旋转磁盘。你知道每条磁道的位数是由最里层磁道的周长决定的,可以假设它就是中间那个圆洞的周长。因此,如果你把磁盘中间的洞做得大一点,每条磁道的位数就会增大,但是总的磁道数会减少。如果用 r 来表示盘面的半径,x · r 表示圆洞的半径,那么 x 取什么值能使这个磁盘的容量最大?
家庭作业 6.23(★)估计访问下面这个磁盘上扇区的平均时间(以 ms 为单位):
| 参数 | 值 |
|---|---|
| 旋转速率 | 15 000 RPM |
| Tavg seek | 4 ms |
| 平均扇区数/磁道 | 800 |
家庭作业 6.24(★★)假设一个 2 MB 的文件,由 512 个字节的逻辑块组成,存储在具有下述特性的磁盘驱动器上:
| 参数 | 值 |
|---|---|
| 旋转速率 | 15 000 RPM |
| Tavg seek | 4 ms |
| 平均扇区数/磁道 | 1000 |
| 盘面数 | 8 |
| 扇区大小 | 512 字节 |
对于下面的每种情况,假设程序顺序地读文件的逻辑块,一个接一个,并且对第一个块定位读/写头的时间等于 Tavg seek + Tavg rotation。
A. 最好情况:估计在所有可能的逻辑块到磁盘扇区的映射上读该文件所需要的最优时间(以 ms 为单位)。
B. 随机情况:估计如果块是随机映射到磁盘扇区上时读该文件所需要的时间(以 ms 为单位)。
家庭作业 6.25(★)下面的表给出了一些不同的高速缓存的参数。对于每个高速缓存,填写出表中缺失的字段。记住 m 是物理地址的位数,C 是高速缓存大小(数据字节数),B 是以字节为单位的块大小,E 是相联度,S 是高速缓存组数,t 是标记位数,s 是组索引位数,而 b 是块偏移位数。
| 高速缓存 | m | C | B | E | S | t | s | b |
|---|---|---|---|---|---|---|---|---|
| 1. | 32 | 1024 | 4 | 4 | ||||
| 2. | 32 | 1024 | 4 | 256 | ||||
| 3. | 32 | 1024 | 8 | 1 | ||||
| 4. | 32 | 1024 | 8 | 128 | ||||
| 5. | 32 | 1024 | 32 | 1 | ||||
| 6. | 32 | 1024 | 32 | 4 |
家庭作业 6.26(★)下面的表给出了一些不同的高速缓存的参数。你的任务是填写出表中缺失的字段。记住 m 是物理地址的位数,C 是高速缓存大小(数据字节数),B 是以字节为单位的块大小,E 是相联度,S 是高速缓存组数,t 是标记位数,s 是组索引位数,而 b 是块偏移位数。
| 高速缓存 | m | C | B | E | S | t | s | b |
|---|---|---|---|---|---|---|---|---|
| 1. | 32 | 8 | 1 | 21 | 8 | 3 | ||
| 2. | 32 | 2048 | 128 | 23 | 7 | 2 | ||
| 3. | 32 | 1024 | 2 | 8 | 64 | 1 | ||
| 4. | 32 | 1024 | 2 | 16 | 23 | 4 |
家庭作业 6.27(★)这个问题是关于练习题 6.12 中的高速缓存的。
A. 列出所有会在组 1 中命中的十六进制内存地址。
B. 列出所有会在组 6 中命中的十六进制内存地址。
家庭作业 6.28(★★)这个问题是关于练习题 6.12 中的高速缓存的。
A. 列出所有会在组 2 中命中的十六进制内存地址。
B. 列出所有会在组 4 中命中的十六进制内存地址。
C. 列出所有会在组 5 中命中的十六进制内存地址。
D. 列出所有会在组 7 中命中的十六进制内存地址。
家庭作业 6.29(★★)假设我们有一个具有如下属性的系统:
- 内存是字节寻址的。
- 内存访问是对 1 字节字的(而不是 4 字节字)。
- 地址宽 12 位。
- 高速缓存是两路组相联的(
E=2),块大小为 4 字节(B=4),有 4 个组(S=4)。
高速缓存的内容如下,所有的地址、标记和值都以十六进制表示:
| 组索引 | 标记 | 有效位 | 字节 0 | 字节 1 | 字节 2 | 字节 3 |
|---|---|---|---|---|---|---|
| 0 | 00 | 1 | 40 | 41 | 42 | 43 |
| 0 | 83 | 1 | FE | 97 | CC | D0 |
| 1 | 00 | 1 | 44 | 45 | 46 | 47 |
| 1 | 83 | 0 | — | — | — | — |
| 2 | 00 | 1 | 48 | 49 | 4A | 4B |
| 2 | 40 | 0 | — | — | — | — |
| 3 | FF | 1 | 9A | C0 | 03 | FF |
| 3 | 00 | 0 | — | — | — | — |
A. 下面的图给出了一个地址的格式(每个小框表示一位)。指出用来确定下列信息的字段(在图中标号出来):
- CO 高速缓存块偏移
- CI 高速缓存组索引
- CT 高速缓存标记
| 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
B. 对于下面每个内存访问,当它们是按照列出来的顺序执行时,指出是高速缓存命中还是不命中。如果可以从高速缓存中的信息推断出来,请也给出读出的值。
| 操作 | 地址 | 命中? | 读出的值(或者未知) |
|---|---|---|---|
| 读 | 0x834 | ||
| 写 | 0x836 | ||
| 读 | 0xFFD |
家庭作业 6.30(★)假设我们有一个具有如下属性的系统:
- 内存是字节寻址的。
- 内存访问是对 1 字节字的(而不是 4 字节字)。
- 地址宽 13 位。
- 高速缓存是四路组相联的(
E=4),块大小为 4 字节(B=4),有 8 个组(S=8)。
考虑下面的高速缓存状态。所有的地址、标记和值都以十六进制表示。每组有 4 行,索引列包含组索引。标记列包含每一行的标记值。V 列包含每一行的有效位。字节 0~3 列包含每一行的数据,标号从左向右,字节 0 在左边。
4 路组相联高速缓存
| 索引 | 标记 | V | 字节 0~3 | 标记 | V | 字节 0~3 | 标记 | V | 字节 0~3 | 标记 | V | 字节 0~3 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | F0 | 1 | ED 32 0A A2 | 8A | 1 | BF 80 1D FC | 14 | 1 | EF 09 86 2A | BC | 0 | 25 44 6F 1A |
| 1 | BC | 0 | 03 3E CD 38 | A0 | 0 | 16 7B ED 5A | BC | 1 | 8E 4C DF 18 | E4 | 1 | FB B7 12 02 |
| 2 | BC | 1 | 54 9E 1E FA | B6 | 1 | DC 81 B2 14 | 00 | 0 | B6 1F 7B 44 | 74 | 0 | 10 F5 B8 2E |
| 3 | BE | 0 | 2F 7E 3D AB | C0 | 1 | 27 95 A4 74 | C4 | 0 | 07 11 6B D8 | BC | 0 | C7 B7 AF C2 |
| 4 | 7E | 1 | 32 21 1C 2C | 8A | 1 | 22 C2 DC 34 | BC | 1 | BA DD 37 D8 | DC | 0 | E7 A2 39 BA |
| 5 | 98 | 0 | A9 76 2B EE | 54 | 0 | BC 91 D5 92 | 98 | 1 | 80 BA 9B F6 | BC | 1 | 48 16 81 0A |
| 6 | 38 | 0 | 5D 4D F7 DA | BC | 1 | 69 C2 8C 74 | 8A | 1 | A8 CE 7F DA | 38 | 1 | FA 93 EB 48 |
| 7 | 8A | 1 | 04 2A 32 6A | 9E | 0 | B1 86 56 08 | CC | 1 | 96 3D 47 F2 | BC | 1 | FB 1D 42 30 |
A. 这个高速缓存的大小(C)是多少字节?
B. 下面的图给出了一个地址的格式(每个小框表示一位)。指出用来确定下列信息的字段(在图中标号出来):
- CO 高速缓存块偏移
- CI 高速缓存组索引
- CT 高速缓存标记
| 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|