哪个组件管理或向处理器中的控制单元提供指令?

which component manages or provides instructions to the control unit in a processor?

我是计算机体系结构的新手,有以下问题,

  1. 哪个单元或组件控制操作,例如递增程序计数器、将指令加载到 IR 以及另一个获取-解码-执行-写入周期?
  2. 如果是控制单元,它怎么知道什么时候执行操作?
  3. 除了调度要执行的程序外,操作系统是否参与了这些任务中的任何一项?
  4. OS 是 32 位还是 64 位有什么关系?在这种情况下我们不应该担心编译器或解释器吗?

Which unit or component controls operations such as incrementing program counter, loading the instruction to the IR and the other Fetch- decode-execute-write cycle?

一个处理器既可以有一个集中控制单元,也可以有一个分布式控制单元。非流水线或具有两级流水线(即获取和执行)的处理器使用集中控制单元。更复杂的处理器使用分布式控制,其中流水线的每个阶段都可以生成控制信号。术语control指的是诸如取指令、从内存读取数据和写入数据、确定可以执行给定指令的执行单元以及确定指令之间的依赖关系等操作。这与术语 datapath 形成对比,它指的是 CPU 中包含执行单元和寄存器的部分。

古代 CPU 由两个组件组成,称为控制路径(又名控制单元)和数据路径。您可能在计算机体系结构教科书中看到过这些术语。这种CPU的一个例子是Intel 8086。在8086中,控制单元称为总线接口单元(BIU),负责以下任务:

  • 正在计算下一条要获取的指令的物理地址。
  • 正在计算内存的物理地址或 I/O 要读取或写入的位置(即执行加载和存储操作)。
  • 正在从内存中获取指令字节并将它们放入缓冲区。
  • 读取和写入内存或 I/O 设备。

8086的datapath也称为执行单元,负责以下任务:

  • 正在读取要执行的指令指定的寄存器的值。
  • 正在将指令的结果写入指定的寄存器。
  • 生成分支结果或内存或 I/O 向 BIU 请求。在任何给定周期,BIU 必须在执行 read/write 操作或指令获取操作之间进行仲裁。
  • 正在执行 ALU 中的指令。

8086可以说是一个流水线处理器,有两个阶段对应两个单元。基本没有解码;指令字节硬连接到 ALU 和寄存器文件以执行指定的操作。

If it is the control unit, how does it know when to perform the operations?

每条指令都有一个操作码,它只是一堆标识需要由 ALU(在 8086 上)执行的操作的位。操作码位可以简单地通过设计硬连线到 ALU,以便它自动执行正确的操作。指令的其他位可以指定操作数或寄存器标识符,这些操作数或寄存器标识符可以传递给寄存器文件以执行寄存器读取或写入操作。

Is the Operating system involved in any of these tasks except scheduling which program to execute?

没有

Why does it matter if the OS is 32 bit or 64 bit? Shouldn't we worry about the compiler or interpreter in this case?

这取决于处理器是否支持32位运行模式和64位运行模式。寄存器的个数and/or大小和支持的特性在不同的模式下是不同的,这也是指令编码不同的原因。例如,32 位 x86 指令集定义了 8 个 32 位通用架构寄存器,而 64 位 x86 指令集(也称为 x86-64)定义了 16 个 64 位通用架构寄存器。此外,虚拟内存地址的大小在 x86-64 上是 64 位,在 x86 上是 32 位,这不仅会影响指令编码,还会影响可执行二进制文件的格式(参见 Executable and Linkable Format). A modern x86 processor generally supports both modes of operation. Since the instruction encoding is different, then the binary executables that contain them are different for different modes and can only run in the mode they are compiled for. A 32-bit OS means that the binaries of the OS require the processor to operate in 32-bit. This also poses a restriction that any application to be run on the OS must also be 32-bit because a 32-bit OS doesn't know how to run a 64-bit application (because the ABI 不同) .另一方面,通常情况下,64 位 OS 旨在 运行 32 位和 64 位应用程序。

gcc 编译器默认情况下会生成 64 位 x86 二进制文件,如果 OS 它 运行ning 是 64 位的。但是,您可以通过指定 -m32 编译器开关来覆盖它,以便它发出 32 位 x86 二进制文件。您可以使用 objdump 来观察 32 位可执行文件和 64 位可执行文件之间的许多差异。