最近更新文章
- 编程导论:2.3.计算机网络 计算机网络介绍
- 编程导论:2.3.计算机组成原理 计算机组成原理
- 编程导论:2.3.操作系统 操作系统介绍
- 编程导论:2.3.数据库及其管理系统 简要介绍数据库及数据库管理系统知识。
- 编程导论:2.4.区块链 简要介绍区块链
编程导论:2.3.计算机组成原理
计算机组成原理
概述
冯·诺伊曼架构
原始架构
- 计算机由运算器、存储器、控制器、输入设备和输出设备五大部件组成。
- 指令和数据以同等地位存放于存储器内,并可按地址寻访。
- 指令和数据均用二进制数表示。
- 指令由操作码和地址码组成,操作码用来表示操作的性质,地址码用来表示操作数在存储器中的位置。
- 指令在存储器内按顺序存放。通常,指令是顺序执行的,在特定条件下,可根据运算结果或根据设定的条件改变执行顺序。
- 机器以运算器为中心,输入输出设备与存储器间的数据传送通过运算器完成。

各部件的功能:
- 运算器用来完成算术运算和逻辑运算,并将运算的中间结果暂存在运算器内。
- 存储器用来存放数据和程序。
- 控制器用来控制、指挥程序和数据的输入、运行以及处理运算结果。
- 输入设备用来将人们熟悉的信息形式转换为机器能识别的信息形式,常见的有键盘、鼠标等。
- 输出设备可将机器运算结果转换为人们熟悉的信息形式,如打印机输出、显示器输出等。
现代架构
以存储器为中心

从芯片组成来看,现代计算机可认为由三大部分组成:CPU、I/0设备及主存储器(Main Memory, MM)。CPU与主存储器合起来又可称为主机,I/0 设备又可称为外部设备。

组成单元

主要参数
- 机器字长:一般是运算器一次能够处理的位数,等于ACC长度
- 存储容量:存储器存放数据的总位数,等于存储单元个数*存储字长。
- 存储字长:存储器进行数据操作的单位的长度,等于MDR长度
- 存储单元个数等于MAR的最大值
- 运算速度:
- 早期:完成一次基本操作所需时间
- 吉普森法:指令的加权平均时间
- 现代:单位时间内执行的平均指令(百万)个数MIPS、执行一条指令的时钟周期数CPI、浮点运算次数每秒FLOPS
数据表示
数
基本说明
通常考虑以科学计数法$a * base^{power}$的形式表示一个数,其中$a$ $base$ $power$分别称为尾数、基数、阶码。这个数的值称为真值。通常power均为2,即2进制数,以$(x)_{2}$书写。因此实际存储的内容就是尾数和阶码的表示。通常尾数和阶码的表示在计算机中称为真值的表示。
以下记n为尾数数值的整数部分最大位数,m为阶码数值的的整数部分最大位数。记$s_{x, i}$为$(x)_{2}$的第i位。
为了区分表示中的尾数和阶码,即如何处理小数点,形成了两种表示:定点表示和浮点表示。
无符号数
不存在阶码,且尾数表示中的每一位都是数值位。数值范围为$[0, 2^n - 1]$
定点表示
即小数固定在某一位置的表示方法。常见的有:
- 有符号整数:不存在阶码,一般称表示中的最高位为符号位,书写时用
,分割表示中的符号位和数值位。 - (纯)小数:不存在阶码,一般称表示中的最高位为符号位,书写时用
.分割表示中的符号位和数值位。
有四种表示方法:原码、补码、反码和移码。
特别的有 $[-x]_{补} = -[x]_{补}$
三者关系:
- 若 $x \ge 0$,$[x]_{原} = [x]_{补} = [x]_{反}$
- 若 $x \lt 0$,$[x]_{补} = [x]_{反} + 2^{n-k}$ ,且 $[x]_{反} = \sim [\left| x \right|]_{原}$
特别的,在书写时,可以用双符号位表示符号:其中高位为符号位,低位如果与高位不同则表示溢出。
浮点表示
将阶码和尾数分别定点表示然后拼接。书写时用;分割表示中阶码和尾数。
如果发生了阶码的溢出:
- 上溢:溢出
- 下溢:真值为0
但特别的,为了考虑特殊值且为了提高浮点表示的数的精度,需要规格化:尾数最高数值位和符号位不同,但$[-2^n]$是规格化数,$[-2^{n-1}]$不是规格化数。
- 尾数运算时溢出——右规(格化):尾数右移,阶+1;
- 尾数运算时未溢出——左规(格化):尾数左移,阶-1;
同时需要考虑舍入
- 0舍1入
- 末位置1
定点运算
移位运算
- 逻辑移位:二进制表示每位移动,空位补0。记为
<<<>>> - 算术移位:记为
<<>>
| 真值 | 表示法 | 空位补 |
|---|---|---|
| 正数 | 原码、补码、反码 | 0 |
| 负数 | 原码 | 0 |
| 负数 | 补码 | 左移补0,右移补1 |
| 负数 | 反码 | 1 |
加法、减法
- 原码加法、减法:同普通加法、减法
- 补码加(减)法:$[x \pm y]_{补} = [x]_{补} \pm [y]_{补}$
乘法
- 原码乘法只能处理同为正数的情况:$[x * y]_{原} = [x]_{原} * [y]_{原} = [z_k]_{原}$,其中$[z_i]_{原} = \begin{cases}0 & i = 0 \\ (s_{y,k-i+1} * (x)_2 + [z_{i-1}]_{原}) >>> 1 & otherwise.\end{cases}$。对任意情况,取 $s_{x,0} \oplus s_{y,0}$ 作为结果的符号位。
- 补码一位乘法:$y > 0$:$[x * y]_{补} = [z_k]_{补}$,其中$[z_i]_{补} = \begin{cases}0 & i = 0 \\ (s_{y,k-i+1} * (x)_2 + [z_{i-1}]_{补}) >> 1 & otherwise.\end{cases}$;$y < 0$:$[x * y]_{补} = [z_k]_{补} - [x]_{补}$
- 补码Booth算法:$[x * y]_{补} = [z_{k+1}]_{补}$,其中若令$s_{y,k+1} = 0$,$[z_i]_{补} = \begin{cases}0 & i = 0 \\ ((s_{y,k - i + 2} - s_{y,k - i + 1}) * (x)_2 + [z_{i-1}]_{补}) >> 1 & otherwise.\end{cases}$
除法
约定 $\left|y\right| < \left|x\right|$
- 原码除法只能处理同为正数的情况:取 $s_{x,0} \oplus s_{y,0}$ 作为商符号位,余数符号位为0。
- 恢复余数法:$x>0,y>0$,$[\frac{x}{y}]_{原} = [z_k]_{补}$,$[x \% y]_{原} = [r_k]_{补} >>> 1$,其中$[r_i]_{补} = \begin{cases} [x]_{补} & i = 0 \\ ([r_{i-1}]_{补}-[y]_{补}) <<< 1 & r_{i-1} \ge y \\ [r_{i-1}]_{补} <<< 1 & r_{i-1} < y\end{cases}$ $s_{z_k, i} = r_i \overset{?}{\ge} y$
- 不恢复余数法/加减交替法: $x>0,y>0$,$[\frac{x}{y}]_{原} = [z_k]_{补}$,$[x \% y]_{原} = [r_k]_{补} >>> 1$,其中$[r_i]_{补} = \begin{cases} [x]_{补} & i = 0 \\ ([r_{i-1}]_{补}-[y]_{补}) <<< 1 & r_{i-1} \ge 0 \\ ([r_{i-1}]_{补}+[y]_{补}) <<< 1 & r_{i-1} < 0\end{cases}$ $s_{z_k, i} = r_i \overset{?}{\ge} y$
- 补码除法: $[\frac{x}{y}]_{补} = [z_k]_{补},[x \% y]_{补} = [r_k]_{补} »> 1$,其中$[r_i]_{补} = \begin{cases} [x]_{补} & i = 0 \\ ([r_{i-1}]_{补}-[y]_{补}) <<< 1 & s_{r_{i-1}, 0} \oplus s_{y,0} = 0 \\ ([r_{i-1}]_{补}+[y]_{补}) <<< 1 & s_{r_{i-1}, 0} \oplus s_{y,0} = 1 \end{cases}$ $s_{z_k, i} = s_{r_i, 0} \oplus s_{y,0}$ 特别的,将$[\frac{x}{y}]_{补}$的末位置1。
浮点运算
- 对阶处理:加减法对阶(保留大阶)
- 尾数、阶数运算。
- 规格化。
- 舍入,为提高精度,要考虑尾数右移时丢失的数值位。
- 溢出判断,即判断结果是否溢出。
校验
校验理论
编码的检测能力和纠错能力与编码的最小距离,即在一种编码系统中,任意两组合法代码之间的最少二进制位数的差异。
编码最小距离L、检测错误的位数D、纠正错误的位数C满足:$L-l=D+C,D\ge C$
奇偶校验
添加一位检测位。考虑所有位为1的个数c:
- 如果为配偶原则,c应为偶数,检测位值为$c \% 2$。
- 如果为配偶原则,c应为偶数,检测位值为$(c \% 2) \oplus 2$。
再次计算c判断是否错误。
汉明校验
设欲检测的二进制代码为n位,为使其具有1位纠错能力,需增添k位检测位,组成n+k位的代码。则满足$2^k\ge n+k+l$。
记欲检测的二进制代码从1开始编号,这k位检测位放在$2^i$上。
考虑二进制表示下的编号第i位为1的所有位为1的个数c。
- 如果为配偶原则,c应为偶数,第i检测位值为$c \% 2$。
- 如果为配奇原则,c应为偶数,第i检测位值为$(c \% 2) \oplus 2$。
再次计算c则可得到错误的位的编号。若为0则为无错误。
循环冗余校验
在模二域下,对代码左移然后对给定的生成多项式代码取余得到校验码,拼接得到。
指令
说明
指令就是对一些数据(操作数)进行操作的指令。
指令由操作码与地址码拼接而成。
操作码
用来指明该指令所要完成的操作,反映了机器的操作种类。常见的有:
- 数据传送
- 运算
- 转移
- 无条件转移
- 条件转移
- 调用与返回
- 陷阱
- 输入与输出
地址码
该指令的源操作数的地址、结果的地址以及下一条指令的地址。
寻址方式
- 指令寻址:确定下一条指令的地址
- 顺序寻址:PC+1
- 跳跃寻址:PC+偏移量
- 数据寻址:确定地址码/形式地址相应的操作数(的地址)
- 立即(数)寻址:形式地址就是操作数
- 直接寻址:形式地址就是操作数的地址
- 间接寻址:形式地址处存放的是另一个形式地址或实际操作数的地址,需要多次访问才能得到。
- 寄存器寻址:形式地址就是寄存器的编号
- 寄存器间接寻址 = 间接寻址+寄存器寻址
- 基址寻址:基址寄存器BR的值+形式地址(偏移量)就是操作数的地址。用来扩大寻址范围、解决程序浮动。
- 变址寻址:变址寄存器IX的值+形式地址(偏移量)就是操作数的地址。用来加快程序的局部访问。
- 相对寻址:PC的值+形式地址(偏移量)就是操作数的地址。用来解决程序跳转。
- 隐含寻址;没有形式地址,操作数(的地址)被包含在操作码中。
- 堆栈寻址。操纵堆栈。
RISC精简指令集
- 长度固定;
- 选取常用指令,指令格式种类少、寻址方式少;
- 只通过存数、取数访问存储器;
- 通用寄存器多;
- 采用流水线技术;
- 控制器采用组合逻辑技术设计。
- 采用优化的编译程序。
运算器
核心是算术逻辑单元(ALU),负责执行实际运算。
| 存放内容 | 加/减法 | 乘法 | 除法 |
|---|---|---|---|
| ACC | 被加数、和 | 乘积高位 | 被除数、余数 |
| MQ | - | 乘数、乘积低位 | 商 |
| X | 加数 | 被乘数 | 除数 |
总线
功能
计算机系统的五大部件之间的互连方式有两种:
- 分散连接:计算机系统的各个部件之间互相独立连接。
- 总线连接:计算机系统的各个部件之间连到一组公共信息传输线(总线)上。
分类
- 片内总线:芯片内部的总线。
- 系统总线。根据传输信息的不同分为:数据总线、地址总线、控制总线;
- 通信总线:计算机之间的总线。
指标
- 总线宽度:组成总线的单个位的传输线的个数。
- 总线带宽:单位时间内总线上传输数据的位数。
- 时钟同步/异步:总线上的数据与时钟同步工作的总线称为同步总线,与时钟不同步工作的总线称为异步总线。
- 总线复用:一条信号线上分时传送两种信号。
- 信号线数:地址总线、数据总线和控制总线三种总线数的总和。
- 总线控制方式:包括突发工作、自动配置、仲裁方式、逻辑方式、计数方式等。
- 其他
结构
单总线结构

双总线结构
将速度较低的I/0设备从单总线上分离出来,形成主存总线与I/0总线分开的结构。

多总线结构
将速率不同的I/0设备进行分类,然后将它们连接在不同的通道上。以下是两种


控制
判优控制
即对各设备信息传送的优先级控制。
- 主设备对总线有控制权,从设备只能响应从主设备发来的总线命令,对总线没有控制权。
- 总线上信息的传送是由主设备启动的。
判优控制分为:
- 集中式:控制逻辑集中在一处,有:
- 链式查询:总线同意信号BG依次向下传递,直到有总线请求的设备。
- 计数器定时查询:通过计数器的值与某个请求占用总线的设备地址一致控制。
- 独立请求方式:通过排队电路确定。
- 分布式
通信控制
完成一次总线操作的时间称为总线周期,分为:
- 申请分配阶段
- 寻址阶段
- 传数阶段
- 结束阶段
通信控制主要处理通信双方如何获知传输开始和传输结束,以及通信双方如何协调如何配合。有四种方式处理:
- 同步通信:通信双方由统一时标控制数据传送。
- 异步通信:允许各模块速度的不一致性,采用应答方式
- 不互锁方式:主模块请求后等待一段时间即认为被接受。
- 半互锁方式:主模块等待从模块的应答,从模块不等待。
- 全互锁方式:主模块等待从模块的应答,从模块等待主模块的应答。
- 半同步通信:两者之间,增设了等待相应信号线,采用插入时钟(等待)周期的措施来协调通信双方的配合问题。
- 分离式通信:分解传输过程。
存储器
概述
分类

使用

从左到右,价格越低、速度越低、容量越大。
主存储器
概述

读写流程:
- 接受读写信号
- MAR接受地址
- 读数则从存储体读出至MDR,写数则从MDR写入至存储体
主存中存储单元地址的分配有大端序、小端序。
技术指标有:
- 存储容量
- 存储速度
- 存储器带宽
半导体存储芯片
芯片集成成具有记忆功能的存储矩阵、译码驱动电路和读/写电路等。
译码驱动方式有两种:
- 线选法:用一根字选择线,直接选中一个存储单元的各位。
- 重合法:用多根字选择线,组合起来,选中一个存储单元的各位。
RAM
略
ROM
略
存储器与CPU连接
- 合理选择存储芯片,存储容量不足需扩展:
- 位扩展:指增加存储字长,优先进行
- 字扩展:增加存储器字的数量
- 分配CPU地址线
- 形成片选信号
- 连线
常用译码器:74138译码器

提高访存速度
- 单体多字:一次存取多个字
- 并行多体:多模块组成的存储器。交叉编号
- 提高存储体性能
高速缓冲存储器
概述
将存储器中的部分数据放到更快的存储器中。
命中:访问的数据在缓存中,不需要从存储器中读取。
- 命中率 = 命中次数/总访问次数
- 平均访问时间 = 访存时间加权平均
- 访问效率 = 平均访问时间/主存访问时间
结构

读写

地址映射变换
将主存地址尝试转换为Cache地址,成功则命中,访存Cache
具体方法有:
| 名称 | 直接映射 | 全相联映射 | 组相连映射 |
|---|---|---|---|
| 主存结构 | 组1-m块1-n字 | 块1-n字 | 组1-m块1-n字 |
| Cache结构 | m块1-n字 | 若干块1-n字 | m组1-若干块1-n字 |
| 地址格式 | 组号-块号-块内地址 | 块号-块内地址 | 组号-块号-块内地址 |
替换策略
- FIFO
- LRU
- 随机
辅助存储器
磁表面存储器
不同形状(如盘状、带状等)的载体上涂有磁性材料层,工作时,靠载磁体高速运动,由磁头在磁层上进行读/写操作,信息被记录在磁层上。
信息的记录层级为:辅存-盘面/盘片-磁道-具体数据。
主要指标:
- 记录密度:单位长度内所存储的二进制信息量。
- 存储容量
- 平均寻址时间:平均找道时间+平均等待时间(可认为是磁头移动半圈的时间)。
- 数据传输率:单位时间内磁表面存储器向主机传送数据的位数或字节数
结构略
光盘
略
输入输出系统
略
控制器
概述
为每一条指令确定并执行相应的微操作,有四大类(微指令):
- 取指:
- 间址:
- 执行:
- 中断:
外特性:
- 输入信号:时钟、指令、标志、控制信号
- 输出信号
时序系统
周期:执行所需的时间段。以周期来划分时间:
- 时钟周期:时钟信号调控的微指令执行时间。
- 指令周期:整条指令的执行时间。
- 机器周期:所有的微指令的执行时间的最大时间。在存储字长等于指令字长时,可以认为与取指周期相同。
基于三种周期构成了多级时序系统
设计
总体方法
- 安排节拍:在机器周期内为每个微指令安排一个时钟节拍。
- 要求:保持先后次序;可并行执行则并行、短的微指令在一个节拍内完成
- 采取相应设计方法
组合逻辑设计
- 列出微操作的操作时间表
- 写出逻辑表达式
- 画出逻辑图
微程序设计
- 确定微指令格式
- 编写微指令码点
CPU
结构
- ALU
- 控制器
- 寄存器:用户可见寄存器(通用寄存器、数据寄存器、地址寄存器、条件码寄存器等)、控制和状态寄存器(MAR、MDR、PC、IR等)
- 中断系统:用于处理中断:
- 中断请求逻辑:中断请求标记寄存器
- 中断判优逻辑:确定中断优先级:
- 硬件排队
- 软件排队
- 查找中断服务入口程序地址
- 硬件向量法:中断向量表
- 软件查询法
- 中断处理逻辑:
- 允许中断触发器EINT
- 保护程序断点、寻找中断服务程序的入口地址、关中断EINT=0
- 考虑多重中断
- 中断优先级、屏蔽字
- 执行中断服务程序
- 保护现场和恢复现场,开中断EINT=1
指令的执行
将指令周期按微指令分为:取指周期、间址周期、执行周期、中断周期
指令流水:将微指令并行化
- 矛盾:结构相关、数据相关、控制相关
- 加速
流水线指标:
- 吞吐率 = 指令数/时间,趋近于执行速度
- 加速比 = 串行执行时间/流水执行时间,趋近于流水线段/设备数
- 效率 = 设备实际工作时间/各设备总时间