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

时间:2019-02-18 11:40:48

标签: cpu-architecture

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

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

1 个答案:

答案 0 :(得分:2)

  

哪个单元或组件控制诸如增量的操作   程序计数器,将指令加载到IR等   提取,解码,执行,写入周期?

处理器可以具有中央控制单元或分布式控制单元。没有流水线或具有两级流水线(即获取和执行)的处理器使用集中式控制单元。更复杂的处理器使用分布式控制,其中流水线的每个阶段都可以生成控制信号。术语 control 指的是诸如获取指令,从存储器读取数据或将数据写入存储器,确定可以执行给定指令的执行单元以及确定指令之间的依存关系等操作。这与术语数据路径相反,后者是指CPU中包含执行单元和寄存器的部分。

古代的CPU由两个部分组成,分别称为控制路径(又称控制单元)和数据路径。您可能已经在计算机体系结构教科书中看到了这些术语。此类CPU的一个示例是Intel8086。在8086中,控制单元称为总线接口单元(BIU),负责以下任务:

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

8086的数据路径也称为执行单元,它负责以下任务:

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

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

  

如果是控制单元,它如何知道何时执行   操作吗?

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

  

除了这些任务以外,操作系统是否参与其中?   计划执行哪个程序?

否。

  

操作系统是32位还是64位为什么重要?我们不应该担心   关于这种情况下的编译器或解释器?

这取决于处理器是否支持32位操作模式和64位操作模式。寄存器的数量和/或大小以及支持的功能在不同的模式下是不同的,这就是指令编码不同的原因。例如,32位x86指令集定义8个32位通用体系结构寄存器,而64位x86指令集(也称为x86-64)定义16个64位通用体系结构寄存器。另外,虚拟内存地址的大小在x86-64上为64位,在x86上为32位,这不仅影响指令编码,而且影响可执行二进制文件的格式(请参见Executable and Linkable Format)。现代的x86处理器通常支持两种操作模式。由于指令编码不同,因此包含指令的二进制可执行文件在不同的模式下也不同,并且只能在为其编译的模式下运行。 32位OS意味着OS的二进制文件要求处理器以32位运行。这也对要在OS上运行的任何应用程序也必须为32位构成了限制,因为32位OS不知道如何运行64位应用程序(因为ABI不同)。另一方面,通常,将64位操作系统设计为同时运行32位和64位应用程序。

如果运行gcc的操作系统是64位,则默认情况下gcc编译器将发出64位x86二进制文件。但是,您可以通过指定-m32编译器开关来覆盖该设置,以使其发出32位x86二进制文件。您可以使用objdump来观察32位可执行文件和64位可执行文件之间的许多区别。