|
|
*written by PeterAlbus,Copyright © 2021 - SHOU 1951123 Hong Wu*
|
|
|
|
|
|
---
|
|
|
|
|
|
# 第一章 计算机系统概论
|
|
|
|
|
|
### 1.1 计算机系统简介
|
|
|
|
|
|
#### 1.1.1 计算机的软硬件概念
|
|
|
|
|
|
计算机系统由“硬件”和“软件”两大部分组成。
|
|
|
|
|
|
> **硬件**是指计算机的实体部分,它由看得见摸得着的各类电子元器件,各类光、电、机设备的事物组成,如主机、外部设备等。
|
|
|
|
|
|
> 所谓**软件**,它看不见摸不着,由人们实现编制的具有各类特殊功能的程序组成。
|
|
|
|
|
|
计算机的软件又可以分为两大类:系统软件和应用软件。
|
|
|
|
|
|
#### 1.1.2 计算机的层次结构
|
|
|
|
|
|
![五级层次结构](http://47.117.160.245:8080/pictrue/private/co_01.png)
|
|
|
|
|
|
### 1.2 计算机的基本组成
|
|
|
|
|
|
#### 1.2.1 冯诺依曼计算机的特点
|
|
|
|
|
|
+ 由运算器、存储器、控制器、输入设备和输出设备五大部件组成
|
|
|
+ 指令和数据以同等地位存放于存储器内
|
|
|
+ 指令和数据均用二进制表示
|
|
|
+ 指令由操作码和地址码组成,操作码表示操作性质,地址码表示操作数位置
|
|
|
+ 指令在存储器内按顺序存放,通常按顺序执行,特定条件下也可改变执行顺序
|
|
|
+ 机器以**运算器**为中心
|
|
|
|
|
|
#### 1.2.2 现代计算机硬件框图
|
|
|
|
|
|
+ 以**存储器**为中心
|
|
|
|
|
|
![存储器为中心](http://47.117.160.245:8080/pictrue/private/co_03.png)
|
|
|
|
|
|
+ 运算器用来完成算术运算和逻辑运算,并将运算的中间结果暂存在运算器内
|
|
|
+ 存储器用来存放数据和程序
|
|
|
+ 控制器用来控制、指挥程序和数据的输入、运行以及处理运算结果
|
|
|
+ 输入设备用来将人们熟悉的信息形式转换为机器能识别的信息形式
|
|
|
+ 输出设备可将机器运算结果转换为人们熟悉的信息形式
|
|
|
|
|
|
![现代计算机硬件框图](http://47.117.160.245:8080/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设备不断增多,人们希望随时增添或减撤设备**。**
|
|
|
|
|
|
**总线结构的举例**:
|
|
|
|
|
|
+ 单总线结构框图
|
|
|
|
|
|
![单总线](http://47.117.160.245:8080/pictrue/private/co_04.png)
|
|
|
|
|
|
+ 存储器为中心的双总线
|
|
|
|
|
|
![双总线](http://47.117.160.245:8080/pictrue/private/co_05.png)
|
|
|
|
|
|
### 3.2 总线的分类
|
|
|
|
|
|
+ 片内总线:芯片内部的总线
|
|
|
|
|
|
+ 系统总线:计算机各部位之间的信息传输线
|
|
|
|
|
|
+ 数据总线:双向,与机器字长,存储字长有关
|
|
|
+ 地址总线:单向,与存储地址,I/O地址有关
|
|
|
+ 控制总线:有出(存储器读写、总线允许、中断确认)、有入(中断请求、总线请求)
|
|
|
|
|
|
+ 通信总线:用于计算机系统之间或计算机系统与其他系统之间的通信
|
|
|
|
|
|
传输方式:
|
|
|
|
|
|
+ 串行通信总线
|
|
|
+ 并行通信总线
|
|
|
|
|
|
### 3.3 总线特性及性能指标
|
|
|
|
|
|
#### 3.3.1 总线特性
|
|
|
|
|
|
总线的物理实现:印制在电路板上
|
|
|
|
|
|
![总线物理实现](http://47.117.160.245:8080/pictrue/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 总线的基本概念-处展示
|
|
|
|
|
|
这类总线通常被小型或微型计算机使用
|
|
|
|
|
|
+ 多总线结构
|
|
|
|
|
|
+ 双总线结构
|
|
|
|
|
|
![总线结构](http://47.117.160.245:8080/pictrue/private/co_07.png)
|
|
|
|
|
|
+ 三总线结构
|
|
|
|
|
|
![总线结构](http://47.117.160.245:8080/pictrue/private/co_08.png)
|
|
|
|
|
|
+ 三总线结构的又一形式
|
|
|
|
|
|
![总线结构](http://47.117.160.245:8080/pictrue/private/co_09.png)
|
|
|
|
|
|
+ 四总线结构
|
|
|
|
|
|
![总线结构](http://47.117.160.245:8080/pictrue/private/co_10.png)
|
|
|
|
|
|
+ 总线结构举例(P55)
|
|
|
|
|
|
+ 传统卫星总线结构
|
|
|
+ VL-BUS局部总线结构
|
|
|
+ PCI总线结构
|
|
|
+ 多层PCI总线结构
|
|
|
|
|
|
### 3.5 总线控制
|
|
|
|
|
|
#### 3.5.1 总线判优控制
|
|
|
|
|
|
> 总线上的设备分为主设备和从设备。
|
|
|
>
|
|
|
> **主设备**:对总线有控制权。
|
|
|
>
|
|
|
> **从设备**:响应从设备发来的总线命令
|
|
|
>
|
|
|
> 当多个主设备要使用总线时,就由总线控制器的**判优**、仲裁逻辑按一定的优先等级顺序确定哪个主设备能使用总线。
|
|
|
|
|
|
总线判优控制
|
|
|
|
|
|
+ 集中式
|
|
|
+ 链式查询
|
|
|
+ 离控制部件最近的设备有最高的优先权
|
|
|
+ 对电路故障敏感
|
|
|
+ 使用2根线确定总线控制权
|
|
|
+ 计数器定时查询
|
|
|
+ 计数可以从0开始,也可以从上次结束的地方开始(会导致优先级不同)
|
|
|
+ 电路故障不如链式查询敏感,但增加了设备地址线,控制也较复杂
|
|
|
+ 使用$log_2n$条线确定总线控制权
|
|
|
+ 独立请求方式
|
|
|
+ 响应速度快,优先次序灵活
|
|
|
+ 控制线数量多,控制也更复杂
|
|
|
+ 使用2n根线确定总线控制权
|
|
|
+ 分布式
|
|
|
|
|
|
![总线判优控制](http://47.117.160.245:8080/pictrue/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.存储器三个重要特性的关系
|
|
|
|
|
|
![三个重要特性的关系](http://47.117.160.245:8080/pictrue/private/co_12.png)
|
|
|
|
|
|
##### 2.缓存-主存层次和主存-辅存层次
|
|
|
|
|
|
缓存-主存:速度
|
|
|
|
|
|
主存-辅存:容量
|
|
|
|
|
|
### 4.2 主存储器
|
|
|
|
|
|
#### 4.2.1 概述
|
|
|
|
|
|
##### 1.主存的基本组成
|
|
|
|
|
|
![主存的基本组成](http://47.117.160.245:8080/pictrue/private/co_13.png)
|
|
|
|
|
|
##### 2.主存和CPU的联系
|
|
|
|
|
|
![主存和CPU的联系](http://47.117.160.245:8080/pictrue/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.基本结构
|
|
|
|
|
|
![半导体存储芯片](http://47.117.160.245:8080/pictrue/private/co_15.png)
|
|
|
|
|
|
```
|
|
|
芯片容量=2^地址线条数*数据线位数
|
|
|
```
|
|
|
|
|
|
片选线CS/CE,读写控制线WE(Write Enable),OE(Output Enable) 上划线代表:低电平有效
|
|
|
|
|
|
##### 2.半导体存储芯片的译码驱动方式
|
|
|
|
|
|
+ 线选法:仅一个地址译码器,选择对应的字线,容量大时不合适
|
|
|
|
|
|
+ 重合法:
|
|
|
|
|
|
![重合法](http://47.117.160.245:8080/pictrue/private/co_16.png)
|
|
|
|
|
|
#### 4.2.3 随机存取存储器(RAM)
|
|
|
|
|
|
##### 1.静态RAM(SRAM)
|
|
|
|
|
|
> 静态RAM使用触发器原理储存信息,在掉电时丢失全部信息。
|
|
|
|
|
|
+ 基本电路
|
|
|
|
|
|
![RAM1](http://47.117.160.245:8080/pictrue/private/co_17.png)
|
|
|
|
|
|
+ 读操作
|
|
|
|
|
|
![RAM2](http://47.117.160.245:8080/pictrue/private/co_18.png)
|
|
|
|
|
|
+ 写操作
|
|
|
|
|
|
![RAM3](http://47.117.160.245:8080/pictrue/private/co_19.png)
|
|
|
|
|
|
+ 静态RAM读、写时序
|
|
|
|
|
|
![RAM4](http://47.117.160.245:8080/pictrue/private/co_20.png)
|
|
|
|
|
|
![RAM5](http://47.117.160.245:8080/pictrue/private/co_21.png)
|
|
|
|
|
|
##### 2.动态RAM(DRAM)
|
|
|
|
|
|
> 动态RAM靠电容存储电荷的原理储存信息,电容上有足够电荷表示1,无足够电荷则表示0。电荷不能长久维持,因此必须在2ms内对所有存储单元恢复一次原状态,这个过程称为再生或刷新。
|
|
|
|
|
|
基本单元电路:
|
|
|
|
|
|
![RAM6](http://47.117.160.245:8080/pictrue/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(第1,3,5,7个数)属于该组
|
|
|
|
|
|
分组后进行校验,分为奇校验与偶校验
|
|
|
|
|
|
对每组进行检测,要求每组的数字之和为奇数/偶数(对于二进制来说,即拥有奇数/偶数个1)(可通过对所有数进行异或运算,若结果为0则为偶数,结果为1则为奇数)
|
|
|
|
|
|
若检测出错,通过找到多个出错的组的公共位即可找到出错的位置
|
|
|
|
|
|
#### 4.2.7 提高访存速度的措施
|
|
|
|
|
|
+ 采用高速器件
|
|
|
+ 采用层次结构Cache-主存
|
|
|
+ 调整主存结构
|
|
|
+ 单体多字系统
|
|
|
+ 多体并行系统
|
|
|
+ 高位交叉 各个体并行工作
|
|
|
+ 低位交叉 在不改变存储器周期的前提下,增加存储器带宽
|
|
|
+ 存储器控制部件
|
|
|
+ 高性能存储芯片
|
|
|
+ SDRAM CPU无需等待,在系统时钟的控制下进行读出和写入
|
|
|
+ RDRAM 主要解决了存储器带宽问题
|
|
|
+ 带Cache的DRAM
|
|
|
|
|
|
### 4.3 高速缓冲器
|
|
|
|
|
|
#### 4.3.1 概述
|
|
|
|
|
|
##### 1.问题的提出
|
|
|
|
|
|
避免CPU“空等”的现象
|
|
|
|
|
|
解决CPU和DRAM的速度差异
|
|
|
|
|
|
![CACHE](http://47.117.160.245:8080/pictrue/private/co_23.png)
|
|
|
|
|
|
##### 2.Cache的工作原理
|
|
|
|
|
|
+ 主存和缓存按块存储,块的到校相同
|
|
|
|
|
|
+ 命中与未命中
|
|
|
|
|
|
+ 命中:主存块调入缓存,主存块与缓存建立了对应关系
|
|
|
+ 用 标记记录 与某缓存块建立了对应关系的 主存块号
|
|
|
+ 未命中:未建立对应关系
|
|
|
|
|
|
+ 命中率
|
|
|
|
|
|
+ CPU欲访问的信息在Cache中的比率
|
|
|
+ 命中率 与 Cache 的 **容量** 与 **块长** 有关
|
|
|
|
|
|
+ Cache-主存系统的效率
|
|
|
$$
|
|
|
e=\frac{访问Cache的时间}{平均访问时间}
|
|
|
$$
|
|
|
|
|
|
##### 3.Cache的基本结构
|
|
|
|
|
|
![Cache结构](http://47.117.160.245:8080/pictrue/private/co_24.png)
|
|
|
|
|
|
##### 4.Cache的读写操作
|
|
|
|
|
|
+ 读:
|
|
|
|
|
|
![CACHE读](http://47.117.160.245:8080/pictrue/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之间有一条直接数据通道
|
|
|
+ 不中断现有程序
|
|
|
+ 周期挪用
|
|
|
|
|
|
![三种方式的比较](http://47.117.160.245:8080/pictrue/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接口电路](http://47.117.160.245:8080/pictrue/private/co_27.png)
|
|
|
|
|
|
##### 2.接口的功能和组成
|
|
|
|
|
|
| 功能 | 组成 |
|
|
|
| :----------: | :---------------: |
|
|
|
| 选址 | 设备选择电路 |
|
|
|
| 传送命令 | 命令寄存器/译码器 |
|
|
|
| 传送数据 | 数据缓冲寄存器 |
|
|
|
| 反映设备状态 | 设备状态标记 |
|
|
|
|
|
|
+ 完成触发器D
|
|
|
+ 工作触发器B
|
|
|
+ 中断请求触发器INTR
|
|
|
+ 屏蔽触发器MASK
|
|
|
|
|
|
#### 5.3.3 接口类型
|
|
|
|
|
|
+ 按数据传送方式分类
|
|
|
+ 并行接口
|
|
|
+ 串行接口
|
|
|
+ 按选择的灵活性
|
|
|
+ 可编程接口
|
|
|
+ 不可编程接口
|
|
|
+ 通用性
|
|
|
+ 通用接口
|
|
|
+ 专用接口
|
|
|
+ 控制方式(程序查询方式没有接口)
|
|
|
+ 中断接口
|
|
|
+ DMA接口
|
|
|
|
|
|
### 5.4 程序查询方式
|
|
|
|
|
|
#### 5.4.1 程序查询流程
|
|
|
|
|
|
单个和多个设备的程序查询流程:
|
|
|
|
|
|
![程序查询流程](http://47.117.160.245:8080/pictrue/private/co_28.png)
|
|
|
|
|
|
#### 5.4.2 程序流程
|
|
|
|
|
|
![程序流程](http://47.117.160.245:8080/pictrue/private/co_29.png)
|
|
|
|
|
|
#### 5.4.3 接口电路
|
|
|
|
|
|
![接口电路](http://47.117.160.245:8080/pictrue/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.程序中断方式接口电路的基本组成
|
|
|
|
|
|
![三种方式的比较](http://47.117.160.245:8080/pictrue/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](http://47.117.160.245:8080/pictrue/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结构框图](http://47.117.160.245:8080/pictrue/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 指令周期的数据流
|
|
|
|
|
|
+ 取指周期
|
|
|
|
|
|
![](http://47.117.160.245:8080/pictrue/private/co_34.png)
|
|
|
|
|
|
+ 间址周期
|
|
|
|
|
|
![](http://47.117.160.245:8080/pictrue/private/co_35.png)
|
|
|
|
|
|
+ 执行周期——不同指令数据流不同
|
|
|
|
|
|
+ 中断周期
|
|
|
|
|
|
![](http://47.117.160.245:8080/pictrue/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)](http://47.117.160.245:8080/pictrue/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
|
|
|
+ 屏蔽字
|
|
|
+ 屏蔽技术可改变优先处理等级
|
|
|
+ 可以人为地屏蔽某个中断源地请求,便于程序控制
|