计算机组成与体系结构:cpu的功能和结构

第八章 CPU的功能和结构

中央处理器(Central Processing Unit,CPU)是计算机系统的核心部件,负责执行程序中的指令,控制计算机各部件协调工作。CPU的基本功能包括:

指令控制: - 取指令:从存储器中读取下一条要执行的指令 - 分析指令:对取出的指令进行译码,确定要完成的操作 - 执行指令:根据译码结果发出控制信号,完成指令规定的操作

操作控制: - 根据指令的要求,产生相应的操作控制信号 - 将控制信号送往相应的部件,控制其动作 - 协调各部件之间的工作

时间控制: - 对各种操作进行时间上的控制 - 产生时序信号,确保各操作按正确的时序进行

数据加工: - 对数据进行算术运算和逻辑运算 - 完成数据的传送、转换和处理

中断处理: - 响应外部设备的中断请求 - 处理各种异常情况

现代CPU主要由以下功能部件组成:

运算器(ALU): - 执行算术运算(加、减、乘、除) - 执行逻辑运算(与、或、非、异或) - 执行比较操作和移位操作

控制器: - 程序计数器(PC):存放下一条要执行的指令的地址 - 指令寄存器(IR):存放当前正在执行的指令 - 指令译码器(ID):对指令进行译码,产生控制信号 - 时序产生器:产生时序信号,控制操作的时间顺序 - 操作控制器:根据译码结果和时序信号产生操作控制信号

寄存器组: - 通用寄存器:供程序员使用,存放操作数和中间结果 - 专用寄存器:如PC、IR、SP、PSW等 - 段寄存器:用于存储器分段管理

内部总线: - 连接CPU内部各部件,传送数据、地址和控制信息

图8-1:CPU内部结构示意图 CPU内部结构框图|500

通用寄存器是CPU中供程序员编程使用的寄存器,用于存放操作数、地址和中间结果。

x86架构的通用寄存器

数据寄存器(16位:AX, BX, CX, DX;32位:EAX, EBX, ECX, EDX): - AX(累加器):算术运算的主要寄存器,I/O操作必须使用 - BX(基址寄存器):常作为存储器寻址的基址 - CX(计数寄存器):循环计数和串操作计数 - DX(数据寄存器):I/O地址寄存器,乘除法中的辅助寄存器

这些寄存器都可以分成两个8位寄存器使用(如AH、AL)。

指针和变址寄存器(SP, BP, SI, DI): - SP(堆栈指针):指向栈顶 - BP(基址指针):访问堆栈中的数据 - SI(源变址):串操作的源地址 - DI(目的变址):串操作的目的地址

程序计数器(PC): - 存放下一条要执行的指令的地址 - 在取指周期后自动增量(增量取决于指令长度) - 转移指令会将目标地址送入PC,改变程序执行顺序

指令寄存器(IR): - 存放当前正在执行的指令 - 指令的操作码部分送指令译码器译码 - 指令的地址码部分用于形成操作数地址

存储器地址寄存器(MAR): - 存放要访问的存储单元的地址 - 地址来自PC(取指时)或地址形成部件(取数时)

存储器数据寄存器(MDR/MBR): - 存放从存储器读出或要写入存储器的数据 - 在CPU和存储器之间起缓冲作用

程序状态字寄存器(PSW/标志寄存器): 存放程序运行状态的各种标志: - 进位标志CF(Carry Flag) - 零标志ZF(Zero Flag) - 符号标志SF(Sign Flag) - 溢出标志OF(Overflow Flag) - 奇偶标志PF(Parity Flag) - 辅助进位标志AF(Auxiliary Carry Flag) - 方向标志DF(Direction Flag) - 中断允许标志IF(Interrupt Enable Flag) - 陷阱标志TF(Trap Flag)

x86架构采用分段存储管理,使用段寄存器存放段基址:

- CS(代码段寄存器):存放当前执行代码的段基址 - DS(数据段寄存器):存放当前数据段的段基址 - SS(堆栈段寄存器):存放当前堆栈段的段基址 - ES(附加段寄存器):附加的数据段 - FS/GS(386+):附加的数据段寄存器

指令周期是指CPU取出一条指令并执行这条指令所需的时间。一个完整的指令周期包括:

取指周期(Fetch Cycle): - 根据PC中的地址从存储器读取指令 - 将指令送入IR - PC增量,指向下一条指令

间址周期(Indirect Cycle): - 如果指令采用间接寻址,需要再次访存获取有效地址 - 不是所有指令都需要间址周期

执行周期(Execute Cycle): - 根据指令的操作码执行相应的操作 - 可能包括ALU运算、数据传送、地址计算等

中断周期(Interrupt Cycle): - 检查是否有中断请求 - 如果有且允许中断,则保存现场并转入中断处理程序

典型的指令执行流程如下:

``` 开始

取指周期:PC → MAR → 存储器 → MDR → IR, PC+1 → PC

译码:IR(操作码) → 指令译码器

计算操作数地址(如果需要)

取操作数(如果需要访存):地址 → MAR → 存储器 → MDR

执行操作

存结果(如果需要):结果 → MDR → 存储器 或 结果 → 寄存器

检查中断

返回取指周期 ```

【例题】分析“ADD R1, R2”指令(寄存器直接寻址)的执行过程。

假设该指令将寄存器R2的内容加到R1上,结果存入R1。

执行过程: 1. 取指周期:

  1. PC → MAR
  2. 存储器(MAR) → MDR
  3. MDR → IR
  4. PC + 1 → PC

2. 译码:

  1. IR的操作码送指令译码器
  2. 识别为加法指令,地址码指明R1和R2

3. 执行周期:

  1. R1的内容送ALU的一个输入端
  2. R2的内容送ALU的另一个输入端
  3. ALU执行加法运算
  4. ALU输出 → R1

4. 设置标志位:

  1. 根据运算结果设置ZF、SF、CF、OF等标志

【例题】分析“LOAD R1, 1000H”指令的执行过程。

执行过程: 1. 取指周期:(同上)

2. 译码:识别为取数指令,地址1000H为直接地址

3. 计算地址:

  1. IR的地址码(1000H) → MAR

4. 取操作数:

  1. 存储器(MAR) → MDR
  2. MDR → R1

5. 检查中断

控制器是CPU的核心部件,负责产生控制信号,指挥协调计算机各部件的工作。控制器主要由以下部分组成:

指令部件: - 程序计数器(PC) - 指令寄存器(IR) - 指令译码器(ID)

时序部件: - 脉冲源:产生基准时钟脉冲 - 启停控制逻辑:控制时钟的启动和停止 - 节拍信号发生器:产生节拍信号,将指令周期划分为若干时钟周期

微操作信号发生器: - 根据指令译码结果和时序信号,产生微操作控制信号

中断控制逻辑: - 处理中断请求,实现中断控制

时序系统是控制器的重要组成部分,它产生各种时序信号,确保计算机各部件协调工作。

指令周期:执行一条指令所需的全部时间。

机器周期(CPU周期):通常规定为访问一次存储器所需的时间。一个指令周期包含若干个机器周期。

时钟周期(T周期):CPU的基本时间单位,由主频决定。一个机器周期包含若干个时钟周期。

三者的关系: ``` 指令周期 = n × 机器周期 机器周期 = m × 时钟周期 ```

节拍信号的产生: - 节拍电位信号:表示一个机器周期内的不同阶段 - 节拍脉冲信号:在节拍电位有效期间产生的脉冲,用于触发具体操作

根据微操作控制信号的产生方式,控制器可以分为以下几种类型:

组合逻辑控制(硬布线控制): - 使用逻辑门电路产生控制信号 - 控制信号是操作码、时序信号和状态条件的逻辑函数 - 优点:速度快,适合RISC处理器 - 缺点:设计复杂,不易修改

微程序控制: - 将控制信号编成微指令,存放在控制存储器中 - 执行指令时,逐条取出并执行微指令 - 优点:规整性好,易于修改和扩展 - 缺点:需要额外的控制存储器访问时间

门阵列控制: - 使用可编程逻辑器件(如PLA)实现控制逻辑 - 结合了组合逻辑和微程序控制的优点

微程序控制的核心思想是将机器指令的执行过程分解为一系列基本的微操作,每个微操作由一组控制信号实现。将这些控制信号按时间顺序编成微指令,存放在控制存储器(CM)中。执行机器指令时,依次取出并执行相应的微指令。

基本概念

微命令:最基本的控制信号,直接控制执行部件完成最基本的动作。如打开某个门电路、启动某个ALU操作等。

微操作:由微命令控制实现的最基本操作。如“PC → MAR”就是一个微操作,需要发出将PC内容送MAR的控制信号。

微指令:一组微命令的集合,完成一个基本操作(如一次数据传送)。

微程序:一组微指令的有序集合,用于实现一条机器指令的功能。

控制存储器(CM):存放微程序的只读存储器,通常用ROM实现。

微指令的编码方式决定了如何将微命令编码到微指令中。

直接编码法(水平型微指令): - 微指令的每一位对应一个微命令 - 优点:微指令执行速度快,并行性好 - 缺点:微指令字长过长

字段直接编码法: - 将微命令分成若干组,每组内的微命令互斥(不能同时出现) - 每组用二进制编码,经译码后产生微命令 - 优点:缩短微指令字长 - 缺点:需要译码,速度略慢

字段间接编码法: - 某些微命令的译码受其他微命令的控制 - 进一步缩短微指令字长,但结构更复杂

混合编码法: - 将直接编码和字段编码结合使用 - 常用微命令采用直接编码,不常用微命令采用字段编码

水平型微指令: - 一次能定义并执行多个并行的微命令 - 微指令字长较长 - 效率高,速度快 - 适合高度并行的系统

垂直型微指令: - 一次只能执行一两个微命令 - 微指令字长较短 - 类似于机器指令的格式 - 规整性好,但并行性差,速度慢

水平型微指令的一般格式: ``` +—————-+—————-+—————-+

操作控制字段 顺序控制字段 其他字段

+—————-+—————-+—————-+ ```

操作控制字段:产生微命令,控制执行部件 顺序控制字段:决定下一条微指令的地址

微程序控制器的执行过程如下:

1. 取机器指令

  1. 从主存读取机器指令到IR

2. 转微程序入口

  1. 根据机器指令的操作码,通过微地址形成电路,得到对应微程序的起始地址
  2. 将起始地址送微地址寄存器(μAR)

3. 执行微程序

  1. 根据μAR从控制存储器读取微指令到微指令寄存器(μIR)
  2. 微指令的操作控制字段发出微命令,执行微操作
  3. 微指令的顺序控制字段决定下一条微指令的地址
  4. 重复直到微程序执行完毕

4. 返回

  1. 微程序执行完毕,返回取指微程序,准备执行下一条机器指令

流水线技术是将指令的执行过程分解为若干阶段,每个阶段由独立的硬件完成,多条指令在不同的阶段并行执行,从而提高指令执行效率。

流水线的基本思想: 类似于工厂的装配线,将复杂的操作分解为若干简单的子操作,每个子操作由专门的部件完成,不同指令的各个子操作在时间上重叠执行。

流水线的主要性能指标

吞吐率(Throughput):单位时间内流水线能完成的任务数。

加速比(Speedup):顺序执行时间与流水线执行时间的比值。

效率(Efficiency):流水线的设备利用率。

典型的五级指令流水线包括:

IF(取指,Instruction Fetch):从存储器读取指令

ID(译码,Instruction Decode):译码并读取寄存器

EX(执行,Execute):执行运算或计算地址

MEM(访存,Memory Access):访问数据存储器

WB(写回,Write Back):将结果写回寄存器

流水线执行示意(理想情况): ``` 时钟周期: 1 2 3 4 5 6 7 8 指令1 IF ID EX MEM WB 指令2 IF ID EX MEM WB 指令3 IF ID EX MEM WB 指令4 IF ID EX MEM WB 指令5 IF ID EX MEM WB ```

在理想情况下,流水线填满后,每个时钟周期可以完成一条指令。

流水线冒险是指由于各种原因导致流水线不能连续执行的情况。

结构冒险(Structural Hazard): - 原因:硬件资源冲突,多条指令需要同时使用同一硬件资源 - 示例:存储器同时被取指和数据访问使用 - 解决:采用哈佛结构(分离的指令和数据存储器),或插入气泡

数据冒险(Data Hazard): - 原因:指令之间存在数据依赖,需要等待前面指令的结果 - 类型:

  1. RAW(写后读):后续指令需要读取前面指令写入的数据
  2. WAR(读后写):后续指令写入前面指令需要读取的位置
  3. WAW(写后写):两条指令写入同一位置

【例题】分析以下代码的数据冒险: ``` ADD R1, R2, R3 ; R1 = R2 + R3 SUB R4, R1, R5 ; R4 = R1 - R5 AND R6, R1, R7 ; R6 = R1 AND R7 ```

分析:SUB和AND指令都需要使用R1,而R1由ADD指令写入。如果ADD在MEM段写入,在WB段才将结果写入寄存器,而SUB在ID段就需要读取R1,就会发生RAW冒险。

- 解决方法:

  1. 数据前递(Forwarding):将ALU计算结果直接传送给需要它的指令
  2. 插入气泡:当无法前递时,暂停流水线等待数据就绪

控制冒险(Control Hazard): - 原因:分支指令和跳转指令改变了PC的值,导致预取的指令无效 - 解决:

  1. 预测不转移:假设分支不执行,预取下一条顺序指令
  2. 预测转移:假设分支执行,预取目标地址的指令
  3. 延迟分支:在分支指令后安排一条必定执行的指令
  4. 分支预测:使用分支目标缓冲器(BTB)预测分支结果

超标量处理器(Superscalar Processor)是指每个时钟周期可以发射和执行多条指令的处理器。

基本思想: 通过重复设置多条流水线,实现指令级的并行执行。例如,一个4路超标量处理器每个时钟周期可以发射4条指令。

关键技术: - 多发射:每个周期从指令序列中找出多条不相关的指令同时发射 - 动态调度:通过乱序执行(Out-of-Order Execution)提高流水线效率 - 寄存器重命名:解决WAR和WAW冒险 - 推测执行:预测分支结果并提前执行

超线程(Hyper-Threading)技术是在一个物理处理器核心中模拟多个逻辑处理器的技术。

基本原理: - 复制一套完整的处理器状态(寄存器、程序计数器等) - 共享执行资源(ALU、Cache等) - 操作系统将每个逻辑处理器视为独立的处理器

优势: - 当一个线程因等待数据而暂停时,另一个线程可以使用执行资源 - 提高处理器的资源利用率 - 对于多线程应用有显著性能提升

多核处理器(Multi-core Processor)是在一个芯片上集成多个独立的处理器核心。

结构特点: - 每个核心具有独立的执行单元和L1 Cache - 多个核心共享L2/L3 Cache - 核心之间通过片上总线或互连网络通信

编程模型: - 多线程编程:每个线程运行在不同的核心上 - 消息传递:核心之间通过消息进行通信 - 共享内存:多个核心共享同一地址空间

核心概念: - CPU是计算机的核心,负责指令控制和数据加工 - CPU由运算器、控制器和寄存器组组成 - 指令周期包括取指、译码、执行、访存、写回等阶段

关键寄存器: - 通用寄存器:AX, BX, CX, DX, SP, BP, SI, DI - 专用寄存器:PC, IR, MAR, MDR, PSW - 段寄存器:CS, DS, SS, ES

控制器设计: - 组合逻辑控制:速度快,结构复杂 - 微程序控制:规整性好,易于修改 - 微指令编码:直接编码、字段编码、混合编码

流水线技术: - 五级流水线:IF, ID, EX, MEM, WB - 流水线冒险:结构冒险、数据冒险、控制冒险 - 冒险处理:数据前递、插入气泡、分支预测

现代CPU技术: - 超标量:每周期发射多条指令 - 超线程:一个物理核心模拟多个逻辑处理器 - 多核:一个芯片集成多个处理器核心

重要公式: - 流水线加速比 ≈ 流水线级数(理想情况) - CPU执行时间 = 指令数 × CPI × 时钟周期

学习建议: - 理解指令执行的完整流程和各部件的作用 - 掌握微程序控制器的工作原理 - 理解流水线冒险的类型和处理方法 - 了解现代CPU技术的发展趋势

该主题尚不存在

您访问的页面并不存在。如果允许,您可以使用创建该页面按钮来创建它。

  • 计算机组成与体系结构/cpu的功能和结构.txt
  • 最后更改: 2026/03/01 16:23
  • 张叶安