You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1819 lines
44 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

*written by PeterAlbusCopyright © 2021 - SHOU 1951123 Hong Wu*
---
# 附录 常见缩写及解释
+ ALU 算术逻辑单元
+ CU 控制单元
+ ACC 运算器的累加器
+ MAR 存储器地址寄存器
+ MDR 存储器数据寄存器
+ MQ 运算器的乘商寄存器
+ X 操作数寄存器
+ PC 程序计数器
+ IR 指令寄存器
+ MIPS 百万条指令每秒
+ CPI 执行一条指令所需的时钟周期
+ FLOPS 浮点运算每秒
+ MBPS 兆字节每秒
+ DMA 直接存储器存取
+ BS 总线忙
+ BR 总线请求
+ BG 总线同意
+ MROM 掩模型只读存储器
+ PROM 可编程只读存储器
+ EPROM 可擦除可编程只读存储器
+ EEPROM 用电可擦除可编程只读存储器
+ MCT 存取周期
+ CS(上划线)片选信号(低电平有效)
+ WE(上划线)写允许信号(低电平为写,高电平为读)
+ V CC 代表电源
+ GND 代表接地端
+ RAS(上划线) 行地址选通
+ CAS(上划线) 列地址选通
+ CCW 通道指令
+ DBR 数据缓冲寄存器
+ INTR 中断请求触发器
+ MASK 屏蔽触发器
+ AR 主存地址寄存器
+ WC 字计数器
+ BR 数据缓冲寄存器
+ DAR 设备地址寄存器
+ DREQ 向DMA接口提出申请
+ HRQ 发出总线使用权的请求信号
+ RISC 精简指令系统计算机
+ CISC 复杂指令系统计算机
+ NOP 空操作
+ HLP 停机
+ RET 子程序返回
+ IRET 中断返回
+ SP 堆栈指针
+ FLASH MEMORY 闪速存储器
# 第一章 计算机系统概论
### 1.1 计算机系统简介
#### 1.1.1 计算机的软硬件概念
计算机系统由“硬件”和“软件”两大部分组成。
> **硬件**是指计算机的实体部分,它由看得见摸得着的各类电子元器件,各类光、电、机设备的事物组成,如主机、外部设备等。
> 所谓**软件**,它看不见摸不着,由人们实现编制的具有各类特殊功能的程序组成。
计算机的软件又可以分为两大类:系统软件和应用软件。
#### 1.1.2 计算机的层次结构
![五级层次结构](https://file.peteralbus.com/assets/blog/imgs/blogimg/private/co_01.png)
### 1.2 计算机的基本组成
#### 1.2.1 冯诺依曼计算机的特点
+ 由运算器、存储器、控制器、输入设备和输出设备五大部件组成
+ 指令和数据以同等地位存放于存储器内
+ 指令和数据均用二进制表示
+ 指令由操作码和地址码组成,操作码表示操作性质,地址码表示操作数位置
+ 指令在存储器内按顺序存放,通常按顺序执行,特定条件下也可改变执行顺序
+ 机器以**运算器**为中心
#### 1.2.2 现代计算机硬件框图
+ 以**存储器**为中心
![存储器为中心](https://file.peteralbus.com/assets/blog/imgs/blogimg/private/co_03.png)
+ 运算器用来完成算术运算和逻辑运算,并将运算的中间结果暂存在运算器内
+ 存储器用来存放数据和程序
+ 控制器用来控制、指挥程序和数据的输入、运行以及处理运算结果
+ 输入设备用来将人们熟悉的信息形式转换为机器能识别的信息形式
+ 输出设备可将机器运算结果转换为人们熟悉的信息形式
![现代计算机硬件框图](https://www.peteralbus.com:8440/pictrue/private/co_02.png)
### 1.3 计算机硬件的主要技术指标
+ 机器字长
+ 存储容量
+ 运算速度
---
# 第二章 计算机的发展及应用
### 2.1 计算机的发展史
#### 2.1.1 计算机的产生和发展
+ 第一台电子计算机1946 美国 ENIAC
+ 现代计算机产生的驱动力:需求+技术发展
+ 硬件技术的发展:
电子管(第一代计算机)→晶体管(第二代计算机)→中小规模集成电路(第三代计算机,几十/上百个元件)→大规模集成电路(上千个元件)→超大规模集成电路(一片IC芯片上能容纳数万个以上元件)
计算机的更新换代以**电子器件**为依据
#### 2.1.2 微型计算机的出现和发展
微处理器芯片 1971年(4位、8位、...、64位)
存储器芯片 1970年
Moore定律微芯片上集成的晶体管数目每三年翻两番
#### 2.1.3 软件计数的兴起和发展
##### 1.各种语言
机器语言-面向机器
汇编语言-面向机器
高级语言-面向问题
+ FORTRAN 科学计算
+ PASCAL 结构化程序设计
+ C++ 面向对象
+ Java 适应网络环境
##### 2.系统软件
+ **语言处理程序**:汇编程序,编译程序,解释程序
+ **操作系统**DOS UNIX Windows
+ **服务型程序**:装配 调试 诊断 排错
+ **数据库管理系统**DB和DBMS
+ **网络软件**
##### 3.软件发展的特点
+ 开发周期长
+ 制作成本昂贵
+ 检测软件产品质量的特殊性
### 2.2 计算机的应用
+ 科学计算和数据处理
+ 工业控制和实时控制
+ 网络技术
+ 电子商务
+ 网络教育
+ 虚拟现实
+ 办公自动化和管理信息系统
+ CAD(Computer Aided Desgine)/CAM(Computer Aided Manufacturing)/CIMS(Computer Intergrated Manufacturing System)
+ 多媒体技术
+ 人工智能
### 2.3 计算机的展望
替代传统的硅芯片光计算机、DNA生物计算机、量子计算机
---
# 第三章 系统总线
### 3.1 总线的基本概念
> **总线**(bus)是连接多个部件的信息传输线,是各部件共享的信息传输介质。
使用总线的原因I/O设备不断增多人们希望随时增添或减撤设备**。**
**总线结构的举例**
+ 单总线结构框图
![单总线](https://file.peteralbus.com/assets/blog/imgs/blogimg/private/co_04.png)
+ 存储器为中心的双总线
![双总线](https://file.peteralbus.com/assets/blog/imgs/blogimg/private/co_05.png)
### 3.2 总线的分类
+ 片内总线:芯片内部的总线
+ 系统总线:计算机各部位之间的信息传输线
+ 数据总线:双向,与机器字长,存储字长有关
+ 地址总线单向与存储地址I/O地址有关
+ 控制总线:有出(存储器读写、总线允许、中断确认)、有入(中断请求、总线请求)
+ 通信总线:用于计算机系统之间或计算机系统与其他系统之间的通信
传输方式:
+ 串行通信总线
+ 并行通信总线
### 3.3 总线特性及性能指标
#### 3.3.1 总线特性
总线的物理实现:印制在电路板上
![总线物理实现](https://file.peteralbus.com/assets/blog/imgs/blogimg/private/co_06.png)
+ 机械特性:尺寸、形状、管脚数及排列顺序
+ 电气特性:传输方向和有效的电平范围
+ 功能特性:每根传输线的功能(地址、数据、控制)
+ 时间特性:任意一根线在什么时间内有效
#### 3.3.2 总线的性能指标
+ **总线宽度**:数据线根数
+ **总线带宽**:每秒传输的最大字节数(MBps)
+ **时钟同步/异步**:同步/不同步
+ **总线复用**:地址线与数据线服用
+ **信号线数**:地址线、数据线和控制线的综合
+ **总线控制方式**:并发、自动、仲裁、逻辑、计数
+ 其他指标:**负载能力**
#### 3.3.3 总线标准
> **总线标准**,可视为系统与各模块,模块与各模块之间的一个互联的标准界面。
采用总线标准可以为计算机接口的软硬件设计提供方便。
流行的总线标准:
+ ISA
+ EISA
+ VESA(LV-BUS)
+ PCI
+ AGP
+ RS-232
+ USB
### 3.4 总线结构
+ 单总线结构:已在-3.1 总线的基本概念-处展示
这类总线通常被小型或微型计算机使用
+ 多总线结构
+ 双总线结构
![总线结构](https://file.peteralbus.com/assets/blog/imgs/blogimg/private/co_07.png)
+ 三总线结构
![总线结构](https://file.peteralbus.com/assets/blog/imgs/blogimg/private/co_08.png)
+ 三总线结构的又一形式
![总线结构](https://file.peteralbus.com/assets/blog/imgs/blogimg/private/co_09.png)
+ 四总线结构
![总线结构](https://file.peteralbus.com/assets/blog/imgs/blogimg/private/co_10.png)
+ 总线结构举例(P55)
+ 传统卫星总线结构
+ VL-BUS局部总线结构
+ PCI总线结构
+ 多层PCI总线结构
### 3.5 总线控制
#### 3.5.1 总线判优控制
> 总线上的设备分为主设备和从设备。
>
> **主设备**:对总线有控制权。
>
> **从设备**:响应从设备发来的总线命令
>
> 当多个主设备要使用总线时,就由总线控制器的**判优**、仲裁逻辑按一定的优先等级顺序确定哪个主设备能使用总线。
总线判优控制
+ 集中式
+ 链式查询
+ 离控制部件最近的设备有最高的优先权
+ 对电路故障敏感
+ 使用2根线确定总线控制权
+ 计数器定时查询
+ 计数可以从0开始也可以从上次结束的地方开始(会导致优先级不同)
+ 电路故障不如链式查询敏感,但增加了设备地址线,控制也较复杂
+ 使用$log_2n$条线确定总线控制权
+ 独立请求方式
+ 响应速度快,优先次序灵活
+ 控制线数量多,控制也更复杂
+ 使用2n根线确定总线控制权
+ 分布式
![总线判优控制](https://file.peteralbus.com/assets/blog/imgs/blogimg/private/co_11.png)
#### 3.5.2 总线通信控制
+ **目的**:解决通信双方协调配合问题
+ 总线传输周期:
+ 申请分配阶段:主模块申请,总线仲裁
+ 寻址阶段:主模块向从模块给出地址和命令
+ 传数阶段:主模块和从模块交换数据
+ 结束阶段:主模块撤销有关信息
+ 总线通信的四种方式
+ 同步通信:由统一时标控制数据传送
+ 异步通信:允许各模块速度的不一致性
+ 不互锁:从设备没有反馈
+ 半互锁:等待从设备有反馈后主设备才能撤销请求
+ 全互锁:等待从设备有反馈后主设备才能撤销请求,等待主设备撤销请求后才能撤销回答
+ 半同步通信若检测到WAIT信号插入时钟(等待)周期(同步、异步结合)
+ 分离式通信:充分挖掘系统总线每个瞬间的潜力
+ 子周期1主模块申请占用总线使用后放弃总线使用权
+ 子周期2从模块申请占用总线传输数据
前三种通信的共同点:
+ 首先申请总线
+ 主模块通过总线向从模块发送请求
+ 从模块准备数据
+ 从模块传输数据
在准备数据时总线空闲
分离式通信:
各模块有权申请占用总线
异步通信
各模块准备数据时都不占用总线
**充分提高了总线的有效占用**
---
# 第四章 存储器
### 4.1 概述
#### 4.1.1 存储器的分类
##### 1.按存储介质分类
+ **半导体存储器** TTL,MOS (易失)
+ **磁表面存储器** 磁头,载磁体 (非易失)
+ **磁芯存储器** 硬磁材料,环状元件 (非易失)
+ **光盘存储器** 激光,磁光材料 (非易失)
##### 2.按存取方式分类
+ 存取时间与物理地址无关(随机访问)
+ 随机存储器
+ 只读存储器
+ 存取时间与物理地址有关(串行访问)
+ 顺序存储存储器 磁带
+ 直接存取存储器 磁盘
##### 3.按在计算机中的作用分类
+ 主存储器
+ RAM
+ 静态RAM
+ 动态RAM
+ ROM
+ MROM(掩模式只读存储器)
+ PROM(可编程只读存储器)
+ EPROM(可擦编程只读存储器)
+ EEPROM(带电可擦可编程只读存储器)
+ Flash Memory
+ 高速缓冲存储器(Cache)
+ 辅助存储器
#### 4.1.2 存储器的层次结构
##### 1.存储器三个重要特性的关系
![三个重要特性的关系](https://file.peteralbus.com/assets/blog/imgs/blogimg/private/co_12.png)
##### 2.缓存-主存层次和主存-辅存层次
缓存-主存:速度
主存-辅存:容量
### 4.2 主存储器
#### 4.2.1 概述
##### 1.主存的基本组成
![主存的基本组成](https://file.peteralbus.com/assets/blog/imgs/blogimg/private/co_13.png)
##### 2.主存和CPU的联系
![主存和CPU的联系](https://file.peteralbus.com/assets/blog/imgs/blogimg/private/co_14.png)
##### 3.主存中存储单元地址的分配
> 字节8位二进制数
>
> 字根据机器字长不同用n个字节表示一个字
+ 一个字中的高位字节地址表示字地址
| 字地址 | 字节地址 | 字节地址 | 字节地址 | 字节地址 |
| :----: | :------: | :------: | :------: | :------: |
| 0 | 0 | 1 | 2 | 3 |
| 4 | 4 | 5 | 6 | 7 |
| 8 | 8 | 9 | 10 | 11 |
+ 一个字中的低位字节地址表示字地址
| 字地址 | 字节地址 | 字节地址 |
| :----: | :------: | :------: |
| 0 | 1 | 0 |
| 2 | 3 | 2 |
| 4 | 5 | 4 |
按字寻址需要拿出n根地址线(2^n=字节数目)其余位标识字地址寻址范围为2^(地址线数目-n)
##### 4.主存的技术指标
+ 存储容量
+ 存储速度
+ 存取时间
+ 存取周期:连续两次独立的存储器操作所需的最小间隔时间
+ 存储器的带宽 位/秒
#### 4.2.2 半导体存储芯片简介
##### 1.基本结构
![半导体存储芯片](https://file.peteralbus.com/assets/blog/imgs/blogimg/private/co_15.png)
```
芯片容量=2^地址线条数*数据线位数
```
片选线CS/CE,读写控制线WE(Write Enable),OE(Output Enable) 上划线代表:低电平有效
##### 2.半导体存储芯片的译码驱动方式
+ 线选法:仅一个地址译码器,选择对应的字线,容量大时不合适
+ 重合法:
![重合法](https://file.peteralbus.com/assets/blog/imgs/blogimg/private/co_16.png)
#### 4.2.3 随机存取存储器(RAM)
##### 1.静态RAM(SRAM)
> 静态RAM使用触发器原理储存信息在掉电时丢失全部信息。
+ 基本电路
![RAM1](https://file.peteralbus.com/assets/blog/imgs/blogimg/private/co_17.png)
+ 读操作
![RAM2](https://file.peteralbus.com/assets/blog/imgs/blogimg/private/co_18.png)
+ 写操作
![RAM3](https://file.peteralbus.com/assets/blog/imgs/blogimg/private/co_19.png)
+ 静态RAM读、写时序
![RAM4](https://file.peteralbus.com/assets/blog/imgs/blogimg/private/co_20.png)
![RAM5](https://file.peteralbus.com/assets/blog/imgs/blogimg/private/co_21.png)
##### 2.动态RAM(DRAM)
> 动态RAM靠电容存储电荷的原理储存信息电容上有足够电荷表示1无足够电荷则表示0。电荷不能长久维持因此必须在2ms内对所有存储单元恢复一次原状态这个过程称为再生或刷新。
基本单元电路:
![RAM6](https://file.peteralbus.com/assets/blog/imgs/blogimg/private/co_22.png)
读出信息与原存信息相反
写入信息与输入信息相同
+ 动态RAM刷新
刷新与行地址有关
+ 集中刷新:每隔一段时间刷新全部
+ 分散刷新:一个存取周期包含读写+刷新
+ 异步刷新:每隔一段时间刷新一行,可将刷新安排在指令译码阶段
##### 3.动态RAM和静态RAM的比较
目前动态RAM的应用比静态RAM广得多。
| | DRAM | SRAM |
| -------- | ------ | ------ |
| 存储原理 | 电容 | 触发器 |
| 刷新 | 有 | **无** |
| 集成度 | **高** | 低 |
| 芯片引脚 | **少** | 多 |
| 功耗 | **小** | 大 |
| 价格 | **低** | 高 |
| 速度 | 慢 | **快** |
#### 4.2.4 只读存储器(ROM)
##### 1.掩模ROM(MROM)
行列选择线交叉处有MOS管为1否则为0
##### 2.PROM(一次性编程)
通过熔丝熔丝断为0未断为1
##### 3.EPROM(多次性编程)
N型沟道浮动栅MOS电路写入电压擦除紫外线
##### 4.EEPROM(多次性编程)
+ 电可擦写
+ 局部擦写
+ 全部擦写
##### 5.Flash Memory(闪速型存储器)
比EEPROM快具备RAM功能
#### 4.2.5 存储器与CPU的连接
##### 1.存储器容量的扩展
+ 位扩展(增加存储字长)
用2片1K\*4位的存储芯片组成1K\*8位的存储器
+ 字扩展
用2片1K\*8位的存储芯片组成2K\*8位的存储器
+ 字、位扩展
上面两者结合而成
##### 2.存储器与CPU的连接
+ 地址线的连接
+ 数据线的连接
+ 读/写命令线的连接
+ 片选线的连接
+ 合理选择存储芯片
+ 其他:时序、负载
参考书P94 例4.1/4.2
#### 4.2.6 存储器的校验
##### 1.编码的最小距离
> 编码的最小距离,是指在一种编码系统中,任意两组合法代码之间二进制位数的最少差异。
例如假如一个编码系统合法编码有1111,1100,0000,则最小编码距离为2。
编码的纠错、检错能力与编码的最小距离有关。
设L为编码的最小距离D为检测错误的位数C为纠正错误的位数
```c
L-1=D+C(D>=C)
```
##### 2.汉明码
> “汉明码”是一种“错误纠正码”,可以用来检测并且纠正数据从发送端发往接收端中发生的错误
汉明码是具有一位纠错能力的编码。
若原值有n位汉明码的组成需要添加k位检测位
$$
2^k \geq n+k+1
$$
检测位的位置为2^i(i=0,1,2,3...)
添加检测位后分组,每个检测位对应第(i+1)组:
+ 对于检测位2^i将所有数的位置转换为2进制
+ 如有7位数字则分别为001位、010位、011位....
+ 将所有第i+1位为1的数字分到该组如检测为为2^0=1则001,011,101,111(第1357个数)属于该组
分组后进行校验,分为奇校验与偶校验
对每组进行检测,要求每组的数字之和为奇数/偶数(对于二进制来说,即拥有奇数/偶数个1)(可通过对所有数进行异或运算若结果为0则为偶数结果为1则为奇数)
若检测出错,通过找到多个出错的组的公共位即可找到出错的位置
#### 4.2.7 提高访存速度的措施
+ 采用高速器件
+ 采用层次结构Cache-主存
+ 调整主存结构
+ 单体多字系统
+ 多体并行系统
+ 高位交叉 各个体并行工作
+ 低位交叉 在不改变存储器周期的前提下,增加存储器带宽
+ 存储器控制部件
+ 高性能存储芯片
+ SDRAM CPU无需等待在系统时钟的控制下进行读出和写入
+ RDRAM 主要解决了存储器带宽问题
+ 带Cache的DRAM
### 4.3 高速缓冲器
#### 4.3.1 概述
##### 1.问题的提出
避免CPU“空等”的现象
解决CPU和DRAM的速度差异
![CACHE](https://file.peteralbus.com/assets/blog/imgs/blogimg/private/co_23.png)
##### 2.Cache的工作原理
+ 主存和缓存按块存储,块的到校相同
+ 命中与未命中
+ 命中:主存块调入缓存,主存块与缓存建立了对应关系
+ 用 标记记录 与某缓存块建立了对应关系的 主存块号
+ 未命中:未建立对应关系
+ 命中率
+ CPU欲访问的信息在Cache中的比率
+ 命中率 与 Cache 的 **容量** 与 **块长** 有关
+ Cache-主存系统的效率
$$
e=\frac{访问Cache的时间}{平均访问时间}
$$
##### 3.Cache的基本结构
![Cache结构](https://file.peteralbus.com/assets/blog/imgs/blogimg/private/co_24.png)
##### 4.Cache的读写操作
+ 读:
![CACHE读](https://file.peteralbus.com/assets/blog/imgs/blogimg/private/co_25.png)
+ 写保证CACHE和主存的一致性
+ 写直达法
写操作时既写入Cache又写入主存
写操作时间就是访问主存的时间,更新策略容易时间
+ 写回法
只写入Cache写操作时间就是访问Cache的时间
Cache被替换的块需要写回主存增加了Cache 的复杂性
##### 5.Cache的改进
+ 增加Cache级数
+ 统一缓存和分立缓存
#### 4.3.2 Cache-主存地址的映射
##### 1.直接映射
每个缓存块对应多个主存块
缓存标记储存的主存块,比较器检测是否命中
##### 2.全相联映射
主存中的任意一块可以映射到缓存中的任意一块
##### 3.组相联映射
某一主存块可以映射到缓存的某一组的任意一块(直接映射和全相联映射结合)
#### 4.3.3 替换算法
+ FIFO
+ LRU
### 4.4 辅助存储器
+ 特点不直接与CPU交换信息
+ 硬磁盘
+ 软盘
+ 光盘
---
# 第五章 输入输出系统
### 5.1 概述
#### 5.1.1 输入输出系统的发展概况
+ 早期分散连接CPU和I/O设备串行工作程序查询方式
+ 接口模块和DMA阶段
+ 总线连接
+ CPU和I/O设备并行工作
+ 中断方式
+ DMA方式
+ 具有通道结构的阶段
+ 具有I/O处理机的阶段
#### 5.1.2 输入输出系统的组成
+ I/O软件
+ I/O指令 CPU指令的一部分
+ 通道指令 通道自身的指令
+ I/O硬件
+ 设备-I/O接口
+ 设备-设备控制器-通道
#### 5.1.3 I/O设备与主机的联系方式
+ I/O设备编址方式
+ 统一编址 用取数、存数指令
+ 不统一编址 有专门的I/O指令
+ 设备选址
用设备选择电路识别是否被选中
+ 传送方式
+ 串行
+ 并行
+ 联络方式
+ 立即响应
+ 异步工作采用应答信号
+ 同步工作采用同步时标
+ 连接方式
+ 辐射式连接
每个设备都配有一套控制线路和一组信号线
不便于增删设备
+ 总线连接
便于增删设备
#### 5.1.3 I/O设备与主机信息传送的控制方式
+ 程序查询方式CPU和I/O串行工作踏步等待
+ 程序中断方式CPU和I/O设备并行工作
+ I/O准备CPU完成自身任务
+ 与主机交换信息CPU暂停先行程序
+ DMA方式CPU和I/O设备并行工作
+ 主存和I/O之间有一条直接数据通道
+ 不中断现有程序
+ 周期挪用
![三种方式的比较](https://file.peteralbus.com/assets/blog/imgs/blogimg/private/co_26.png)
### 5.2 I/O设备
#### 5.2.1 概述
> 中央处理器和主存构成了主机除主机外的大部分硬件设备都可称为I/O设备或外部设备或外围设备简称外设。
外部设备大致分为3类
+ **人机交互设备:**键盘、鼠标、打印机、显示器
+ **计算机信息存储设备:**磁盘、光盘、磁带
+ **机-机通信设备:**调制解调器等
#### 5.2.2 输入设备
+ 键盘
+ 按键
+ 判断哪个键被按下
+ 将此键翻译成ASCII码
+ 鼠标
+ 机械式 金属球,电位器
+ 光电式 光电转换器
+ 触摸屏
#### 5.2.3 输出设备
+ 显示器
+ 字符显示 字符发生器
+ 图形显示 主观图像
+ 图像显示 客观图像
+ 打印机
+ 击打式 点阵式
+ 非击打式 激光、喷墨
#### 5.2.4 其他I/O设备
+ A/D,D/A转换器(数字/模拟信号转换器)
+ 终端-由键盘和显示器组成
+ 汉字处理
#### 5.2.5 多媒体技术
> 多媒体Multimedia是多种[媒体]()的[综合](),一般包括文本,声音和图像等多种媒体形式。
>
> 在计算机系统中,多媒体指组合两种或两种以上媒体的一种人机交互式[信息交流]()和[传播媒体]()。使用的媒体包括文字、图片、照片、声音、动画和影片,以及程式所提供的互动功能。
+ 多媒体计算机的关键技术
+ 视频和音频数据的压缩与解压缩技术
+ 多媒体专用芯片
+ 大容量存储器
+ 适用于多媒体技术的软件
### 5.3 I/O接口
#### 5.3.1 概述
为什么要放置接口?
+ 实现设备的选择
+ 实现数据缓冲达到速度匹配
+ 实现数据串——并格式转换
+ 实现电平转换
+ 传送控制命令
+ 反映设备的状态
#### 5.3.2 接口的功能和组成
##### 1. 总线连接方式的I/O接口电路
+ 设备选择线
+ 数据线
+ 命令线
+ 状态线
![I/O接口电路](https://file.peteralbus.com/assets/blog/imgs/blogimg/private/co_27.png)
##### 2.接口的功能和组成
| 功能 | 组成 |
| :----------: | :---------------: |
| 选址 | 设备选择电路 |
| 传送命令 | 命令寄存器/译码器 |
| 传送数据 | 数据缓冲寄存器 |
| 反映设备状态 | 设备状态标记 |
+ 完成触发器D
+ 工作触发器B
+ 中断请求触发器INTR
+ 屏蔽触发器MASK
#### 5.3.3 接口类型
+ 按数据传送方式分类
+ 并行接口
+ 串行接口
+ 按选择的灵活性
+ 可编程接口
+ 不可编程接口
+ 通用性
+ 通用接口
+ 专用接口
+ 控制方式(程序查询方式没有接口)
+ 中断接口
+ DMA接口
### 5.4 程序查询方式
#### 5.4.1 程序查询流程
单个和多个设备的程序查询流程:
![程序查询流程](https://file.peteralbus.com/assets/blog/imgs/blogimg/private/co_28.png)
#### 5.4.2 程序流程
![程序流程](https://file.peteralbus.com/assets/blog/imgs/blogimg/private/co_29.png)
#### 5.4.3 接口电路
![接口电路](https://file.peteralbus.com/assets/blog/imgs/blogimg/private/co_30.png)
### 5.5 程序中断方式
#### 5.4.1 中断的概念
> **中断**是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行。
#### 5.4.2 中断的产生
CPU启动I/O设备后继续执行主设备I/O设备在数据准备完成后发起中断CPU处理I/O。
CPU与I/O设备并行工作
#### 5.4.3 程序中断方式接口电路
##### 1. 配置中断请求触发器(INTR)和中断屏蔽触发器(MASK)
INTR=1 CPU发起中断请求
MASK=1 中断被屏蔽
D: 完成触发器代表I/O准备完成
##### 2.排队器
+ 硬件在CPU内或接口电路中
+ 软件
##### 3.中断向量地址形成部件
+ 由软件产生
+ 硬件向量法:硬件产生向量地址,再由向量地址找到入口地址
##### 4.程序中断方式接口电路的基本组成
![三种方式的比较](https://file.peteralbus.com/assets/blog/imgs/blogimg/private/co_31.png)
#### 5.4.4 I/O中断处理过程
+ CPU响应中断的条件和时间
+ 条件EINT允许中断触发器=1
+ 时间D=1且MASK=0
在每条指令执行阶段的结束前CPU发送中断查询信号(INTR置1)
#### 5.4.5 中断服务程序的流程
##### 1.流程
+ 保护现场
+ 程序断点的保护
+ 寄存器内容的保护
+ 中断服务
+ 恢复现场
+ 中断返回
##### 2.单重中断和多重中断
单重中断:不允许中断现行的中断服务程序
多重中断:允许级别更高的中断源中断现行的中断服务车光绪
### 5.6 DMA方式
#### 5.6.1 DMA方式的特点
+ DMA通过DMA接口与主存直接交换数据而不需要经过CPU
+ DMA与主存交换数据的三种方式
+ 停止CPU访问主存控制简单、CPU处于不工作状态、未充分发挥CPU对主存的利用率
+ 周期挪用DMA请求时CPU没有访存则成功DMA与CPU同时请求访存时优先DMA否则等待CPU
+ DMA与CPU交替访问工作周期中专为DMA分出时间不需要建立申请和归还总线的使用权
#### 5.6.2 DMA接口的功能和组成
##### 1.DMA接口功能
+ 向CPU申请DMA传送
+ 处理总线控制权的转交
+ 管理系统总线、控制数据传送
+ 确定数据传送的首地址和长度
+ DMA传送结束时给出完成信号
##### 2.DMA接口组成
![DMA](https://file.peteralbus.com/assets/blog/imgs/blogimg/private/co_32.png)
#### 5.6.3 DMA的工作过程
##### 1.DMA传送过程
+ 预处理
+ 数据传送
+ 后处理
+ 校验数据正确性
+ 是否继续使用DMA
+ **由中断服务程序完成**
##### 2.DMA接口与系统的连接方式
+ 具有公共请求线的DMA请求
+ 独立的DMA请求
##### 3.DMA方式与程序中断方式的比较
| | 中断方式 | DMA方式 |
| ------------ | ------------ | ------------ |
| 数据传送 | 程序 | 硬件 |
| 响应时间 | 指令执行结束 | 存取周期结束 |
| 处理异常情况 | 能 | 不能 |
| 中断请求 | 传送数据 | 后处理 |
| 优先级 | 低 | 高 |
#### 5.6.4 DMA接口的类型
+ 选择型:物理上连接多个设备,逻辑上只连接一个
+ 多路型:物理上连接多个,逻辑上也允许多个同时工作
+ 原理:并发
---
# 第六章 计算机的运算方法
### 6.1 无符号数和有符号数
#### 6.1.1 无符号数
寄存器的位数反映无符号数二点表示范围
8位0~255
16位0~65535
#### 6.1.2 有符号数
##### 1.机器数与真值
| 真值 | 机器数 |
| :-----: | :----------------------: |
| +0.1011 | 0,1011[小数点在符号位后] |
| -1100 | 1,1100[小数点在末尾] |
##### 2.原码表示法
整数:
$$
\begin{equation}[x]_原=
\begin{cases}
0,x& 2^n>x \geq 0 \\
2^n-x& 0\geq x >-2^n
\end{cases}
\end{equation}
$$
小数:
$$
\begin{equation}[x]_原=
\begin{cases}
x& 1>x \geq 0 \\
1-x& 0\geq x >-1
\end{cases}
\end{equation}
$$
即正数符号位为0负数符号位为1用逗号将符号位和数值部分隔开
原码的特点:简单、直观
但用原码对负数作加法时会出现问题
解决方法:找一个与负数等价的正数来代替这个负数
##### 3.补码表示法
+ 一个负数加上 “模” 即得该负数的补数
+ 一个正数和一个负数互为补数时,它们绝对值之和即为 模 数
+ 正数的补数即为其本身
整数n为整数位数
$$
\begin{equation}[x]_补=
\begin{cases}
0,x& 2^n>x \geq 0 \\
2^{n+1}+x& 0\geq x >-2^n
\end{cases}
\end{equation}
$$
小数:
$$
\begin{equation}[x]_补=
\begin{cases}
x& 1>x \geq 0 \\
2+x& 0\geq x >-1
\end{cases}
\end{equation}
$$
**求补码的快捷方式**:真值为负时,补码=原码除符号位外每位取反,末尾+1
##### 4.反码表示法
负数的原码:符号位外每一位都取反
##### 5.三种机器数的总结
+ 最高位为符号位
+ 对于整数,原码=补码=反码
+ 对于负数符号位为1其数值部分
+ 原码取反+1→补码
+ 原码取反→反码
##### 6.移码表示法
补码难以判断其真值大小:补码的符号位取反
$$
[x]_移=2^n+x (x^n>x \geq -2^n)
$$
最小真值的移码为全0
### 6.2 数的定点表示和浮点表示
#### 6.2.1 定点表示
小数点按约定方式标出
#### 6.2.2 浮点表示
浮点数的一般形式:
$$
N=S \times r^j
$$
S尾数j阶码r基数(数值)
计算机中r取2的n次方
当r=2时
$$
N=11.0101=0.110101 \times 2^{10}
$$
——规格化数
计算机中S存小数可正可负j存整数可正可负
+ 浮点数的表示形式
由j阶码和S尾数共同表示
阶码包括阶符和阶码的数值部分,尾数同理,包含数符和尾数的数值部分
阶码的位数反映浮点数的表示范围
尾数的尾数反映浮点数的精度
+ 浮点数的表示范围
+ 上溢:阶码>最大阶码
+ 下溢:阶码<最小阶码 按照**机器零**处理
+ 浮点数的规格化形式
+ r=2 尾数最高位为1
+ r=4 尾数最高2位不全为0
+ r=8 尾数最高3位不全为0
r越大浮点数表示范围越大浮点数精度降低
+ 机器零:
+ 阶码用移码尾数用补码表示时机器零才为0,0000;0,00000
### 6.3 定点运算
#### 6.3.1 移位运算
+ 移位的意义:与加减和配合实现乘除运算
左移:绝对值扩大
右移:绝对值缩小
+ 算数移位规则
符号位不变
正数移位填补代码0
负数移位:
+ 原码添补0
+ 反码添补1
+ 补码右移添0左移添1、
+ 算数移位和逻辑移位的区别:算术移位考虑符号位、补反码,逻辑移位不考虑
#### 6.3.2 加减法运算
##### 1.补码加减运算
连同符号位一起加,符号位产生的进位自然丢掉
##### 2.溢出判断
+ 一位符号位判断溢出:参加运算的两个数符号位相同,其结果的符号与原操作数不同,即为溢出
+ 两位符号位判断溢出:结果符号位不同即为溢出
#### 6.3.3 乘法运算
##### 1.分析笔算乘法
+ 符号位单独处理
+ 乘数的某一位决定是否加被乘数
+ 4个位积一起相加——难以实现
+ 乘积的尾数扩大一倍
##### 2.改进
+ 每一位乘法运算转化为加法运算后,右移一位
总结:乘法运算可以用加法和移位实现
##### 3.原码乘法
乘积的符号位单独处理
数值部分为绝对值相乘
+ 原码一位乘
+ 原码两位乘
##### 4.补码乘法
+ 被乘数任意,乘数为正
同原码乘,但加和移位按补码规则运算,乘积的符号自然形成
+ 被乘数任意,乘数为负
乘数[y]补去掉符号位,其余同上
最后加上[-x]补校正
+ Booth算法初始时在乘数右边增加一个辅助位根据当前位和辅助位两位判断
+ 00/11不加移位
+ 01+[x]补,移位
+ 10+[-x]补,移位
#### 6.3.4 除法运算
+ 符号位异或形成
+ `abs(x)-abs(y)>0`上商1反之上商0
+ 余数左移一位低位补0减除数
+ 1倍字长加法器
+ 在寄存器最末尾上商
恢复余数法/加减交替法
### 6.4 浮点四则运算
#### 6.4.1 浮点加减运算
对阶:求阶差,使小数点位置看齐(阶数小的向阶数大的看齐)
尾数求和
+ 规格化数的判断:
+ 原码第一数位为1
+ 补码:符号位和第一数位不同
舍入:
对阶右规的过程中尾数末尾可能丢失,需要考虑舍入
+ 0舍置1法
+ 恒置1法
---
# 第七章 机器指令
### 7.1 机器指令
#### 7.1.1 指令的一般格式
\[操作码字段\]\[地址码字段\]
##### 1.操作码 反映机器做什么操作
+ 长度固定
+ 长度可变
+ 扩展操作码技术:操作码的位数随着地址数的减少而增加
+ 4位、8位操作码分别对应15条n地址、n-1地址指令
##### 2.地址码
+ 四地址
+ 第一操作数地址
+ 第二操作数地址
+ 结果地址
+ 下一条指令地址
4次访存
+ 三地址
+ 使用PC代替下一条指令地址
+ 第一第二操作数地址及结果地址
4次访存
+ 二地址
+ 使用某一操作数地址代替结果地址,结果存于操作数
+ 结果存于ACC则仅需3次访存
4次访存
+ 一地址
+ 使用ACC代替某一操作数
2次访存
+ 零地址
+ 无地址码
#### 7.1.2 指令字长
指令字长决定于
+ 操作码的长度
+ 操作数地址的长度
+ 操作数地址的个数
指令字长固定:指令字长=存储字长
指令字长可变:按字节的倍数变化
### 7.2 操作数类型和操作种类
#### 7.2.1 操作数类型
+ 地址 无符号整数
+ 数字 定点数、浮点数、十进制数
+ 字符 ASCII
+ 逻辑数 逻辑运算
#### 7.2.2 数据在存储值中的存放方式
+ 字地址为低字节地址
+ 字地址为高字节地址
#### 7.2.3 操作类型
##### 1.数据传送
从寄存器/存储器到存储器/寄存器
例如MOVE/STORE/LOAD/PUSH/POP
##### 2.算数逻辑操作
加减乘除与非...
ADD SUB MUL DIV INC DEC CMP AND OR NOT XOR
##### 3.移位操作
算术移位,逻辑移位,循环移位
##### 4.转移
无条件转移JMP
条件转移JZ,JO,JC,SKP
调用和返回(CALL,RETURN)
陷阱与陷阱指令意外事故的中断一般由CPU自动产生并执行(隐指令)
##### 5.输入输出
### 7.3 寻址方式
> **寻址**:确定本条指令的操作数地址,下一条欲执行指令的指令地址
寻址方式:指令寻址、数据寻址
#### 7.3.1 指令寻址
顺序PC+1→PC
跳跃:由转移指令给出
#### 7.3.2 数据寻址
| 操作码 | 寻址特征 | 形式地址A |
| ------ | -------- | --------- |
> 形式地址:指令字中的地址
>
> 有效地址:操作数的真实地址
约定指令字长=存储字长=机器字长
##### 1.立即寻址
形式地址就是操作数
##### 2.直接寻址
有效地址由形式地址直接给出,访问一次存储器
##### 3.隐含寻址
操作数地址隐含在操作码中如ADD的一个操作数隐含在ACC中
##### 4.间接寻址
`EA=*A`有效地址由形式地址间接提供访存2次(一次间址)或多次(多次间址)
可以扩大寻址范围,便于编制程序
##### 5.寄存器寻址
有效地址即为寄存器编号
##### 6.寄存器间接寻址
有效地址在寄存器中,便于编制循环程序
##### 7.基址寻址
EA=(BR)+A,BR为基址寄存器
也可采用通用寄存器作为基址寄存器,寄存器需要用户指定
BR不变A可变
##### 8.变址寻址
EA=(IX)+A
执行过程中A不变IX可变
便于处理数组问题
##### 9.相对寻址
EA=(PC)+A
A是相对于当前指令的位移量
广泛用于转移指令
##### 10.堆栈寻址
栈顶地址由SP指出
### 7.4 指令格式举例
#### 7.4.1 设计指令格式时应考虑的各种因素
+ 指令系统的兼容性(向上兼容)
+ 其他因素
+ **操作类型** 包括指令个数以及操作的难易程度
+ **数据类型** 确定哪些数据类型可参与操作
+ **指令格式** 指令字长是否固定
+ **寻址方式** 指令寻址
+ **寄存器个数** 寄存器多少影响指令执行时间
#### 7.4.2 指令格式举例
+ PDP-8 指令字长固定为12位
+ PDD-11 指令字长有16位、32位、48位3种
+ IBM 360
+ INTEL 8086
### 7.4 RISC技术
#### 7.4.1 RISC的产生和发展
RISC(Reduced Instuction Set Computer)
CISC(Complex Instruction Set Computer)
80-20规律80%的语句仅仅使用20%的计算机指令
能否使用这20%组合成不常用的剩余指令
#### 7.4.2 RISC的主要特征
+ 选用一些简单指令
+ 长度固定、寻址方式少、指令格式种类少
+ 只有LOAD/STORE访存
+ CPU中有多个通用寄存器
+ 采用流水技术,一个时钟周期内完成一条指令
+ 采用组合逻辑实现控制器
+ 采用优化的编译程序
#### 7.4.3 CISC的主要特征
+ 复杂庞大
+ 长度不固定,格式种类多
+ 访存指令不受限制
+ CPU中有专用寄存器
+ 大多数指令需要多个时钟周期执行完毕
+ 采用微程序控制器
+ 难以用优化编译生成高效代码
#### 7.4.4 RISC和CISC的比较
+ RISC更能充分利用VLSI芯片的面积
+ RISC更能提高计算机速度便于实现指令流水
+ RISC便于设计降低成本提高可靠性
+ RISC有利于编译程序优化
+ RISC**不易**实现指令程序兼容
---
# 第八章 CPU的结构和功能
### 8.1 CPU的结构
#### 8.1.1 CPU的功能
+ 控制器
+ 取指令
+ 分析指令
+ 执行指令,发出操作命令
+ 控制程序输入以及结构的输出
+ 总线管理
+ 处理异常情况和特殊请求
+ 运算器
+ 实现算数运算和逻辑运算
#### 8.1.2 CPU结构框图
指令控制 PC,IR
操作控制、时间控制 CU,时序电路
数据加工 ALU,寄存器
处理中断 中断系统
![CPU结构框图](https://file.peteralbus.com/assets/blog/imgs/blogimg/private/co_33.png)
#### 8.1.3 CPU的寄存器
+ 用户可见寄存器
+ 通用寄存器
+ 数据寄存器
+ 地址寄存器
+ 条件码寄存器
+ 控制和状态寄存器
+ 控制寄存器
PC MAR M MDR IR
控制CPU操作,其中MAR,MDR,IR用户不可见,PC用户可见
+ 状态寄存器
#### 8.1.4 控制单元CU和中断系统
+ CU 产生全部指令的微操作命令序列
+ 组合逻辑设计
+ 微程序设计
+ 中断系统
#### 8.1.5 ALU
参见第六章
### 8.2 指令周期
#### 8.2.1 指令周期的基本概念
> **指令周期**:取出并执行一条指令所需的全部时间
完成一条指令:
+ 取指、分析:取指周期
+ 执行:执行周期
每条指令的指令周期不同
指令周期还可以加入:间址周期(间接寻址)、终端周期
+ CPU工作周期的标志
四种性质:
+ 取指令 取指周期
+ 取地址 间址周期
+ 取操作数 执行周期
+ 存程序断点 中断周期
#### 8.2.2 指令周期的数据流
+ 取指周期
![](https://file.peteralbus.com/assets/blog/imgs/blogimg/private/co_34.png)
+ 间址周期
![](https://file.peteralbus.com/assets/blog/imgs/blogimg/private/co_35.png)
+ 执行周期——不同指令数据流不同
+ 中断周期
![](https://file.peteralbus.com/assets/blog/imgs/blogimg/private/co_36.png)
### 8.3 指令流水
#### 8.3.1 如何提高机器速度
+ 提高访存速度
高速芯片 Cache 多体并行
+ 提高I/O和主机之间的传送速度
中断-DMA-通道-I/O处理机-多总线
+ 提高运算器速度
+ 提高整机处理能力
+ 高速器件
+ 改进系统结构,开发系统的并行性
#### 8.3.2 系统的并行性
+ 并行的概念
> **并发**:两个或两个以上的事件在同一时间段发生
>
> **同时**:两个或两个以上的事件同一时刻发生
+ 并行性的等级
+ 过程级 粗粒度 软件实现
+ 指令级 细粒度 硬件实现
#### 8.3.3 指令流水原理
##### 1.指令的串行执行
取指令1-执行指令1-取指令2-...
总有一个部件空闲
##### 2.指令的二级流水
| 取指令1 | 执行指令1 | | |
| ------- | --------- | --------- | --------- |
| | 取指令2 | 执行指令2 | |
| | | 取指令3 | 执行指令3 |
取指和执行上时间重叠,指令周期减半
##### 3.影响指令流水效率加倍的因素
+ 指令时间>取指事件
+ 条件转移指令对流水有影响:必须等待上条指令执行完成才能确定下一条指令
##### 4.指令的六级流水
![db_01.png (1806×755)](https://file.peteralbus.com/assets/blog/imgs/blogimg/private/co_37.png)
#### 8.3.4 影响指令流水线性能的因素
+ 结构相关:不同指令争用同一功能产生资源冲突
解决方法
+ 停顿
+ 数据存储器和指令存储器分开
+ 指令预取技术
+ 数据相关:不同指令重叠操作,可能改变操作数的读写访问顺序
解决方法
+ 后推法
+ 采用旁路技术
+ 控制相关:由转移指令引起
#### 8.3.5 流水线性能
+ 吞吐率:单位时间内流水线完成指令或输出结果的数量
最大吞吐率1/每段流水线时间
实际吞吐率(连续处理n条指令)n/(流水线段数\*流水线时间+(n-1)\*流水线时间)
+ 加速比:流水线的速度与等功能的非流水线速度之比
设m段流水线上完成n条指令nm/(m+n-1)
+ 效率:流水线中各功能段的利用率
由于流水线有 建立时间 和 排空时间
因此各功能段的 设备不可能 一直 处于 工作 状态
效率=流水线各段处于工作时间的时空区/流水线总的时空区=mnt/m(m+n-1)t
#### 8.3.6 流水线的多发技术
+ 超标量技术:并发多条独立指令
+ 超流水线技术:一个时钟周期内再分段
+ 超长指令字技术:编译程序挖掘潜在并行性,多条指令并行
#### 8.3.7 流水线结构
+ 指令流水线结构
+ 完成一条指令分7段取指令、指令译码、地址形成、取操作数、操作执行、回写结果、修改指令指针
+ 理想情况下7级流水的速度是不使用的7倍
+ 运算流水线
+ 浮点加减运算分为对阶、尾数求和、规格化三段
+ 分段原则:每段操作时间尽量一致
### 8.4 中断系统
#### 8.4.1 概述
+ 引起中断的各种因素
+ 人为设置的中断
+ 程序型事故
+ 硬件故障
+ I/O设备
+ 外部设备(键盘中断)
+ 中断系统需解决的问题
+ 中断源如何向CPU提出请求
+ 同时提出请求如何处理
+ CPU什么条件下,WHEN,HOW,响应中断
+ 如何保护现场
+ 如何寻找入口地址
+ 如何恢复现场,返回
+ 处理中断中如何处理新的中断
#### 8.4.2 中断请求标记和中断判优逻辑
##### 1.中断请求标记INTR
一个请球源一个INTR
多个INTR组成中断请求标记寄存器
+ INTR可以分散在中断源的接口电路中
+ 也可以集中在CPU中断系统内
##### 2.中断判优逻辑
+ 硬件实现:排队器
+ 软件实现:程序查询
#### 8.4.3 中断服务程序入口的寻找
+ 硬件向量法
+ 软件查询法
#### 8.4.4 中断响应
##### 1.中断响应的条件
允许中断触发器EINT=1
##### 2.响应中断的时间
指令执行周期结束时刻CPU发送查询信号
##### 3.中断隐指令
+ 保护程序断点
+ 寻找服务程序入口地址
+ 硬件关中断
#### 8.4.5 保护现场和恢复现场
+ 保护现场
+ 断点:中断隐指令完成
+ 寄存器内容:中断服务程序完成
+ 恢复现场:中断服务程序完成
#### 8.4.6 中断屏蔽技术
> **多重中断**如果CPU在执行某一中断服务程序过程中,又遇到了新的更高级的中断请求,CPU暂停原中断的处理,而转去处理新的中断,待处理完毕后,再返回继续处理原来的中断,这种中断称为多重中断,也称中断嵌套。
+ 实现多重中断的条件
+ 提前设置开中断指令
+ 优先级别高的中断有权中断优先级别低的中断源
+ 屏蔽技术
+ 屏蔽触发器MASK
+ 屏蔽字
+ 屏蔽技术可改变优先处理等级
+ 可以人为地屏蔽某个中断源地请求,便于程序控制