第三章
(1)直接映射 cache 的主要优点是实现简单。这种方式的主要缺点是( )
A、它比其他 cache 映射方式价格更贵
B、如果使用中的 2 个或多个块映射到 cache 同一行,命中率则下降
C、它的存取时间大于其它 cache 映射方式
D、cache 中的块数随着主存容量增大而线性增加
解析:
A、它比其他cache映射方式价格更贵
- 这个选项并不准确。直接映射cache的实现简单,通常意味着硬件成本相对较低,而不是更贵。
B、如果使用中的2个或多个块映射到cache同一行,命中率则下降
- 这是直接映射cache的一个主要缺点。在直接映射中,主存的每个块只能映射到cache中的一个固定位置。如果多个主存块映射到cache的同一行,就会发生冲突,导致cache命中率下降。
C、它的存取时间大于其它cache映射方式
- 这个选项并不准确。直接映射cache的存取时间并不一定大于其他映射方式。实际上,由于其实现简单,有时甚至可以提供更快的访问速度。
D、cache中的块数随着主存容量增大而线性增加
- 这个选项也不准确。在直接映射cache中,cache的块数通常是固定的,并不随着主存容量的增大而线性增加。
(2)某 DRAM 芯片,其存储容量为 512×8 位,该芯片的地址线和数据线的数目 是( )
A、8,512 B、512,8
C、18,8 D、9,8
解析:
- 512可以表示为2的9次方,因此需要9根地址线来区分这512个存储单元。
- 由于每个存储单元是8位,因此需要8根数据线来同时传输这8位数据。
(3)交叉存储器实质上是一种多模块存储器,它用( )方式执行多个独立的读 写操作。
A、流水 B、资源重复
C、顺序 D、资源共享
解析:
- 在这种存储器中,数据读写操作是以“流水”方式进行的。这意味着多个独立的读写操作可以并行进行,类似于生产线上的流水作业,从而提高了数据处理的效率和速度。
- “流水”方式允许存储器同时处理多个请求,减少了等待时间,优化了数据吞吐量。
(4)常用的虚拟存储系统由( )两级存储器组成,其中辅存是大容量的磁表面 存储器
A、cache-主存 B、主存-辅存 C、cache-辅存 D、通用寄存器-cache
解析:在虚拟存储系统中,主存用于存储当前正在使用或即将使用的数据和程序,而辅存则作为主存的扩展,存储不常用或大量的数据和程序。当主存中的数据被替换或需要访问辅存中的数据时,系统会自动进行数据的交换。
(5)一个 4 路组相联 cache 共有 128 行,主存每块 128 字,问:
1. 该 Cache 的组数?
2. 如果主存的容量是 2M 字,则有多少个块?
3. 主存中的第 300 块映射到 Cache 中哪一个组?
4. 请给出该 cache 对应的主存地址映射格式。
解析:
-
该 Cache 的组数?
4路组相联意味着每个组有4个行(或称为路)。由于Cache共有128行,因此组数为:
组数 = 总行数 / 每组的行数 = 128行 / 4路 = 32组
-
如果主存的容量是 2M 字,则有多少个块?
主存每块128字,所以主存的块数为:
块数 = 主存容量 / 每块的大小 = 2M字 / 128字 = 16,000块
-
主存中的第 300 块映射到 Cache 中哪一个组?
映射组号 = (主存块号) mod (Cache组数)
映射组号 = 300 mod 32 = 4所以,主存中的第300块映射到Cache中的第4组。
4.请给出该 cache 对应的主存地址映射格式。
对于组相联Cache,主存地址通常被划分为三个部分:块标记(Tag)、组索引(Index)和块内偏移(Offset)或称为字偏移。
- 块内偏移(Offset):用于确定数据在块内的位置,由于每块有128字,所以需要7位来表示((2^7 = 128))。
- 组索引(Index):用于确定数据应该映射到Cache的哪一个组。由于有32个组,所以需要5位来表示((2^5 = 32))。
- 块标记(Tag):用于区分映射到同一Cache组的不同主存块。由于主存有16,000块,而Cache只有32组,所以每个组可能对应多个主存块。Tag的大小取决于主存块数和Cache组数的关系。在这里,我们需要足够多的位来表示16,000个不同的块,同时考虑到已经有5位用于Index,所以Tag的大小是:(\lceil \log_2(16000) \rceil - 5 = 14 - 5 = 9) 位(向上取整)。
log以2为底 16000 约等于 13.96578
因此,主存地址的格式可以表示为:
- Tag: 9位
- Index: 5位
- Offset: 7位
(6)有一个 Cache 的容量为 8K 字,每块为 32 字,问:
1. 该 Cache 可容纳多少个块?
2. 如果主存的容量是 2M 字,则有多少个块?
3. 在直接映射方式下,主存中的第 400 块映射到 Cache 中哪一个块?
4. 在进行直接地址映射时,存储器地址分成几段各有多少位?
解析:
1.该 Cache 可容纳多少个块?
Cache 的容量是 8K 字,每块大小为 32 字。因此,Cache 可以容纳的块数为:
块数 = Cache 容量 / 块大小
= 8K 字 / 32 字
= 256 块
2.如果主存的容量是 2M 字,则有多少个块?
主存容量是 2M 字,每块大小为 32 字。因此,主存的块数为:
块数 = 主存容量 / 块大小
= 2M 字 / 32 字
= 64K 块 (即 65536 块)
3.在直接映射方式下,主存中的第 400 块映射到 Cache 中哪一个块?
在直接映射方式下,主存块号与 Cache 块号之间存在固定的映射关系。通常这种关系可以简化为取模运算,即:
Cache 块号 = 主存块号 mod Cache 块数
= 400 mod 256
= 144
所以,主存中的第 400 块映射到 Cache 中的第 144 块。
4.在进行直接地址映射时,存储器地址分成几段各有多少位?
在直接映射 Cache 系统中,存储器地址通常被分为三个字段:块号、块内偏移和标记字段(也称为标签)。对于这个问题,我们需要确定每个字段的位数。
- 块内偏移:由于每块大小为 32 字,所以需要 5 位来表示块内的偏移(因为 2^5 = 32)。
- Cache 块号:由于 Cache 有 256 块,所以需要 8 位来表示 Cache 块号(因为 2^8 = 256)。
- 标记字段:用于区分主存中映射到同一 Cache 块的多个块。由于主存有 64K 块,而 Cache 有 256 块,所以每个 Cache 块可能对应 64K / 256 = 256 个不同的主存块。因此,标记字段需要 8 位(因为 2^8 = 256)。
(9)双端口存储器所以能进行高速读/写操作,是因为采用( )
A、高速芯片 B、新型器件 C、流水技术 D、两套相互独立的读写电路
解析:
双端口存储器通过使用多个读写端口和相应的控制电路来实现其功能。每个存储单元都有两个独立的写入端口和读取端口,这些端口通过两套相互独立的读写电路来控制,从而实现了高速的读写操作。这种设计使得双端口存储器在同一时间内可以进行两个独立的读写操作,大大提高了存储器的访问速度和效率。
(10)设寄存器位数为 8 位,机器数采用补码形式(含一位符号位),则十进制数 -26 存放在寄存器中的内容为( )
A、26H B、9BH C、E6H D、5AH
26的二进制数:0001 1010
-26的二进制补码:1110 0110
(11)计算机系统中的存储器系统是指( )
A、RAM 存储器 B、ROM 存储器 C、主存储器 D、主存储器和外存储器
解析:主存储器(如RAM、ROM)和外存储器(如硬盘、光盘、U盘等)。外存储器用于长期存储数据,其容量通常远大于主存储器,但访问速度较慢。主存储器和外存储器共同构成了计算机系统中的存储器系统。
(12)采用虚拟存储器的主要目的是( )
A、提高主存储器的存取速度 B、扩大主存储器的存储空间,并能进行自动管理和调度
C、提高外存储器的存取速度 D、扩大外存储器的存储空间
解析:虚拟存储器是一种技术,它结合了计算机的物理内存(主存储器)和硬盘空间(外存储器),为应用程序提供了一个比实际物理内存更大的地址空间。这种技术的主要目的并不是直接提高主存储器或外存储器的存取速度,而是通过将部分数据从内存转移到硬盘上,实现了对物理内存的扩展。同时,虚拟存储器也涉及到了数据的自动管理和调度。操作系统会根据需要自动将数据在物理内存和硬盘之间进行交换,以优化系统的性能。这种自动管理和调度功能是虚拟存储器技术的重要组成部分。
(13)下列有关存储器的描述中,选择出正确的答案( )
A、多体交叉存储主要解决扩充容量问题B、访问存储器的请求是由 CPU 发出的
C、cache 与主存统一编址,即主存空间的某一部分属于 cache
D、cache 的功能全由硬件实现
解析:
A. 多体交叉存储主要解决扩充容量问题 - 错误。
多体交叉存储主要是为了提高主存储器的数据传输率,而不是扩充容量。它通过多个独立的、容量相同的存储模块并行工作,实现数据的快速访问。
B. 访问存储器的请求是由 CPU 发出的 - 正确。
CPU 负责执行程序指令,处理数据,因此它会根据需要发出访问存储器的请求,以读取或写入数据。
C. cache 与主存统一编址,即主存空间的某一部分属于 cache - 错误。
Cache(高速缓存)通常有自己的地址空间,并不与主存统一编址。Cache 用于存储最近访问过的数据或指令,以加速对常用数据的访问。它并不占据主存地址空间的一部分。
D. cache 的功能全由硬件实现 - 正确。
Cache 的管理和操作,包括数据的替换策略、写入策略等,通常都是由硬件自动完成的,不需要软件干预。这样可以确保高速缓存的快速响应和有效性。
(14)设有一个具有 20 位地址和 32 位字长的存储器,问:
1. 该存储器能存储多少个字节的信息?
2. 如果存储器由 128K*8 位的 SRAM 芯片组成,需要多少片?
3. 画出 CPU 与该存储器的连接逻辑图。(CPU 具有 20 根地址线 A0~A19,32 根数据 线 D0~D31,采用 74LS138 译码器作为字选控制)
解析:
1.该存储器能存储多少个字节的信息?
由于存储器具有20位地址线,它可以寻址的地址空间是 2^20。每个地址指向一个32位的字,而32位即4字节。因此,存储器可以存储的总字节数为:
存储容量 = 2^20 字 * 4 字节/字 = 220 * 4 字节 = 4MB(兆字节)
或者更精确地:
存储容量 = 2^20 * 4 字节 = 1,048,576 字节 * 4 = 4,194,304 字节 = 4MB
2.如果存储器由 128K*8 位的 SRAM 芯片组成,需要多少片?
首先,我们需要将存储容量从字节转换为位,以便与SRAM芯片容量相匹配:
存储容量(位)= 4MB * 8 位/字节 = 32Mb(兆位)
每片SRAM的容量是 128K*8 位 = 1Mb(兆位)。
所需SRAM芯片数 = 总存储容量(位)/ 单片SRAM容量(位)
所需SRAM芯片数 = 32Mb / 1Mb = 32 片
(15)有一个 Cache 的容量为 4K 字,每块为 16 字,问:
1. 该 Cache 可容纳多少个块?
2. 如果主存的容量是 1M 字,则有多少个块?
3. 在直接映射方式下,主存中的第 300 块映射到 Cache 中哪一个块?
4. 在进行直接地址映射时,存储器地址分成几段各有多少位?
解析:
1.该 Cache 可容纳多少个块?
Cache 容量为 4K 字,每块为 16 字。因此,Cache 可以容纳的块数为:
Cache 块数 = Cache 容量(字) / 每块字数
Cache 块数 = 4K 字 / 16 字 = 256 块 4 * 1024 / 16 = 256
2.如果主存的容量是 1M 字,则有多少个块?
主存容量为 1M 字,每块仍为 16 字。因此,主存可以容纳的块数为:
主存块数 = 主存容量(字) / 每块字数
主存块数 = 1M 字 / 16 字 = 64K 块(即 65536 块)
3.在直接映射方式下,主存中的第 300 块映射到 Cache 中哪一个块?
在直接映射方式下,主存块到 Cache 块的映射通常是通过取模运算来实现的。假设 Cache 有 N 个块,则主存中的第 i 块会映射到 Cache 中的第 (i mod N) 块。在这个例子中,N = 256。
因此,主存中的第 300 块会映射到 Cache 中的第 (300 mod 256) = 44 块。
4.在进行直接地址映射时,存储器地址分成几段各有多少位?
在直接映射的 Cache 系统中,存储器地址通常被分成三个部分:块地址、块内偏移(或称为字偏移)和标记字段。
- 块地址:用于定位主存中的块。由于主存有 64K 个块,所以需要 (\log_2(64K) = 16) 位来表示块地址。 6 + 10 = 16
- 块内偏移:用于定位块内的具体字。由于每块有 16 个字,所以需要 (\log_2(16) = 4) 位来表示块内偏移。
- 标记字段:在直接映射中,标记字段用于验证 Cache 中的数据是否确实是主存中对应块的数据。在直接映射中,这个字段通常不是由地址直接得出的,而是在 Cache 行被填充时从主存中获取的。因此,在形成地址时,我们不考虑标记字段的位数。
所以,存储器地址在直接地址映射下被分成两段:16 位的块地址和 4 位的块内偏移。
(17)存储器是计算机系统的记忆设备,它主要用来( )
A、存放数据 B、存放程序 C、存放数据和程序 D、存放微程序
解析:
计算机中的存储器既用于存储数据,也用于存储程序。程序是指导计算机如何操作的指令序列,而数据则是程序操作的对象。
(18)双端口存储器在( )情况下会发生读/写冲突
A、左端口与右端口的地址码不同 B、左端口与右端口的地址码相同
C、左端口与右端口的数据码不同 D、左端口与右端口的数据码相同
解析:
当两个端口试图同时访问存储器中的同一个位置时(即地址码相同),如果一个是读操作,另一个是写操作,那么就会出现读写冲突,因为写操作可能会改变正在被读操作访问的数据。
假设某计算机的存储系统由 Cache 和主存组成。某程序执行过程中访存 1000 次,其中访问 Cache 缺失(未命中)50 次,则 Cache 的命中率是( )
A、5% B、9.5% C、50% D、95%
解析:950 / 1000 = 0.95
(20)某计算机字长 32 位,其存储容量为 256MB,若按单字编址,它的寻址范围 是()
A、64MB B、32MB C、2 ^ 25单元 D、2 ^ 26单元
解析:
-
字长:这是CPU在单位时间内能处理的二进制数据的位数。在这个问题中,字长是32位。
-
存储容量:这是存储设备可以容纳的数据总量。本题中,存储容量为256MB。
-
寻址范围:这是CPU可以直接访问的内存地址的数量。它与字长和存储容量有关。
按字编址的寻址范围是:0~64M。也即0000000~3FFFFFFH 计算步骤:
256M字节=256*1024*1024*8位, 按计算机按32位字长单字编址。则单字的位数为32位,范围为(256*1024*1024*8位)/32位=64M
此外若 计算机按32位字长半字编址。则半字的位数为16位,范围为(256*1024*1024*8位)/16位=128M 计算机按32位字长双字编址。则双字的位数为64位,范围为(256*1024*1024*8位)/64位=32M
(21)主存储器和 CPU 之间增加 cache 的目的是( )
A、解决 CPU 和主存之间的速度匹配问题 B、扩大主存储容量
C、扩大 CPU 中通用寄存器的数量
D、既扩大主存储器容量,又扩 CPU 中通用寄存器的数量
解析:
Cache 是一个容量小但速度快的存储器阵列,位于主存和处理器内核之间。它的存在主要是为了减小慢速存储器(如主存)给处理器内核造成的存储器访问瓶颈问题的影响。
由于 CPU 的速度远远快于主存,因此,在 CPU 和主存之间加入一个高速的 cache,可以存储最近一段时间 CPU 涉及到的主存块内容。
这样,当 CPU 需要读取数据时,它首先会检查 cache,如果数据在 cache 中(即 cache 命中),则 CPU 可以直接从 cache 中快速读取数据,而无需等待慢速的主存响应。这大大提高了系统的性能。
(22)用 512K×16 位的 Flash 存储器芯片组成一个 2M×32 的半导体只读存储器, 试问:
1. 数据寄存器多少位?
2. 地址寄存器多少位?
3. 共需要多少个这样的存储器件?
4. 画出此存储器的组成框图。
自写: