去百度查课后答案的时候,发现这本教材至少11年没有发生改动。虽然这本书涉及都是一些原理性的东西,和时代无关,这门课对我们来说也不过是一门学过就忘的课,但我还是觉得这种“万年不变”的教学态度有问题,需要加以改正。
计算机组成原理复习:第六章 中央处理器
本章主要在讲CPU(中央处理器)。本章先整体介绍了CPU的组成结构、性能参数等内容,之后稍微介绍了CPU的硬件实现,再具体介绍了CPU的整个控制工作原理。由于CPU执行指令的时候涉及一些微操作,本章接着又进一步介绍了微操作的有关内容。介绍完了CPU的基本工作原理后,本章又介绍了一个简单CPU应支持的操作。最后本章介绍了CPU相关的新技术。
CPU实际上包括运算器和控制器。运算器主要涉及的计算方法在之前章节已经介绍过。这一章实际的重点是控制器的实现。
考试重点应该是放在对CPU执行指令的过程和微操作的原理上。要理解CPU指令的执行过程,对于一个给定的操作,要能够写出CPU每一步在做什么。
和上一章一样,我只对比较重点的地方进行复习。
CPU的基本组成
其实CPU的组成主要是讲CPU里有哪些寄存器。寄存器可以分成通用和专用。专用的寄存器是只有固定用途的寄存器,而通用寄存器可以根据实际需要使用。可以看成预定义常量和变量,或是操作系统中的系统内存和用户内存。
专用寄存器有:
- 程序计数器PC
- 指令寄存器IR
- 存储器数据寄存器MDR
- 存储器地址寄存器MAR
- 程序状态字寄存器PSWR
这里只是提一下这些寄存器的名字,后面讲CPU的控制原理的时候还会提到这些寄存器,到那个时候才能理解这些寄存器在干什么。这里提一下就当是在声明变量。
处理寄存器外,CPU中还有一个指令译码器IR,用于识别指令中的操作码。还有一个控制单元CU,大名叫微操作信号发生器。它是CPU控制功能的核心。
CU的实现方式在复习PPT中被列成了重点,我不得不看了一下。CU的实现大致分两种,组合逻辑控制器和微程序控制器。其实控制的微操作和程序设计一样,也是模块化的。组合逻辑控制器追求速度,却无法拓展,难以调试,难以实现自动化设计。微程序控制器的特点与之相反。(我没搞懂什么是自动化设计)
除了这些外,CPU中还有ALU,但这不是本章的重点。
时序系统
时序系统是CPU的工作基础。和游戏一样,CPU的工作也有基本的时间单位。这种和最小时间单位有关的系统就是时序系统。
这里自顶向下地介绍整个时序系统。指令周期是指从取指令、取数到完成指令整个过程需要的时间。各种指令所需的指令周期不同。指令周期会拆成机器周期(CPU)周期,每个机器周期干一个特定的活,比如取值周期、取数周期。机器周期又要完成若干微操作,每个微操作占用的时间叫做节拍。每个节拍最终由几个脉冲组成。脉冲是最小的时间单位。
指令执行过程
这一部分是CPU控制原理的核心。
指令执行过程分成三个阶段:取指令阶段、分析取数阶段和执行阶段。
取指令阶段
从宏观上来讲,这一阶段把指令从主存中取出来并存到指令寄存器中。具体来说分以下几步:
- (PC)->MAR
- CU向存储器发读命令 Read
- 取出的指令存到MDR中 M(MAR)->MDR
- 把MDR的内容送到IR中 (MDR)->IR
- PC自增 (PC)+1->PC
分析取数阶段
根据指令,取操作数。由前几章的内容可知,指令中的操作数可能表达得十分“晦涩”,可能要通过多次间接寻址才能得到。
如果操作数不用寻址,那么就不用进行此阶段。
比如要取@R0,即以R0的值为地址,到主存中取数。那么操作有以下几步:
- (R0)->MAR
- Read
- M(MAR)->MDR
执行阶段
现在我们有了函数,有了函数参数,接下来的任务就是执行指令并将结果保存。
比如把数相加的执行阶段指令有以下几步(MAR已经是目标存储寄存器的地址):
- (R1)+(Y)->Z
- (Z)->MDR
- Write
比如转移A步指令的执行阶段有以下几步:
- (PC)->Y
- Ad(IR) + (Y) -> Z
- (Z)->PC
微程序原理
基本概念介绍
之前CPU执行的每一步操作,都叫做微操作。对于指令来说,这些微操作都是不可再分的操作。但是从微操作的角度来看,微操作还可以分成很多个更细致的操作,比如打开某个逻辑门等。这些更细致的操作叫微命令。不同的微操作之间可能会公用相同的微命令。引入程序设计的思想,微命令的重用和模块化非常关键。微程序控制的思想也因此被提出来了。
一个机器指令就对应一个微程序。一个微程序里可以分成多个微指令,微指令就是一个一个函数。和CPU的指令类似,微指令也分为操作码和地址码。但微指令的地址码只包括下一条要执行的微指令的地址,而不是存数据的地址。在微指令中,微命令就是原子操作,和程序中的语句相同。
微指令编码
微指令编码指对微指令的操作码编码。操作码译码的结果是得到一个01序列,表示执行哪些微命令。
最显然的两种编码法是直接编码法和最短编码法。前者令操作码每一位都表示一个微命令是否执行,后者进行完全编码,每次只能产生一个微命令的输出。由于微命令可以并行,但又不是每种操作都能并行,因此第一种方法编码长度过长,而第二种方法无法进行并行。
一种折衷二者的方案是:事先知道哪些操作不能并行,把这些操作分成一组,进行完全编码。整个操作码就被分成了一个一个完全编码的字段。
课后有一道这方面的题目。考试估计会考。
组成部件
- 控制存储器CM,存了一堆微程序
- μIR,微指令寄存器,和IR类似
- 微地址形成部件,用于形成初始微地址和后续微地址
- μMAR,微地址寄存器,和MAR类似,但不是从内存而是从CM中取指令