已知某计算机系统中,存储器[1]按字节编址[2],主存容量为64(KB),Cache容量为1(KB),块大小为16字节,采用直接映射[3]方式。(1) 计算主存地址、Cache地址的位数;(2) 计算主存块号、Cache块号、块内地址的位数
已知某计算机系统中,存储器[1]按字节编址[2],主存容量为$64\text{KB}$,Cache容量为$1\text{KB}$,块大小为$16$字节,采用直接映射[3]方式。
(1) 计算主存地址、Cache地址的位数;
(2) 计算主存块号、Cache块号、块内地址的位数
题目解答
答案
根据题目给出的计算机系统参数,我们已知以下信息:
- 存储器按字节编址。
- 主存容量为 $64\text{KB}$。
- Cache容量为 $1\text{KB}$。
- 块大小为 $16$ 字节。
- 采用直接映射方式。
下面我们逐步进行推导和计算。
(1)计算主存地址、Cache地址的位数
推导过程:
主存地址的位数取决于主存的总容量。主存容量为 $64\text{KB}$,即 $64 \times 1024$ 字节 $= 2^6 \times 2^{10}$ 字节 $= 2^{16}$ 字节。
因为存储器是按字节编址的,所以 $2^{16}$ 个字节的存储空间需要 $16$ 位二进制[4]数来唯一标识每一个字节。
Cache地址的位数取决于Cache的总容量。Cache容量为 $1\text{KB}$,即 $1 \times 1024$ 字节 $= 2^{10}$ 字节。
同样按字节编址,$2^{10}$ 个字节的存储空间需要 $10$ 位二进制数来唯一标识Cache中的每一个字节。
答案:
主存地址的位数为 $16$ 位。
Cache地址的位数为 $10$ 位。
(2)计算主存块号、Cache块号、块内地址的位数
推导过程:
首先确定块内地址的位数。块大小为 $16$ 字节,即 $2^4$ 字节。
因为按字节编址,要区分块内的 $16$ 个字节,需要 $4$ 位二进制数(即 $0 \sim 15$ 的偏移量)。
接下来确定Cache块号(即Cache的行号)的位数。
Cache总容量为 $1\text{KB}$ ($1024$ 字节),块大小为 $16$ 字节。
Cache中的总块数(行数) $= \text{Cache容量} / \text{块大小} = 1024\text{字节} / 16\text{字节} = 64$ 块。
$64$ 块即 $2^6$ 块,因此Cache块号需要 $6$ 位二进制数来表示(从 $0$ 到 $63$)。
最后确定主存块号的位数。
主存总容量为 $64\text{KB}$ ($65536$ 字节),块大小为 $16$ 字节。
主存中的总块数 $= \text{主存容量} / \text{块大小} = 65536\text{字节} / 16\text{字节} = 4096$ 块。
$4096$ 块即 $2^{12}$ 块,因此主存块号需要 $12$ 位二进制数来表示(从 $0$ 到 $4095$)。
验证:在直接映射中,主存地址通常分为三部分:主存字块标记(Tag)、Cache行号(Cache块号)、块内地址。主存地址总位数($16$位) = 标记位数 + Cache块号位数($6$位) + 块内地址位数($4$位),符合逻辑。
答案:
主存块号的位数为 $12$ 位。
Cache块号的位数为 $6$ 位。
块内地址的位数为 $4$ 位。