CPU

本文章就是来总结分析总结上述几个模块
依照课本顺序有所更改
一.CPU概述
CPU(中央处理器)由运算器和控制器组成
- 运算器:数据加工
- 控制器:协调并控制计算机各部件执行程序的指令序列
过程流程
分为运算器和控制器两大部分
运算器
ALU(算术逻辑单元)
暂存器 ACC(累加寄存器):暂存操作数
GPRs(通用寄存器):存放操作数和各种地址信息
PSW(程序状态字寄存器)
SR(移位寄存器)......
就是负责:加减乘除算术运算 逻辑运算 条件测试
控制器
PC(程序计数器):指出欲执行指令在主存储器的存放地址
IR(指令寄存器):保存当前正在执行的指令
ID(指令译码器)......
负责:执行指令 (通过控制器发出的微操作)
寄存器
一个常考类型题目 常用的寄存器是否透明
通用寄存器:可编程指定多种功能的寄存器(寄存器组)
条件转移指令执行依据条件来自 标志寄存器
n位CPU n指数据总线线数
指令译码对 指令的操作码字段 进行译码
二.控制器

我们先介绍产生控制信号的控制器
大致功能:
- 取指令指出下一条指令位置 送指令地址
- 对指令译码测试 产生相应控制信号
- 控制数据流动方向
根据产生微操作控制信号方式的不同分为 硬布线控制器 微程序控制器
接下来重点学习理解这两个
硬布线控制器(组合逻辑控制器)
由逻辑门组合实现 速度取决于电路延迟
其CU控制单元的输入来自 1.操作码译码 2.节拍发生器 3.状态标志
产生C控制信号:指令要求 时序 内外部状态 时间顺序
微程序控制器
上述设计的硬布线控制器主要依靠电路 所以指令操作越多 电路越复杂 困难
所以使用微程序控制器设计方法
采用存储逻辑实现,将微操作信号代码化使得每条机器指令转化成为一段微程序并存入一个专门的存储器中
- 微程序
- 微操作
- 微命令
- 微周期
- 微指令
- 微地址
- 微指令编码方式
- 微指令地址形成方式
- 微指令格式
没错上述一大堆概念弄懂并且之间的联系梳理清楚 也就搞定微程序控制器

大致就是:一条机器指令对应一个微程序 然后微程序由若干个微指令集合组成
一个微指令又由一个或多个微命令集合组成 一个微命令进行操作就是一个微操作
微周期:从控制器取出并执行一条微指令所需的全部时间
微地址:存放微指令的控制存储器的单元地址 即uOC(微指令地址寄存器)存放
微指令编码方式(微指令的控制方式):
妈的就是控制字段编码 产生控制信号
- 直接编码

2.字段直接编码

通常每一段会留出一个状态
3.字段间接编码(隐式编码)
并行能力降低 缩短容量
微指令地址形成方式
1.后继地址字段指出
2.机器指令的操作码形成
3.增量计数器法 (uPC)+1->uPC 后继微指令地址是连续的
4.标志决定下一条微指令分支转移的地址
5.硬件直接产生微程序入口地址
微指令格式分为水平型微指令和垂直型微指令

看题:
实行性高 硬布线控制器 灵活性和可修改性 微程序控制器
三.数据通路
上述产生控制信号后 走过数据通路进行相应操作
其CPU内部分为数据通路和控制部件
数据通路即:数据在指令执行过程中所经过的路径包括路径上的部件
由1.组合逻辑元件 2.时序逻辑元件组成
组合逻辑元件 时序逻辑元件

时序逻辑元件如:PC GPRs包含存储信号的记忆单元
基本结构
1.CPU内部单总线方式
所有存储器都连接到一条内部总线上 冲突现象多 性能低 CPI=1
一个时钟内只允许一次操作
2.CPU内部多总线方式
单周期控制信号不变 多周期总线控制信号可能发生改变
3.专用数据通路方式
注意:内部总线指同一部件之间的总线 跟那三条系统总线不同
留个伏笔:初轮复习仅仅是选择类型题的理解 基础和中型 综合题会在后续总结
所以这里还会有更多综合类型的总结 不过再后续了
四.指令执行
总结两个东西 一个是指令执行的过程 另一个是指令周期和数据流

CPU每取出并执行一条指令所需的全部时间称为指令周期
搞懂几个概念 指令周期 机器周期(cpu周期) 时钟周期(节拍 cpu时钟周期)
一个时钟周期就是一个节拍 是计算机工作的最小时间周期
然后我用一个过程搞懂指令执行过程 并且其中的数据流(依次访问的数据序列)

不同处理器其指令执行步骤不同
- 单周期处理器
CPI=1 所有指令采用相同的执行时间完成
- 多周期处理器
CPI>1 对于不同类型的指令采用不同的执行步骤
- 流水线处理器
采用指令之间并行执行方案 随后我们会着重整理这个内容 这个也是现计算机cpu采用的指令方式
五.指令流水线
现代计算机通常采用指令流水线技术 同一时刻多条指令在CPU不同功能部件中并发执行
流水CPU是一种非常经济而实用的时间并行技术
三步走
- 指令流水线的设计过程
- 流水线的冒险和处理
- 流水线的性能指标
指令流水线的设计过程
首先需要弄懂几个概念
以下5个阶段(功能段或流水段)
- 取值 IF:取指令
- 译码/读寄存器 ID:译码 取操作数
- 执行/计算地址 EX:运算
- 访存 MEM:对存储器读/写
- 写回 WB:执行结果写回到寄存器堆
过程图:
逻辑结构 每个流水段后面加一个流水段寄存器
设计原则:
1.指令流水段个数=最复杂指令的功能段个数
2.流水段长度=最复杂操作所花时间为准
例如:
后续会介绍流水线周期的算法
流水线对指令集的要求:
1.指令长度尽量一致 有利于简化取指令和分析指令
2.指令格式尽量规整 有利于指令未知就可取操作数
3.采用LOAD/STORE型指令 有利于减少操作步骤
4.按边界对齐 有利于减少访存次数
流水线的冒险和处理
冒险三大家和对应处理方式
产生:指令流水线中 可能遇到一些情况使得后续指令无法正确执行而引起流水线阻塞即流水线冒险
结构冒险:
不同指令在同一时刻争用同一功能部件而形成的冲突 就是硬件资源冲突互斥
解决方式:
1.前一条指令MEM访存时 后一条指令暂停一个时钟周期
2.设置多个独立部件
数据冒险:
后面指令用到前面指令的结果 还没产生
在所有非乱序(按序)执行的流水线中 产生的数据冒险只是RAW(写后读)冲突
解决方式:
1.延迟执行相关指令 就是后续要用到上一个未产生结果的指令暂停几个时钟周期
插入空操作和硬件阻塞方式
2.采用转发(旁路)技术 将数据通路中产生的中间数据直接转发到ALU输入端
3.load-use处理 load指令后续运算类指令存在数据相关问题 对程序编译时优化 调整指令顺序避免产生此现象
用三道题来搞懂
I1和I3之间 通过转发技术就可以解决 I1和I2之间插入空指令解决
控制冒险:
遇到改变指令执行顺序造成断流 就是跳转转移类的问题
解决方式:
1.插入nop空指令或硬件阻塞
2.对转移指令进行分支预测
流水线的性能指标
就tm的几个公式 几道题弄懂了
流水线吞吐率和流水线总时间周期
就是(填充时间+发射批次-1)x时间
流水线加速比
几个同类型题计算流水线时间周期
第一条执行完需要5ns 后续需要(n-1)xt 上述设计过程总结过
没啥好说的 就是最复杂操作时间 80ns+流水段寄存器延时20s
如果忘了一些公式参考第一章总结:https://www.cnblogs.com/gaodiyuanjin/p/18800302
还有一个高级流水线技术
- 超标量流水线技术(动态多发射技术)
- 超流水线技术 通过提高流水线主频来提升性能
六.异常和中断
异常:CPU内部产生的意外事件
中断:CPU外部设备向CPU发出的中断请求
都由操作系统(硬件)处理解决
不讲一堆xx概念 直接一个图:
至于DMA会在最后一章节七章I/O总结
七.多处理器
- SISD 单指令流单数据流结构 串行 一个处理器和一个存储器 标量流水线处理机
- SIMD 单指令流多数据流结构 并行数据级 一个指令控制部件和多个处理单元 阵列处理机 并行处理机 向量处理机
- MISD 多指令流单数据流结构 实际不存在
- MIMD 多指令流多数据流结构 同时多条指令分别处理多个不同数据 并行线程级 多处理机
硬件多线程:减少线程切换开销
- 细粒度多线程
- 粗粒度多线程
- 同时多线程
多核处理器:每个核就是一个处理单元(运算核心)
SMP(共享内存多处理器):共享单一物理地址空间的多处理器
UMA:统一存储访问多处理器:处理Cache之间的一致性
NUMA:非统一存储访问多处理器:运算扩展性较UMA强
完结 攻克一个最核心难点 最后冲击总线和I/O的章节



































