Skip to content

2017年 408 计算机组成原理 第 13 题

计算机组成原理2017年选择题2分

题目

某计算机主存按字节编址,由 4 个 64M×8 位的 DRAM 芯片采用交叉编址方式构成,并与宽度为 32 位的存储器总线相连,主存每次最多读写 32 位数据。若 double 型变量 x 的主存地址为 804001AH,则读取 x 需要的存储周期数是( )。

错因

A

以为"交叉编址 + 4 个体" = 一次能并行取 4 字节 × 双向 = 8 字节,恰好装 double。但总线宽度只有 32 位 = 4 字节——一次最多取 4 字节,不是 8 字节。即使 4 个体并行启动,受总线宽度限制,每个存储周期最多送 4 字节出去。

B

按"地址对齐"想:以为 double 起始地址刚好是 4 字节边界,8 字节 = 2 个 32 位字,2 个存储周期搞定。但题给地址 0x0804_001A——末位 A 的二进制 1010不是 4 字节对齐(4 字节对齐要求末 2 位为 00)。错位起始 → 跨 3 个 32 位字。

D

可能算式:8 字节 / 2(每周期有效字节数)= 4 周期,把第一个和最后一个字的"部分有效"算成"全部只能拿 2 字节"。或者把每次只能取一个字节误当结论。错在没区分"一个存储周期能传 4 字节"和"该 4 字节里有几字节属于 x"。

总解析

第一步:理清两个关键约束

约束含义
总线宽度 32 位一个存储周期最多传 4 字节
4 个 DRAM 体低位交叉编址末 2 位地址决定体号;4 个体可并行启动
总线"一次取一个字"取的是 4 字节对齐的字(地址末 2 位 = 00 的字)

第二步:列出 double 变量 x 占用的字节地址

double = 8 字节,从 0x0804_001A 起:

字节序号字节地址末 2 位
00x0804_001A10
10x0804_001B11
20x0804_001C00
30x0804_001D01
40x0804_001E10
50x0804_001F11
60x0804_002000
70x0804_002101

第三步:每个存储周期取一个 4 字节对齐的字,看 x 跨了哪些字

4 字节对齐 = 末 2 位 = 00。把 8 个字节地址按对齐边界分组:

对齐字(基址)字范围包含 x 的字节x 占多少字节
0x0804_00180x...18 ~ 0x...1B0x...1A, 0x...1B2 字节
0x0804_001C0x...1C ~ 0x...1F0x...1C ~ 0x...1F4 字节
0x0804_00200x...20 ~ 0x...230x...20, 0x...212 字节

x 跨了 3 个 32 位字 —— 即使第一个字和最后一个字都只贡献 2 字节,也必须完整读出整个 4 字节字才能拿到那 2 字节,每个字一个存储周期。

最终答案是 C(3)

对照内存视图直观看

       字节地址末位:  8  9  A  B  | C  D  E  F  | 0  1  2  3
       字界限:        ─────第1字────  ────第2字─────  ────第3字────
       x 占用:                ▓  ▓  | ▓  ▓  ▓  ▓  | ▓  ▓
                              └─2字节─┘ └──4字节──┘ └─2字节─┘
       存储周期:           周期 1        周期 2        周期 3

易错点速查

  1. "交叉编址 4 个体" ≠ "一次取 4 字节字宽 × 4 = 16 字节",仍受总线宽度限制
  2. 地址不对齐 → 跨界访问 → 多 1 个周期;double 起始末 2 位 = 10,必然跨字
  3. 哪怕一个 4 字节字里只用到 1~2 字节,仍要消耗 1 个完整存储周期

最后更新:

🎬 可视化演示
加载中...

提示:可在可视化区直接操作播放、步进、修改参数