diff --git a/计算机组成原理/img/输入输出系统/DMA.PNG b/计算机组成原理/img/输入输出系统/DMA.PNG new file mode 100644 index 0000000..b407380 Binary files /dev/null and b/计算机组成原理/img/输入输出系统/DMA.PNG differ diff --git a/计算机组成原理/img/输入输出系统/IO处理机.png b/计算机组成原理/img/输入输出系统/IO处理机.png new file mode 100644 index 0000000..aed9276 Binary files /dev/null and b/计算机组成原理/img/输入输出系统/IO处理机.png differ diff --git a/计算机组成原理/img/输入输出系统/接口模块与dma.png b/计算机组成原理/img/输入输出系统/接口模块与dma.png new file mode 100644 index 0000000..63d905d Binary files /dev/null and b/计算机组成原理/img/输入输出系统/接口模块与dma.png differ diff --git a/计算机组成原理/img/输入输出系统/早期阶段.png b/计算机组成原理/img/输入输出系统/早期阶段.png new file mode 100644 index 0000000..76998fe Binary files /dev/null and b/计算机组成原理/img/输入输出系统/早期阶段.png differ diff --git a/计算机组成原理/img/输入输出系统/通道.png b/计算机组成原理/img/输入输出系统/通道.png new file mode 100644 index 0000000..e3510a9 Binary files /dev/null and b/计算机组成原理/img/输入输出系统/通道.png differ diff --git a/计算机组成原理/中央处理器.md b/计算机组成原理/中央处理器.md new file mode 100644 index 0000000..28e042e --- /dev/null +++ b/计算机组成原理/中央处理器.md @@ -0,0 +1,465 @@ +# 中央处理器 + +## 功能和结构 + +### 功能 + +* CPU=运算器+控制器 +* 运算器 + * 对数据进行加工 +* 控制器 + * 协调控制各部件指令序列 + * 取指令 + * 分析指令 + * 执行指令 + * 控制程序的输入 + * 控制运算结果的输出 + * 对总线的管理 + * 中断处理 +* 总结 + * 指令控制 + * 操作控制 + * 时间控制 + * 数据加工 + * 中断处理 + +### 结构 + +* 控制器 + * 程序计数器PC + * 指令寄存器IR + * 指令译码器 + * 存储器地址寄存器 + * 存储器数据寄存器 + * 时序系统 + * 微操作信号发生器 +* 运算器 + * 算术逻辑单元ALU + * 暂存寄存器 + * 累加寄存器 + * 通用寄存器组 + * 程序状态字寄存器 + * 移位器 + * 计数器:控制乘除运算的操作步骤 +* 中断系统 +* 寄存器 + * 小快贵 + +## 主要寄存器 + +### 运算器中的寄存器 + +* 暂存寄存器 + * 暂存从主存读来的数据 + * 对程序员透明 +* 累加寄存器(ACC) + * 暂时存放ALU的运算结果 +* 通用寄存器组 +* 状态条件寄存器 + * 存放算术指令和逻辑指令运行或测试的结果,使用一位触发器 + * 还可以保存中断和系统工作状态信息 + +### 控制器中的寄存器 + +* 程序计数器PC +* 指令寄存器IR +* 存储器数据寄存器MDR + * 作为CPU,内存和外部设备之间信息传送的中转站 + * 补偿CPU,内存和外部设备之间再操作速度上的差别 + * 在单累加器的运算器中,可兼做操作数寄存器 +* 存储器地址寄存器MAR + +## 指令执行过程 + +### 指令周期 + +* 指令周期包含若干**机器周期**,为执行一条指令所花的时间 +* 不同指令的指令周期可能不同 +* 一个机器周期包括若干个**时钟周期** +* 不同的机器周期时间可能不同 +* 指令周期=取指周期+间址周期+执行周期+中断周期 + +### 指令执行方案 + +* 单指令周期 + * 所有指令采用相同的执行时间 + * 运行效率低 +* 多指令周期 + * 不同指令选用不同步骤,指令周期可以不同 +* 流水线方案 + +### 指令周期的数据流 + +#### 取指周期 + +1. (PC)->MAR//发送指令地址至MAR +2. 1->R//发出读命令 +3. M(MAR)->MDR//取出指令地址 +4. (MDR)->IR +5. OP(IR)->CU +6. PC+1->PC + +#### 间址周期 + +1. AD(IR)->MAR +2. 1->R +3. M(MAR)->MDR + +#### 执行周期 + +* ,没有固定格式 + +#### 中断周期 + + + +## 数据通路功能和基本结构 + +### 数据通路的功能 + +* 实现CPU内部运算器和寄存器,寄存器间的数据交换 + +### 数据通路基本结构 + +* CPU内部总线方式 + * 使用单总线/双总线/多总线连接所有寄存器 + * 使用双总线或多总线时,数据传递可以同时进行 + * 结构简单 + * 数据传输较多时可能会出现冲突,性能较低 +* 专用数据通路方式 + * 根据指令执行过程的数据流动安排线路 + * 避免使用共享的总线 + * 性能较高 + * 硬件量较大 + +### 常见数据通路数据传输 + +#### 寄存器之间 + +1. R1->Bus //R1out有效 +2. Bus->R2 //R2in有效 + +#### 主存与CPU之间 + +1. R1->Bus->MAR //R1out,MARin有效 +2. 1->R +3. M(MAR)->MAR //MDRin有效 +4. MDR->Bus->R2 //MDRou,R2in有效 + +#### 执行算术运算或逻辑运算 + +1. Ad(IR)->Bus->MAR +2. 1->R +3. M(MAR)->MDR +4. MDR->Bus->R1 +5. (ACC)OP(R1)->R2(暂存器) +6. R2->ACC + +## 控制器功能和工作原理 + +### 硬布线控制器 + + + +#### 微操作命令示例 + +##### 执行周期 + +###### 加法指令 + +* 前提:一个操作数在累加器,一个在主存A单元,结果存入累加器 +* 步骤 + 1. Ad(IR)->MAR + 2. 1->R + 3. M(MAR)->MDR + 4. (ACC)+(MDR)->ACC + +###### 存数指令 + +* 前提:将上述累加器结果存入地址单元A +* 步骤 + 1. Ad(IR)->MAR + 2. 1->W + 3. (ACC)->MDR + 4. (MDR)->M(MAR) + +##### 中断周期 + +###### 断点存储在主存 + +* 前提:假设断点保存至主存的0单元,采用硬件向量寻找中断地址 +* 步骤 + 1. 0->MAR + 2. 1->W + 3. (PC)->MDR + 4. (MDR)->M(MAR) + 5. 向量地址->PC + 6. 0->EINT //关中断 + +###### 断点存储在堆栈 + +* 前提:假设断点保存至主存的0单元,采用硬件向量寻找中断地址 +* 步骤 + 1. (SP)-1->SP + 2. (SP)->MAR + 3. 1->W + 4. (PC)->MDR + 5. (MDR)->M(MAR) + 6. 向量地址->PC + 7. 0->EINT //关中断 + +#### 控制单元的输入 + +1. 操作码 + * 来源:指令寄存器 + * 功能:将操作码送入控制单元CU进行译码 +2. 标志 + * 来源:上条指令的结果产生的信号(如进位信号) + * 功能:参与本条指令的执行 +3. 时钟 + * 来源:时钟脉冲 + * 功能:控制操作时间,操作时序,执行方式 +4. 控制信号 + * 来源:控制总线 + * 功能:根据不同信号执行不同功能(如中断请求,DMA请求) + +#### 控制单元的输出 + +1. CPU的控制信号 + * 功能:控制寄存器间数据的传输和ALU的不同操作 +2. 送至系统总线的控制信号 + * 功能:命令主存读写、中断响应等 + +#### CPU控制方式 + +* 同步控制方式 + * 特点 + * 任何微操作或指令的执行都由事先确定且有统一基准时标的时序信号控制 + * 以最长的微操作序列和最繁琐的微操作为标准,采用完全统一、具有相同时间间隔和相同数目的节拍作为机器周期(**定长方式**的同步控制) + * 每个机器周期节拍数可以不同(**不定长方式**的同步控制) + * 大部分指令采用同样节拍的机器周期内完成,少部分复杂指令在完成公共节拍后,转由局部控制器完成剩余节拍,完成后再转回重要控制器(**中央控制和局部控制相结合**的同步控制) + * 优点 + * 电路简单 + * 缺点 + * 运行速度慢 +* 异步控制方式 + * 特点 + * 各部件工作速度不一致 + * 采用应答的方式进行联络 + * 优点 + * 运行速度快 + * 缺点 + * 电路复杂 + * 用途 + * 主机和I/O设备间的传输控制 +* 联合控制方式 + * 特点 + * 同步和异步方式的折中 + * 大部分微操作使用同步控制 + * 少部分使用异步控制 + +### 微程序控制器 + +#### 名词概念 + +* 微操作 + * 计算机中最基本的不可分解的操作 + * 构成机器指令的最小单位 +* 微命令 + * 控制部件向执行部件发出的控制命令 + * 控制序列的最小单位 + * 与微操作一一对应 + * 可分为**互斥微命令**和**相容微命令** +* 微指令 + * 若干微命令的集合 + * 存放微指令控制存储器称为微地址 + * 基本构成 + * 操作控制字段(操作码字段):产生各种操作控制信号 + * 顺序控制字段(微地址码字段):控制产生下一条要执行的微指令地址 +* 微周期 + * 读取一条微指令并执行响应微操作所需的时间 +* 主存储器 + * 在CPU外部,用RAM实现,存放程序和数据 +* 控制存储器 + * 存放微程序,在CPU内部,用ROM实现 + +#### 组成 + +* 控制存储器 +* 微指令寄存器 +* 微地址形成部件 +* 微地址寄存器 + +#### 步骤 + +1. 机器开始运行时将**取指微程序**入口地址送入CMAR,并从CM中读出相应微指令送人CMDR,使用**取指微程序**将机器指令存入指令寄存器中 +2. 将机器指令的操作码字段使用微地址形成部件产生该指令所对应的微程序的入口地址,并送人CMAR +3. 从CM中逐条取出对应的微指令并执行 +4. 执行完一个机器指令的微程序后,继续第一步 + +#### 微指令编码方式 + +##### 直接编码 + +* 每个字段代表一个微命令 +* n个微命令至少需要n位操作字段 +* 优点 + * 简单、直观、执行快 + * 并行性好 +* 缺点 + * 指令字过长 + +##### 字段直接编码 + +* 将互斥性微命令分在同一字段内,相容性微命令分在不同段内 +* 每个小段的信息位不能过多,防止译码线路过于复杂,译码时间长 +* 每个小端留出一个状态表示不发出任何微命令 + +##### 字段间接编码 + +* 某个字段的微命令由另一个字段的微命令来解释 +* 缩短的指令字长 +* 削弱的并行能力 + +#### 微指令地址的形成 + +* 直接由微指令的下地址字段给出(断定方式) +* 后续微指令的地址根据机器指令操作码形成 +* 增量计数法:微指令地址连续,和PC一样自增找到下一只了地址 +* 分支转移:根据标志位决定下一地址 + * 格式:操作控制字段+转移条件+转移地址 +* 由硬件产生微指令地址 + +#### 微指令格式 + +| 项目 | 水平型微指令 | 垂直型微指令 | +| ---------------------- | -------------------------- | -------------------------- | +| 并行性 | 高 | 差 | +| 执行指令所需的微指令数 | 少 | 多 | +| 与机器指令的相似度 | 高 | 低 | +| 总结 | 微指令结构长,微程序结构短 | 微指令结构短,微程序结构长 | + +### 硬布线和微程序控制器对比 + +#### 硬布线 + +* 优点 + * 速度快 +* 缺点 + * 设计完成后难以修改 + +#### 微程序 + +* 优点 + * 规整性 + * 灵活性 + * 可维护性 +* 缺点 + * 速度慢 + +#### 对比 + +| | 硬布线控制器 | 微程序控制器 | +| -------- | -------------------------------- | -------------------------------------------- | +| 工作原理 | 微操作控制信号由组合逻辑电路产生 | 微操作控制信号以微程序的形式存放于控制存储器 | +| 执行速度 | 快 | 慢 | +| 规整性 | 不规整 | 较规整 | +| 应用场景 | RISC | CISC | +| 易扩充性 | 差 | 好 | + + + +## 指令流水线 + +### 分类 + +#### 按使用级别 + +* 部件功能级 + * 将复杂的算术逻辑运算组成流水线操作 + * 例:将浮点数加法分解成求阶差、对阶、尾数相加和结果规则化四个子过程 +* 处理机流水线 + * 将一条指令的解释过程制成流水线 + * 例:将指令分成取指、译码、执行、访存、写回四个部分 +* 处理机间流水线 + * 每个处理机完成一个专门任务,结果交予下一个处理机 + * 例:Map Reduce + +#### 按完成的功能 + +* 单功能流水线 + * 只实现固定功能 +* 多功能流水线 + * 将各流水线部件进行不同组合完成不同功能 + +#### 按连接方式 + +* 静态流水线 + * 在同一时间内各段执行同一功能的子过程 +* 动态流水线 + * 在同一时间内,某一功能的部分流水线段可同时作为其他功能的流水线段 + +#### 按功能段间是否有反馈 + +* 线性流水线 + * 流水线部件不存在回路 +* 非线性流水线 + * 存在回路 + * 适合递归运算 + +### 影响流水线性能的因素 + +* 数据冲突(数据冒险) + * 出现读写冲突 + * 解决方案 + * 阻塞冲突操作 + * 硬件阻塞(stall) + * 软件阻塞(使用nop指令) + * 设置专用通路:直接将前一指令的计算结果直接从ALU送入数据输入寄存器中 + * 编译优化 +* 控制冲突(控制冒险) + * 出现转移指令 + * 解决方案 + * 分支预测 + * 静态分支预测:只预测一种结果 + * 动态分支预测:根据指令执行的历史情况动态调整预测结果 + * 同时预取两个控制流的目标指令 + * 加快和提前形成条件码 + * 提高转移方向的预测率 + +#### 流水线性能指标 + +* 吞吐率:单位时间完成的任务数量 + $$ + 设任务数为n,流水线段数为k,每段花费t时间\\ + 吞吐率TP=\frac{n}{(k+n-1)t}\\ + 理想情况下,最大吞吐率TP_{max}=\lim_{n \to \infty}TP=\frac{1}{t} + $$ + + +* 加速比:不使用流水线的执行时间与使用流水线后的执行时间比 + $$ + T_0为不使用流水线的时间,T_k为使用流水线的时间\\ + 加速比S=\frac{k*n*t}{(k+n-1)t}=\frac{k*n}{k+n-1}\\ + 最大加速比S_{max}=\lim_{n \to \infty}S=k + $$ + +* 流水线效率 + $$ + 效率E=\frac{n个任务占用的时空图有效面积}{n个任务占用的时空图总面积} + $$ + +### 超标量流水线 + +#### 超标量流水线技术 + +* 增加多个部件,并行执行多条指令 + +#### 超流水线技术 + +* 划分更细小的流水线段 + +#### 超长指令字 + +* 将多条能并行的指令组合形成一个超长指令字 +* 需要多个处理部件 \ No newline at end of file diff --git a/计算机组成原理/存储器层次结构.md b/计算机组成原理/存储器层次结构.md index 6968d8d..7c1c7d9 100644 --- a/计算机组成原理/存储器层次结构.md +++ b/计算机组成原理/存储器层次结构.md @@ -470,6 +470,22 @@ * 镜像备份 +#### RAID 2 + +* 纠错的海明校验码 + +#### RAID 3 + +* 位交叉奇偶校验 + +#### RAID 4 + +* 块交叉奇偶校验 + +#### RAID 5 + +* 无独立校验的奇偶校验 + ### 光盘存储器 * 使用激光存储(光存储技术) diff --git a/计算机组成原理/总线.md b/计算机组成原理/总线.md new file mode 100644 index 0000000..7e88550 --- /dev/null +++ b/计算机组成原理/总线.md @@ -0,0 +1,275 @@ +# 总线 + +## 概述 + +* 总线是连接多个部件的信息传输线,是各部件共享的传输介质 +* 特点 + * 分时 + * 共享 +* 总线传输周期:CPU通过总线对外设进行一次访问所需的时间 +* 总线宽度:可同时传输的二进制代码位数 +* 总线特性 + * 机械特性:尺寸,形状 + * 电气特性:传输方向,有效的电平范围 + * 功能特性:每根传输线的具体功能(如传送地址、传送数据等) + * 时间特性:信号的时序关系(如某根线什么时间有效) + +## 分类 + +### 按数据传输方式 + +* 串行传输总线 +* 并行传输总线 + +### 按使用范围 + +* 计算机总线 +* 测控总线 + +### 按连接部件 + +* 片内总线 + * 位于芯片内部 + * 如CPU内部,寄存器之间的连接 +* 系统总线 + * 连接五大部件(运算器、控制器、存储器、输入设备和输出设备) + * 分类 + * 数据总线 + * 双向传输总线 + * 地址总线 + * 单向传输总线 + * 控制总线 + * 整体上看:双向传输 + * 任意一条:单向传输 +* 通信总线 + * 计算机系统之间或计算机系统与其他系统间通信 + * 分类 + * 串行通信 + * 适合远距离传输 + * 并行通信 + * 适合近距离传输 + +## 总线的组成 + +* 控制线 +* 数据线 +* 地址线(部分总线无地址线,使用数据线传输地址,称为数据线和地址线复用) + +## 总线的性能指标 + +* 总线宽度:总线的根数 +* 总线带宽:单位时间内传输数据的位数 +* 总线复用:地址线和数据线共用以概率总线 +* 信号线数:三种总线数目总和 + +## 总线的结构 + +### 单总线结构 + +* 所有设备共用一组总线 +* 允许交换信息的设备 + * I/O设备之间 + * I/O设备与CPU + * I/O设备与主存 + * CPU与主存 +* I/O设备与主存统一编址 +* 优点 + * 结构简单 + * 容易扩充 +* 缺点 + * 不允许多个设备同时传输信息 + * 无法解决不同设备速率不匹配问题 +* 适用对象 + * 小型计算机 + * 微型计算机 + +### 双总线结构 + +* 将速度较低的I/O设备分离出来 +* 形成CPU与主存,CPU与I/O设备两组总线 +* 允许交换信息的设备 + * I/O设备之间 + * I/O设备与CPU(或通道处理器) + * CPU与主存 +* 缺点 + * 主存与I/O设备交换信息需要通过CPU或通道处理器,效率低 + +### 三总线结构 + +* 在高速I/O设备与主存间增加了DMA总线 +* 允许交换信息的设备 + * I/O设备之间 + * I/O设备与CPU + * 高速I/O设备与主存 + * CPU与主存 + +## 总线仲裁 + +### 集中仲裁方式 + +* 所有总线请求统一集中交予一个仲裁算法进行裁决 +* 组成 + * 总线忙线 + * 总线同意线 + * 总线请求线 + +#### 链式查询方式 + +* 所有部件使用一条总线请求线 +* 判定步骤 + 1. 部件需要请求总线时,发送总线请求至总线控制器 + 2. 若总线不忙,发送总线同意信号 + 3. 总线同意信号串行依次传送到各个部件,若某一部件有总线请求时,停止传送 + 4. 该部件建立总线忙信号 +* 优先级 + * 离总线控制器越近的部件优先级越高 +* 优点 + * 只需三根控制线,结构简单,易扩充 +* 缺点 + * 有硬件电路敏感,第i个部件出错,之后的部件都不能工作 + * 优先级低的总线会出现**饥饿**现象 + +#### 计数器查询方式 + +* 在总线控制器中增加一个计数器 +* 不需要总线同意线 +* 增加**log~2~n**条**设备地址线** +* 判定步骤 + 1. 总线控制器收到请求后,计数器开始计数 + 2. 将计数器的数值通过设备地址线传输给每个设备 + 3. 若发送请求的设备地址与计数器数值不一致时,继续计数,回到第二步 + 4. 直到发送请求的设备的地址与计数器一致时,获取设备控制权,建立总线忙信号 +* 优先级 + * 方案1:每次计数从0开始,地址数值越小,优先级越大 + * 方案2:每次计数从上一次的终点开始计数,所有设备优先级相等 +* 优点 + * 各设备优先级顺序可以改变(通过修改设备地址) + * 对电路故障不如链式查询方式敏感 +* 缺点 + * 增加了控制线数 + * 控制也比链式查询复杂 + +#### 独立请求方式 + +* 每个设备都有一个总线请求线和总线同意线 +* 判定步骤 + 1. 每个设备独立发送请求 + 2. 总线控制器按照特点算法决定优先级 + 3. 选择好某一设备后,使用他的总线同意线发送同意信息 + 4. 该设备建立总线忙信号 +* 优点 + * 响应时间快 + * 对优先级控制灵活(可通过程序改变) +* 缺点 + * 控制线数量多 + * 总线控制最复杂 + +#### 总线数目 + +| 总线类型 | 链式查询方式 | 计数器查询方式 | 独立请求方式 | +| ---------------------- | ------------ | ------------------------- | ------------ | +| 总线同意线 | 1 | 无 | n | +| 总线忙线 | 1 | 1 | 1 | +| 总线请求线 | 1 | 1 | n | +| 设备地址线 | 无 | $\lceil log_2n \rceil$ | 无 | +| 总数 | 3 | $\lceil log_2n \rceil +2$ | 2n+1 | +| 确定所有权需要的总线数 | 2 | $\lceil log_2n \rceil +1$ | 2n | + +### 分布式仲裁方式 + +* 不需要中央仲裁器 +* 每个模块有自己的仲裁号和仲裁器 +* 每个仲裁器将自己的仲裁号发送到共享的仲裁总线上 +* 通过对比仲裁总线上得到的仲裁号确定哪一个仲裁器占有总线 + +## 总线操作和定时 + +### 总线周期的组成 + +* 申请分配阶段(进行仲裁) +* 寻址阶段 +* 传送数据阶段 +* 结束阶段 + +### 分类 + +* 同步通信(同步定时方式) +* 异步通信(异步定时方式) +* 半同步通信 +* 分离式通信 + +### 同步定时通信 + +* 时钟周期 + 1. 发送地址信息(直到第四周期结束为止,始终保持信号),若写指令,则在第一周期的中间时刻进行数据准备操作 + 2. 发送读写命令(维持到第三周期结束) + 3. 传输数据 + 4. 撤销读写命令,撤销数据传输 +* 优点 + * 传输速度快 +* 缺点 + * 时钟必须以最慢模块设计 + * 模块存取速度差别较大时,大大损失总线效率 + * 可能不知道被访问的外部设备是否真正相应,可靠性低 +* 适用范围 + * 总线长度较短,各部件存取时间接近的设备 + +### 异步定时方式 + +* 增加两条应答线(**请求线**和**回答线**) +* 采用**应答(握手)**的方式进行通信 +* 步骤 + 1. 主模块发出请求 + 2. 等待从模块响应信号后才开始通信 +* 分类 + * 不互锁方式 + * 主从模块无制约关系 + * 主模块发出请求一段时间后,默认从模块收到信号,撤销请求 + * 从模块发出应答一段时间后,默认主模块收到信号,撤销应答 + * 半互锁方式 + * 主从模块只有简单制约关系 + * 主模块发出请求后,只有收到从模块的应答信号后才撤销请求 + * 从模块发出应答一段时间后,默认主模块收到信号,撤销应答 + * 全互锁方式(与三次握手几乎一样) + * 主从模块只有完全制约关系 + * 主模块发出请求后,只有收到从模块的应答信号后撤销请求,并发出应答 + * 从模块发出应答后,只有收到主模块的应答信号后撤销应答 + +## 总线标准 + +### 系统总线标准 + +* ISA(工业标准体系结构总线) + * 最早的微型计算机系统总线标准 + * 用于IBM的AT机 +* EISA(扩展的ISA总线) + * 配合32位CPU的总线扩展标准 + * 完全兼容ISA +* VESA(VL-BUS) + * 32位的计算机局部总线 + * 用于多媒体PC传输活动图像数据 +* PCI(最常用) + * 计算机局部总线 + * 连接外围设备与处理机/存储器系统 + * 支持即插即用 + * 支持对数据和地址的奇偶校验 +* PCI-Express(PCI-E) + * 最新的总线和接口标准 + * 将取代PCI和AGP + +### 设备总线标准 + +* IDE(集成设备电路) + * 用于连接处理器和磁盘驱动器 +* AGP(加速图形接口) + * 用于连接主存和图形存储器 +* USB(通用串行总线) + * 用于快速连接外部设备 + * 串行传输,只能同时传输一位数据 + * 通信总线 +* SATA(串行高级技术附件) + * 串行硬件驱动器接口 + +## 其他零散知识 + +* 计算机局部总线:局部总线是在ISA总线和CPU总线之间增加的一级总线或管理层。这样可将一些高速外设.如图形卡.硬盘控制器等从ISA总线上卸下而通过局部总线直接挂接到CPU总线上,使之与高速能CPU总线相匹配。 \ No newline at end of file diff --git a/计算机组成原理/指令系统.md b/计算机组成原理/指令系统.md new file mode 100644 index 0000000..990d632 --- /dev/null +++ b/计算机组成原理/指令系统.md @@ -0,0 +1,207 @@ +# 指令系统 + +## 指令格式 + +### 一般形式 + +* 操作码字段+地址码字段 + +### 零地址指令 + +#### 格式 + +* 操作码字段 + +#### 含义 + +* 不需要操作数,如空指令、停机指令、关中断指令 +* 在堆栈计算机中,参与运算的若干个操作数直接从栈顶弹出,结果也存放在堆栈中 + +### 一地址指令 + +#### 格式 + +* 操作码字段+地址码1 + +#### 含义 + +* 只有目的操作数的单操作数指令,从地址中取数据计算后存回该地址,如递增指令、取反指令等 + * OP(A~1~)->A~1~ +* 隐含操作数的双操作指令,指令可约定另一个操作数由ACC给出,并将结果存入ACC + * (ACC)OP(A~1~)->(ACC) + +### 二地址指令 + +#### 格式 + +* 操作码字段+地址码1+地址码2 + +#### 含义 + +* 给出两个操作数进行计算,称为源操作数和目的操作数,其中目的操作数还存放本次运算结果 + * (A~1~)OP(A~2~)->(A~2~) + +### 三地址指令 + +#### 格式 + +* 操作码字段+地址码1+地址码2+地址码3 + +#### 含义 + +* 给出两个操作数进行计算,结果存放在第三个操作数上 + * (A~1~)OP(A~2~)->(A~3~) + +### 四地址指令 + +#### 格式 + +* 操作码字段+地址码1+地址码2+地址码3+地址码4 + +#### 含义 + +* 给出两个操作数进行计算,结果存放在第三个操作数上,下一条指令的地址为地址码4 + * (A~1~)OP(A~2~)->(A~3~) + +### 分类 + +* 定长操作码指令 +* 不定长操作码指令 + +## 寻址方式 + +### 指令寻址 + +* 顺序寻址 + * 程序计数器PC+1,得到下一条指令地址 +* 跳跃寻址 + * 转移指令修改PC的值,从而修改下一条指令地址 + +### 数据寻址 + +#### 格式 + +* 操作码+寻址特征+地址 + +#### 隐含寻址 + +* 不显式给出操作数地址,如规定累加器作为第二操作数地址 + +#### 立即数寻址 + +* 直接给定操作数 + +#### 直接寻址 + +* 直接给出操作数在主存的地址 +* EA=A + +#### 间接寻址 + +* 给出的地址为操作数地址的地址 +* EA=(A) + +#### 寄存器寻址 + +* 给出操作数所在的寄存器编号 +* EA=R + +#### 寄存器间接寻址 + +- 操作数地址在给定的寄存器中 +- EA=(R) + +#### 相对寻址 + +* 操作数地址EA=(PC)+A + +#### 基址寻址 + +* 设置基址寄存器BR +* 由操作系统维护,程序运行时不可改变 +* 使用通用寄存器作为BR,用户有权知道作为基址寄存器的寄存器是哪一个 +* EA=(BR)+A +* 优点 + * 扩大寻址范围 + * 便于解决多道程序问题 + +#### 变址寻址 + +* 设置变址寄存器IX + +* 由用户维护 +* 在程序运行时可修改 +* EA=(IX)+A +* 优点 + * 扩大寻址范围 + * 适合处理数组问题和循环程序 + +#### 堆栈寻址 + +* 使用栈顶作为隐含操作数地址 + +#### 结合寻址方式 + +* 先间址再变址:EA=(A)+(IX) +* 先变址再间址:EA=(A+(IX)) +* etc + +## 运算标记位 + +* ZF:零标志,运算结果为0时置1 +* OF:溢出标志,运算结果溢出时置1 +* CF:进位/借位标志,把操作数都看作无符号数 + * 相减运算A-B时,若A接口) +* 命令线(单向,CPU->接口) +* 状态线(单向,接口->CPU) +* 内部接口:与系统总线相连,并行传输 +* 外部接口:与外设相连,可能串行传输,故接口需具有串/并转换功能 + +### 接口类型 + +* 按数据传送方式划分 + * 串行接口 + * 并行接口 +* 按主机访问方式划分 + * 程序查询接口 + * 中断接口 + * DMA接口 +* 按功能选择的灵活性划分 + * 可编程接口 + * 不可编程接口 + +### I/O端口 + +#### 定义 + +* 接口电路中可直接被CPU访问的寄存器 + +#### 分类 + +* 数据接口(可读写) +* 状态接口(只读) +* 控制接口(只写) + +#### 编址 + +* 统一编址(存储器映射方式) + * 将I/O端口当作存储器单元一同编址 + * 优点 + * 不需要专门的输入输指令 + * 使端口用有较大的编址空间 + * 缺点 + * 占有存储器容量 + * 执行速度慢 +* 独立编址(I/O映射方式) + * I/O端口地址空间与主存地址相互独立 + * 优点 + * 输入输出需要专门指令,使程序结构清晰 + * 不影响主存容量 + * 缺点 + * 输入/输出指令较少 + * 增加了控制的复杂性 + +## I/O方式 + +### 程序查询方式(程序控制I/O方式) + +#### 步骤 + +1. CPU初始化程序,设置传送参数 +2. 向I/O端口发出命令字,启动I/O设备 +3. CPU从外设接口读取状态信息 +4. CPU不断查询外设状态,直至外设准备就绪 +5. 传送数据 +6. 修改地址和计数器参数 +7. 判断传送是否结束,若未结束,继续第3步 + +#### 特点 + +* 数据成块传送,故需要计数器记录传送字数 +* 需给出传送数据的首地址 + +#### 就绪状态 + +* 输入:输入缓冲满 +* 输出:输出缓冲空 + +### 程序中断方式 + +#### 中断概念 + +##### 中断功能 + +* 实现CPU与I/O设备并行工作 +* 处理硬件和软件错误 +* 实现人机交互,用户干预机器需要中断 +* 实现多道程序,分时操作,多道程序的切换需要中断 +* 实时处理系统需要中断系统实现快速响应 +* 实现目态与管态的切换,称为软中断 +* 多处理器系统的信息交流和任务切换 + +##### 分类 + +* 按中断源划分 + * 内中断:处理器和内存内部产生的中断(如运算错误,特权指令等) + * 外中断:处理器和内存以外设备产生的中断(如时钟中断,I/O中断等) +* 按软硬件划分 + * 硬件中断:由硬件产生的中断 + * 软件中断:由某条特定指令产生的中断 +* 按屏蔽与否划分 + * 非屏蔽中断:不受中断标志位影响,关中断的条件下也会相应 + * 可屏蔽中断:受中断标志位影响 + * 非屏蔽中断和可屏蔽中断均属于外中断和硬件中断 + +#### 流程 + +1. 中断请求 +2. 中断判优:判断中断优先级 + * 一般的优先级划分 + * 硬件中断>软件中断 + * 非屏蔽中断>可屏蔽中断 + * DMA请求>I/O设备传送的中断请求 + * 高速设备的中断>低速设备的中断 + * 输入设备的中断>输出设备的中断 + * 实时设备的中断>普通设备的中断 +3. 中断响应 + * 响应条件 + * 中断源有中断请求 + * CPU允许中断并开中断 + * 一条指令执行完毕并且没有更紧急的任务 +4. 中断隐指令 + 1. 关中断 + 2. 保存断点 + 3. 引出中断服务程序 +5. 中断向量表 + * 中断服务程序入口地址表 + * CPU响应中断后,中断硬件会自动将中断向量地址(中断向量的入口地址)送入CPU,由CPU完成程序中断 +6. 中断处理过程 + 1. 中断隐指令(硬件完成) + 1. 关中断 + 2. 保存断点 + 3. 引出中断服务程序 + 2. 中断服务程序 + 1. 保存现场和屏蔽字 + 2. 开中断(实现中断嵌套) + 3. 执行中断服务程序 + 4. 关中断 + 5. 恢复现场和屏蔽字 + 6. 开中断 + 7. 中断返回 + +#### 多重中断 + +##### 条件 + +* 中断服务程序中开中断 +* 优先级高的中断源有权中断优先级低的中断源 + +#### 中断处理硬件 + +* 中断请求触发器 +* 中断屏蔽字触发器 +* 排队器 +* 中断向量地址形成部件 + +### DMA(直接存储器存取)方式 + +#### 适用外设 + +* 磁带机 +* 磁盘机 + +#### 特点 + +* 主存既可以被CPU访问,也可以被外设访问 +* 数据块传送时,主存地址的确定,传送数据的计数由硬件部件直接实现 +* 主存需要开辟专用缓冲区 +* CPU与外设并行工作 +* DMA开始传送前需要通过程序预处理,结束后需要通过中断进行后处理 + +#### DMA控制器功能 + +* 接收外设发出的DMA请求,并向CPU发出总线请求 +* CPU响应总线请求,发出总线响应信号,接管总线控制权,进入DMA操作周期 +* 确定传送数据的主存单元地址和传送方向,发出读写控制信号,执行数据传送操作 +* 向CPU报告DMA操作的结束 + +#### DMA控制器组成 + +* 主存地址计数器 +* 传送长度计数器 +* 数据缓冲寄存器 +* DMA请求触发器 +* “控制/状态”逻辑 +* 中断机构 + +#### DMA传送方式 + +* 停止CPU访问主存 + * DMA访问主存时,CPU放弃地址线,数据线及有关控制线的使用权,此时CPU处在不工作状态 +* DMA与CPU交替访存 + * 当CPU周期大于存取周期时,将CPU周期划分成两部分,一部分由DMA执行访存操作,另一部分由CPU进行访存操作 +* 周期挪用(周期窃取) + * CPU不访存时,DMA直接进行访存 + * CPU正在访存时,DMA等待CPU访存结束再访存 + * CPU和DMA同时发出访存指令时,DMA让CPU暂时放弃总线几个存取周期,之后再交由CPU访存 + +#### DMA传送过程 + +1. 数据预处理 + * 由CPU完成 + * 步骤 + 1. CPU执行几条I/O指令测试设备 + 2. CPU设置DMA控制器有关寄存器初值、传送方向、启动设备等 + 3. CPU继续执行 + 4. 设备准备就绪后向DMA控制器发出DMA请求,之后DMA控制器向CPU发出总线请求(统称DMA请求) +2. 数据传送 + * 传输基本单位可以是字节、字或数据块 + * 硬盘使用数据块传输 + * DMA控制器使用循环实现数据块传输 + * 该阶段完全由DMA硬件控制 +3. 后处理 + * 步骤 + 1. DMA控制器向CPU发出中断请求 + 2. CPU执行中断程序进行结束处理 + * 校验数据是否正确 + * 测试传输过程是否出错 + * 是否继续使用DMA传输数据 + +### DMA与程序中断的区别 + +1. 中断方式时程序的切换,需要保护和恢复现场,DMA除了预处理和后处理,其他情况不占用CPU资源 +2. 对中断请求的响应只能发生在每个指令执行完毕后,对DMA请求的响应可以发生在任意机器周期结束后(只要CPU不占用总线即可) +3. 中断方式传输过程需要CPU干预,DMA不需要,因此传输速度快 +4. DMA请求优先级高于中断请求 +5. 中断方式具有对异常事件的处理能力,DMA仅用于传输数据块的I/O操作 +6. 中断方式使用程序传输,DMA方式使用硬件传输 + + + + + +​ +