计算机组成与体系结构期末考试样题

做一套计算机组成原理的试卷感受一下题型:现在刚到简答题,感觉需要学得很透彻才可以啊。

选择题

问题 1:

The part of machine instruction, which tells the central processor what was to be done.

A. operation code
B. address
C. operand
D. none of the above

答案: A. operation code

解释:

  • 操作码(Operation Code,简称 Opcode) 是机器指令的一部分,它告诉中央处理器(CPU)执行什么操作。操作码通常定义了指令的类型,例如加法、减法、数据传送等。

操作码(Operation Code,简称 Opcode) 是机器指令的一部分,它指示中央处理器(CPU)执行的具体操作。每条机器指令通常由几个部分组成,其中操作码是其中最重要的一部分。

  1. 机器指令的结构
    • 机器指令通常由多个字段组成,常见的结构包括:操作码(Opcode)、操作数(Operand)和地址(Address)。
    • 操作码告诉处理器该执行哪种操作,如加法、减法、数据传输等。
    • 操作数通常指定操作对象或操作数据的存储位置。
    • 地址字段通常用于指定操作数所在的内存地址。
  2. 操作码的作用
    • 操作码是指示指令的功能部分。例如,如果操作码是加法指令,它告诉处理器进行加法操作。如果操作码是数据传输指令,它会要求将数据从一个位置传输到另一个位置。
    • 不同的处理器体系结构会有不同的操作码格式,通常会有一个或多个比特位专门用来表示操作码。
  3. 操作码的表示
    • 操作码通常用二进制数表示,例如:在某些计算机体系结构中,操作码可能是8位、16位或32位的二进制数。
    • 例如,在x86架构中,指令的第一个字节通常是操作码,它决定了接下来的操作类型。
  4. 指令集架构(ISA)
    • 操作码的设计与计算机的指令集架构(Instruction Set Architecture,简称 ISA)密切相关。不同的计算机体系结构有不同的指令集和对应的操作码格式。
    • 例如,Intel的x86架构和ARM架构有各自不同的操作码格式和指令集。
  5. 操作码与机器语言
    • 在机器语言中,操作码是处理器识别指令的关键部分。通过解析操作码,CPU能够知道如何处理随后的数据或操作数。

问题 2:

Which of the following is not the basic I/O method in a computer system?

A. DMA approach
B. interrupt-driven
C. event-driven
D. program-controlled I/O

答案: C. event-driven

解释:

  • 事件驱动(Event-driven) 不是计算机系统中常见的基本I/O方法。常见的I/O方法有:
    • DMA(Direct Memory Access):直接内存存取,允许外设直接访问内存,减少CPU负担。
    • 中断驱动(Interrupt-driven):外设通过中断信号通知CPU进行数据传输。
    • 程序控制I/O(Program-controlled I/O):CPU主动控制数据的输入输出。

事件驱动 更常见于用户界面编程和异步操作中,不属于计算机系统的标准I/O方法。

  • 计算机系统通常通过以下三种基本的 I/O 方法来处理输入输出操作:
  1. DMA(Direct Memory Access)直接内存存取
    • DMA 允许外设(如硬盘、网卡等)直接访问系统内存,绕过 CPU,从而提高 I/O 操作的效率。它常用于大规模的数据传输,如磁盘和内存之间的数据交换。CPU 只在 DMA 启动和完成时进行干预,极大减轻了 CPU 的负担。
    • 优势:减少了 CPU 的参与,提高了数据传输效率。
    • 应用:常见于磁盘、音视频处理等大数据量传输场景。
  2. 中断驱动 I/O(Interrupt-driven I/O)
    • 在中断驱动 I/O 中,外设通过发送中断信号通知 CPU,当外设准备好数据时,CPU 立即停止当前任务,响应中断进行数据传输。
    • 优势:相比程序控制 I/O,能够减少 CPU 的空闲时间,更高效地利用 CPU。
    • 应用:常见于需要实时响应的外设,如键盘、鼠标、网络接口等。
  3. 程序控制 I/O(Program-controlled I/O)
    • 在程序控制 I/O 中,CPU 直接控制 I/O 操作,程序会主动发起对外设的查询并传输数据,直到完成操作。
    • 缺点:会占用 CPU 时间,效率较低。
    • 应用:适用于 I/O 需求较小、速度要求不高的场合。

2. 事件驱动(Event-driven)

  • 事件驱动 是一种编程模型,通常用于异步操作,如图形用户界面(GUI)编程或某些网络编程中。它不是直接用于硬件 I/O 操作的基本方法,而是基于事件的触发机制。例如,当用户点击按钮时触发一个事件,然后由程序响应。
  • 常见应用:图形界面编程、Web 编程等。比如 JavaScript 中的事件驱动模型,GUI 程序中按钮点击或窗口重绘等操作都属于事件驱动。
  • 优势:使程序能够响应异步事件,不需要持续的轮询和等待。
  • 区别:与 I/O 操作不同,事件驱动更侧重于响应外部输入或状态变化,而 I/O 方法则主要是如何高效地进行数据交换。

3. 总结

  • DMA、Interrupt-driven I/O 和 Program-controlled I/O 是计算机中常用的三种基本 I/O 方法,它们主要用于硬件设备与 CPU 或内存之间的数据传输。
  • 事件驱动 更常见于软件层面的设计,尤其是在异步操作或用户界面设计中,不属于硬件 I/O 操作的基本方法,因此它不被视为计算机系统中的标准 I/O 方法。

问题 3:

In carry-lookahead adder, the expression _____ is called the propagate function Pi for stage i.

A. xi + yi
B. xi ⊕ yi
C. xi yi
D. xi ⊕ yi ⊕ ci

答案: B. xi ⊕ yi

解释:

  • 进位前瞻加法器(Carry-Lookahead Adder)中,传播函数(propagate function)用于判断某一位是否会将进位信号传递给下一位。传播函数通常用异或(⊕)表示,即 Pi = xi ⊕ yi。如果该位有进位,则它会影响下一位的进位计算。
  • xiyi 分别表示两个加数的第i位输入, 表示异或运算。

进位前瞻加法器(Carry-Lookahead Adder,CLA)中,传播函数(propagate function)生成函数(generate function) 是用于高效计算进位信号的重要概念。

1. 进位前瞻加法器(Carry-Lookahead Adder)

  • 进位前瞻加法器的目的是加速进位的计算过程。传统的加法器(如串行加法器)依赖于每一位的进位信号逐步传递,而进位前瞻加法器通过预先计算每一位可能的进位情况,减少了计算进位所需的时间。
  • 进位前瞻加法器使用传播函数(Pi)和生成函数(Gi)来预先判断进位的传播和生成,进而快速确定最终的进位。

2. 传播函数(Propagate Function)

  • 传播函数(Pi) 用于确定某一位的加法是否会将进位信号传播到下一位。
  • 对于第 i 位,传播函数的表达式是: $ P_i = x_i y_i $ 其中,x_iy_i 是两个加数的第 i 位输入, 是异或运算符。
  • 如果 Pi = 1,说明该位会将进位传递到下一位;如果 Pi = 0,说明该位不会产生进位传递。

3. 生成函数(Generate Function)

  • 生成函数(Gi) 用于判断某一位是否会生成进位信号。对于第 i 位,生成函数的表达式是: $ G_i = x_i y_i $ 如果 Gi = 1,说明该位无论是否有进位输入,都将会生成一个进位信号。

4. 进位计算公式

  • 在进位前瞻加法器中,进位的计算依赖于前一位的进位以及当前位的生成和传播函数。具体而言,第 i 位的进位可以通过以下公式计算: $ C_{i+1} = G_i (P_i C_i) $ 其中,C_i 表示第 i 位的进位输入,C_{i+1} 是第 i+1 位的进位输出,G_iP_i 分别是第 i 位的生成和传播函数。

5. 总结

  • 传播函数(Pi) 是用于判断某一位是否会将进位信号传递给下一位,公式为 Pi = xi ⊕ yi。这是进位前瞻加法器中加速进位计算的关键因素之一。
  • 生成函数(Gi) 用于判断某一位是否会生成进位信号,公式为 Gi = xi * yi。通过这两个函数,进位前瞻加法器能够快速计算出每一位的进位,而不需要逐位传递进位,从而提高加法器的效率。

问题 4:

In hardwired control unit, the required control signals are determined by the following information except _____?

A. contents of the control step counter
B. contents of the instruction register
C. contents of the condition code flags
D. contents of the program counter

答案: D. contents of the program counter

解释:

  • 硬件控制单元(Hardwired Control Unit)中,控制信号的生成通常依赖于以下信息:
    • 控制步骤计数器的内容(A):用于指示当前的控制步骤,进而生成相应的控制信号。
    • 指令寄存器的内容(B):指令寄存器存储当前执行的指令,控制单元根据指令类型生成控制信号。
    • 条件码标志的内容(C):在某些操作后,条件码会改变(例如,零标志、负标志等),这影响后续操作的控制信号。

程序计数器(Program Counter,D)通常指示下一条将执行的指令的位置,而不是直接影响控制信号的生成。

硬件控制单元(Hardwired Control Unit)中,控制信号的生成是根据多个因素来确定的。

1. 硬件控制单元(Hardwired Control Unit)

  • 硬件控制单元通过一组固定的逻辑电路来生成控制信号。与微程序控制单元不同,硬件控制单元的控制信号是通过组合逻辑电路快速生成的,而不依赖于存储的程序。
  • 控制单元的任务是根据当前的指令和其他状态信息,生成一系列控制信号以驱动其他部件(如算术逻辑单元、寄存器、内存等)执行相应操作。

2. 硬件控制单元生成控制信号的依据

  • 硬件控制单元根据以下信息生成所需的控制信号:

    1. 控制步骤计数器的内容(A)
      • 控制步骤计数器(Control Step Counter)用于指示当前的控制步骤。每个控制步骤对应于机器指令的一个特定操作(例如,获取指令、解码、执行等)。控制单元根据当前步骤来决定生成哪些控制信号。
      • 例如,在获取指令步骤时,控制信号可能指示内存单元读取指令,而在执行步骤时,则会指示 ALU 执行算术运算。
    2. 指令寄存器的内容(B)
      • 指令寄存器(Instruction Register)存储当前正在执行的指令。控制单元根据指令的操作码(Opcode)来决定要执行的操作类型,并生成相应的控制信号。
      • 例如,如果指令是加法指令,控制单元会生成控制信号,使 ALU 执行加法操作。
    3. 条件码标志的内容(C)
      • 条件码标志(Condition Code Flags)是处理器中用于反映先前运算结果的一组标志,例如零标志、负标志、溢出标志等。
      • 在某些操作之后(如算术运算),条件码标志会根据结果进行更新。控制单元根据这些标志来决定是否执行跳转、分支等操作。
      • 例如,如果零标志为真,控制单元可能会生成一个跳转指令,跳过后续的指令。
    4. 程序计数器的内容(D)
      • 程序计数器(Program Counter,PC)存储下一条将被执行的指令的地址。虽然程序计数器对于确定下一条指令的位置非常重要,但它不直接决定控制信号的生成。
      • 程序计数器通常在指令获取阶段更新,指向下一个指令的位置,但其内容本身不会直接影响控制信号的生成。

3. 总结

  • 硬件控制单元根据以下信息生成控制信号:
    • 控制步骤计数器的内容(A):用于确定当前的操作步骤。
    • 指令寄存器的内容(B):存储当前指令,控制单元根据指令类型生成控制信号。
    • 条件码标志的内容(C):反映运算结果状态,影响后续操作的控制信号。
  • 程序计数器的内容(D)虽然用于指向下一条指令的地址,但它不直接影响控制信号的生成。控制信号的生成更多依赖于当前正在执行的指令及其相关状态。

问题 5:

When I/O devices and the memory share the same address space, the arrangement is called _____? A. 内存映射 I/O(memory - mapped I/O) B. 混合 I/O(mixed I/O) C. 独立 I/O(separated I/O) D. 相对 I/O(relative I/O)

答案: A. memory-mapped I/O

解释:

  • 内存映射I/O(memory-mapped I/O)是一种安排,其中I/O设备的地址与内存共享同一个地址空间。这意味着CPU可以通过内存操作指令(如读取或写入)来访问I/O设备。
  • 与此相对,分离I/O(separated I/O)是一种传统的方式,其中I/O设备有独立的地址空间,并且通过专门的I/O指令进行访问。

知识点:

  1. 内存映射I/O:
    • I/O设备地址与内存共享同一地址空间。
    • CPU使用标准的内存指令访问I/O设备。
    • 优点:简化设计,CPU对内存和I/O的访问方式一致。
  2. 独立I/O:
    • I/O设备有独立的地址空间。
    • 需要专门的I/O指令来访问设备。
    • 优点:隔离内存和I/O,减少冲突的可能性。

问题 6:

Suppose that a 2M x 16 main memory is built using 256K x 8 RAM chips and memory is word-addressable. How many RAM chips are necessary?

A. 4
B. 8
C. 16
D. 32

答案 C

解释

  1. 首先进行单位换算:
    • 已知主存是2M×16位,因为1M = 2²⁰,所以2M = 2×2²⁰ = 2²¹。这里的“2M×16”表示有2²¹个存储单元,每个存储单元16位。
    • 芯片是256K×8位,1K = 2¹⁰,所以256K = 256×2¹⁰ = 2⁸×2¹⁰=2¹⁸。这里的“256K×8”表示有2¹⁸个存储单元,每个存储单元8位。
  2. 然后计算所需芯片数:
    • 对于字寻址,主存的字长是16位,芯片字长是8位,所以在字长方向上需要\(16\div8 = 2\)个芯片来组成一个16位的字。
    • 在存储单元数量方面,主存存储单元数为2²¹,芯片存储单元数为2¹⁸,所以在存储单元数量方向上需要\(2^{21}\div2^{18}=2^{21 - 18}=2^{3}=8\)个芯片。
    • 总共需要的芯片数为\(2\times8 = 16\)个。

该问题涉及到计算存储器芯片的数量,下面是详细解释:

1. 内存容量和字长的单位

  • 内存容量通常以“字(word)”为单位。一个“字”可能包含多个比特(bit)。在这个问题中,内存是字寻址的,即每个地址表示一个16位(2字节)的数据。
  • 主存(Main Memory)的容量是 2M x 16位,意味着总共有2M(2²¹)个存储单元,每个存储单元为16位。

2. RAM芯片的配置

  • 每个RAM芯片的规格是 256K x 8位,即每个芯片包含256K(2¹⁸)个存储单元,每个存储单元为8位。
  • 每个芯片提供的存储单元是8位,而主存中每个单元是16位,这就意味着需要两个8位的芯片来组成一个16位的存储单元。

3. 如何计算所需的芯片数

  • 存储单元数量:首先计算主存的存储单元数。主存总共有 2M x 16位,即有2²¹个存储单元,每个存储单元16位。每个芯片提供的是8位的存储单元,所以对于存储单元数量方向的芯片数量需要根据主存和芯片的存储单元数来计算: $ = = = 2^3 = 8 $ 因此,在存储单元数量方面需要8个芯片。

  • 字长方向:主存的字长是16位,每个芯片的字长是8位。因此,为了组成一个16位的字,需要2个芯片。

  • 总芯片数量:因此,所需的总芯片数为存储单元方向所需的芯片数与字长方向所需芯片数的乘积: $ = 2 = 16 $

4. 总结

  • 需要的RAM芯片数量是16个,即C. 16个芯片。

5. 知识点总结

  • 单位换算:在计算存储器容量时,要注意单位的转换,如K、M、G等的换算关系。
  • 字寻址字长:字寻址模式下,每个内存地址代表一个完整的字,而字长决定了每个字的位数。
  • RAM芯片的容量:每个RAM芯片有自己的存储单元数和位数,在计算所需芯片数时,需要考虑存储单元数和字长的匹配。
  • 所需芯片数的计算通常依赖于主存容量、字长以及单个芯片的存储容量。

简答题

问题: What is the difference between a subroutine and an interrupt-service routine?

答案:

  1. 定义:
    • 子程序(Subroutine):是程序中的一段代码块,可以在程序的不同地方被调用。它用于完成特定的任务,通常由程序员显式地调用。
    • 中断服务程序(Interrupt-Service Routine,ISR):是响应硬件或软件中断请求的程序段。它会在中断事件发生时自动执行,通常由操作系统或硬件控制器触发,而不是由程序员显式调用。
  2. 调用方式:
    • 子程序:通过程序中的指令显式调用(例如:函数调用)。
    • 中断服务程序:通过硬件中断信号自动触发执行,不需要程序员的显式调用。
  3. 执行时机:
    • 子程序:按照程序的顺序在需要时执行。
    • 中断服务程序:在程序运行过程中,当中断事件发生时,立即暂停当前程序的执行,去执行ISR。
  4. 控制权:
    • 子程序:执行完后控制权返回到调用它的地方。
    • 中断服务程序:执行完后,控制权返回到中断发生前的地方,继续执行中断之前的程序。

解释:

  • 子程序和中断服务程序的主要区别在于它们的触发方式和执行时机。子程序是由程序员显式调用的,用于完成特定功能,而中断服务程序则是由外部事件(如硬件信号)自动触发的,通常用于处理紧急任务(例如处理外设输入、定时器等)。当中断发生时,CPU会中断当前程序的执行,转而执行中断服务程序。

问题: What are the advantage(s) and disadvantage(s) of hardwired control unit?

答案:

优点:

  1. 速度快:硬件控制单元通过固定的电路结构直接控制各个部分的操作,因此响应速度快,能够快速执行指令。
  2. 简单:硬件控制单元设计相对简单,因为它不需要处理复杂的指令解析和状态管理,硬件电路直接完成控制逻辑。
  3. 高效:由于硬件控制单元是专门设计的,它的执行效率相对较高,可以有效减少指令的执行周期。

缺点:

  1. 灵活性差:硬件控制单元的控制逻辑是固定的,因此如果需要改变或扩展功能,就必须重新设计硬件,这导致了缺乏灵活性。
  2. 扩展困难:随着新的指令集或功能的增加,硬件控制单元可能需要大量修改电路,这使得系统的扩展性差。
  3. 设计复杂:虽然控制单元本身可能较为简单,但为了适应不同的指令集和操作需求,设计一个高效的硬件控制单元仍然是一个复杂的任务。

解释:

硬件控制单元是一种通过固定的电路实现控制逻辑的系统。在这种控制单元中,所有的控制信号和指令解码都是通过物理电路直接实现的。这种方式的优势在于它可以提供非常快的执行速度,因为它省去了很多复杂的计算和解析过程,适用于那些执行速度要求较高的应用。然而,它的缺点也很明显:硬件一旦设计完成,就很难进行修改或扩展,这使得系统的灵活性和可扩展性受到限制。随着技术和需求的发展,硬件控制单元常常不如微程序控制单元灵活,后者可以通过软件来更新和修改控制逻辑。

问题: What are the difference(s) between write-through protocol and write-back protocol?

答案:

1. 数据写入的时机:

  • 写直达协议(Write-through):每当数据被写入缓存时,数据同时也会被写入主存(内存)。即,缓存和主存的数据始终保持同步。
  • 写回协议(Write-back):数据首先写入缓存,只有当缓存中的数据被替换或失效时,才会将数据写回主存。主存和缓存中的数据可能会不一致,直到缓存数据被更新到主存。

2. 缓存一致性:

  • 写直达协议:保持缓存和主存的一致性,因为每次写操作都会同步到主存。
  • 写回协议:缓存和主存的内容可能在某些时刻不一致,因为写操作仅发生在缓存中,直到缓存被替换或刷新。

3. 写操作的数量:

  • 写直达协议:每次写操作都会涉及到两次写操作,一次写入缓存,一次写入主存。
  • 写回协议:写操作只涉及缓存,写入主存的操作较少,只有当缓存数据被替换或失效时才会写回主存。

4. 性能影响:

  • 写直达协议:由于每次写操作都需要同步写入主存,可能会导致较大的写延迟,降低系统的性能。
  • 写回协议:由于写操作仅在缓存中进行,减少了写入主存的次数,通常会提高性能,尤其是在频繁写操作的情况下。

5. 数据一致性管理:

  • 写直达协议:数据一致性较容易维护,因为每次写操作都会同时更新缓存和主存。
  • 写回协议:需要更复杂的数据一致性管理,确保缓存中的数据在被替换时正确地写回主存。

解释:

  • 写直达协议适用于对数据一致性要求较高的情况,因为它确保了缓存和主存始终同步更新。然而,这种方法的性能较差,因为每次写操作都需要访问主存。

  • 写回协议则适用于对性能要求较高的场合,它通过减少对主存的访问来提高写操作的效率,但由于缓存中的数据与主存之间可能不一致,因此需要更复杂的机制来管理数据的一致性。

问题: What are the differences between memory access time and memory cycle time?

答案:

什么是内存访问时间?什么是内存周期时间?解释它们之间的关系。

答案: 内存访问时间是从提供地址到获取有效数据的时间。

定义:内存访问时间是指从提供地址(地址总线传送)到获取有效数据的时间。

过程:当处理器需要从内存中读取数据时,它首先将地址发送到内存。内存接收到地址后,根据地址找到相应的数据并返回给处理器。内存访问时间就是从发出地址请求到接收到数据这段时间。

内存周期时间是从一次内存访问到下一次内存访问的时间。

定义:内存周期时间是指从一次内存访问完成到下一次内存访问开始的时间。也就是说,它是从一次内存操作完成后,内存准备好下次访问所需的时间。

过程:每次对内存的访问都需要一段时间,不仅仅包括数据的获取时间,还包括内存“恢复”的时间,使得内存可以准备好接收下一个请求。

它们的关系是: 内存周期时间 = 内存访问时间 + 恢复时间 解释:内存周期时间包括内存访问时间和恢复时间,恢复时间是内存准备好下一次访问所需要的额外时间。

问题: What is the usual step of interrupt-service routine?

答案:

步骤:

  1. 保存现场(Save Context):
    中断服务程序首先会保存当前程序的执行状态(即现场),包括程序计数器(PC)、寄存器内容等。这是为了确保中断处理完后,能够恢复到中断前的执行状态。

  2. 确定中断来源(Identify Interrupt Source):
    系统需要确定是哪个中断源触发了中断。这通常通过检查中断控制器或状态寄存器来完成。

  3. 处理中断(Process the Interrupt):
    根据中断源,执行相应的中断服务代码。例如,如果是外设中断,可能需要读取或写入外设数据;如果是定时器中断,可能需要更新系统计时。

  4. 恢复现场(Restore Context):
    执行完中断处理后,恢复之前保存的现场,包括程序计数器和寄存器的内容,确保程序能够继续从中断发生前的状态正常运行。

  5. 中断返回(Return from Interrupt):
    中断服务程序最后执行一个中断返回指令,通常是通过“中断返回”指令(如IRETRET)来实现,控制权回到被中断的程序中。

解释:

中断服务程序(ISR)是处理硬件或软件中断请求的程序。当一个中断事件发生时,CPU会暂停当前程序的执行,转而执行ISR。为了确保系统可以正确地恢复到中断前的状态,ISR需要执行一系列步骤:保存当前的执行状态(现场保存),然后确定中断源并执行相应的处理,最后恢复现场并返回中断前的程序。这一系列操作确保了中断对系统的影响最小,并保证系统可以在处理中断后继续执行原有任务。


虚拟内存问题:

本题涉及一个内存系统,相关规格如下:

  • 采用字节寻址方式。
  • 虚拟地址空间为 4G 字节。
  • 主存大小为 16M 字节。
  • 缓存大小为 256K 字节。
  • 页面大小为 64K 字节。
  • 块大小为 128 字节。
  • 映射策略:主存到缓存为 4 路组相联;硬盘到主存为完全相联。并且虚拟地址先转换为物理地址,再用物理地址访问缓存。

问题及解答

以下是这道题的详细答案:

(1) 计算缓存中的组数

在4路组相联映射方式下,计算组数的公式为: \(组数 = \frac{缓存大小}{(路数×块大小)}\)

已知缓存大小为\(256K\)字节(\(256\times1024\)字节),路数为\(4\),块大小为\(128\)字节,则:

\(组数 = \frac{256\times1024}{4\times128}\)$ = 512$(组)

所以缓存中有\(512\)组。

(2) 计算缓存的标记字段长度

  1. 首先确定物理地址的位数: 主存大小为\(16M\)字节(\(2^{24}\)字节),所以物理地址需要\(24\)位来表示。
  2. 然后分析各部分所占位数
    • 块大小为\(128\)字节(\(2^{7}\)字节),所以块内偏移需要\(7\)位来表示,用于确定在一个块内具体的字节位置。
    • 前面已算出缓存有\(512\)组(\(2^{9}\)组),所以组索引需要\(9\)位来表示,用于定位到缓存中的具体组。
  3. 最后计算标记字段长度: 标记字段长度 = 物理地址位数 - 组索引位数 - 块内偏移位数,即\(24 - 9 - 7 = 8\)(位)

所以缓存的标记字段长度为\(8\)位。

(3)

  • 虚拟地址对应的虚拟页存储在物理页 \(3E_{16}\),需要计算物理地址和缓存相关信息。
① 物理地址是多少?
  • 虚拟地址 \(0B45DA12_{16}\) 的页面偏移为:虚拟地址的低16位部分 \(DA12_{16}\)
  • 对应物理地址为:
    • 物理页号\(3E_{16}\)
    • 页面偏移\(DA12_{16}\)
  • 物理地址:将物理页号左移16位,再加上页面偏移: $ 物理地址 = 3E ^{16} + DA12 = 003EDA12_{16} $

答案:物理地址为 \(003EDA12_{16}\)


② 该地址对应的缓存组号是?
  • 物理地址结构
    • 标记(Tag):高8位(地址的[23:16]位)。
    • 组号(Index):中间9位(地址的[15:7]位)。
    • 块内偏移(Offset):低7位(地址的[6:0]位)。
  • 将物理地址 \(003EDA12_{16}\) 转化为二进制: $ 003EDA12_{16} = 0000 0011 1110 1101 1010 0001 0010_2 $
    • 组号:\([15:7]\),转换为十进制为 \(436_{10}\)

答案:该地址可能存储在缓存的第436组。


③ 该地址指向块内的哪个字节?
  • 块内偏移(Offset):低7位 \([6:0] = 0010010_{2}\),对应十进制为 \(18_{10}\)

答案:该地址指向块内的第18个字节。

RISC问题:

在一个5阶段流水线的RISC处理器中,执行指令 SUB R1, R2, R3 的具体步骤是什么?假设操作数为32位。


答案:

在5阶段RISC流水线处理器中,指令执行的步骤如下:

  1. 取指令(IF - Instruction Fetch)
    • 从程序计数器(PC)指定的内存地址中取出指令 SUB R1, R2, R3
    • 将指令放入指令寄存器。
    • 同时,将 PC 增加 4(因为是32位指令,每条指令占4个字节)。
  2. 指令译码与操作数取值(ID - Instruction Decode/Register Fetch)
    • 对指令 SUB R1, R2, R3 进行解码,确定其操作类型(减法)和操作数位置。
    • 从寄存器文件中读取寄存器 R2R3 的值。
  3. 执行/有效地址计算(EX - Execute/Effective Address Calculation)
    • 在算术逻辑单元(ALU)中执行减法操作,将 R2 的值减去 R3 的值。
  4. 访存(MEM - Memory Access)
    • 由于 SUB 指令是算术运算,不涉及内存访问,此阶段通常被跳过或作为一个空周期。
  5. 写回(WB - Write Back)
    • 将 ALU 计算的结果写入目标寄存器 R1

解释:

  1. 5阶段流水线处理器特点
    • 每个阶段只完成一个子任务,从取指令到写回结果。
    • 不同指令的操作可以重叠执行,以提高处理器效率。
  2. 指令细分
    • SUB R1, R2, R3 的含义是将 R2 减去 R3,结果存储在 R1 中。
  3. 流水线并行性
    • 在流水线中,每条指令的5个阶段并行进行。例如,当第1条指令处于 EX 阶段时,第2条指令处于 ID 阶段,第3条指令处于 IF 阶段。

总结

指令 SUB R1, R2, R3 在 5 阶段 RISC 处理器中的执行步骤为:

  1. IF:取指令。
  2. ID:解码指令并取寄存器值。
  3. EX:执行减法操作。
  4. MEM:跳过(无内存访问)。
  5. WB:将结果写回 R1

流水线问题

image-20241204203332093

本题暂且保留,对于一些细节我还不是很清楚。