概述
计算机组成原理马上就要期中考试了,我也在积极准备复习,顺着课本也做了一波笔记,把每个部分的知识点都整理了一下。没理解的暂时还空着(比如海明校验码),有些整理起来不方便的也暂时空着,回头去查课本吧。
结课了,顺着课本捋了一遍,做的一些笔记:
计算机组成原理
概述
计算机硬件
- 采用存储程序工作方式。
- 由运算器、控制器、存储器、输入设备、输出设备部件组成。
- 存储器:存储数据/指令 控制器:控制指令的自动执行 运算器:加减乘除、逻辑运算 操作人员通过输入输出设备控制计算机。
- 计算机内部以二进制表示指令和数据 指令由操作码和地址码组成。 总线:传输信息的介质。
ALU:数据处理部件,执行算数和逻辑运算。
计算机软件
计算机系统层次结构
应用(问题) 最终用户
算法 程序员
编程(语言)
操作系统/虚拟机
指令集体系结构(ISA)架构师
微体系结构
功能部件/RTL 电子工程师
电路
器件
- 机器级语言
和运行程序的计算机底层结构密切相关。 可读性差,不易于记忆。
- 汇编语言
- 机器语言
- 高级语言
和底层计算机结构关系不大。 可读性相当较好。 大多数程序员使用高级语言编写程序。
程序设计语言处理系统
- 汇编程序:汇编器,汇编语言》机器语言
- 解释程序:解释器,将源程序中的语句按顺序逐条翻译并立即执行。
- 编译程序:编译器,高级语言》汇编语言/机器语言。
计算机系统的不同用户
最终用户
使应用程序完成特定任务的用户。
简单的人机交互界面、安装在计算机中的相关应用程序。
系统管理员
利用操作系统等软件提供的功能对系统进行配置管理维护的操作人员。
部分硬件层面、系统管理层面、相关实用程序和人机交互界面。
应用程序员
使用高级语言编制应用软件的程序员。
硬件、操作系统提供的编程接口、人机交互界面、实用程序、相关的语言程序处理系统。
系统程序员
设计和开发系统软件的程序员。
计算机底层相关硬件和系统结构。
一个人可以既是最终用户,又是系统管理员、…… ISA处于硬件和软件交界面,是计算机系统核心部分。
程序开发与执行过程
对于
#include<stdio.h>
int main(){
printf("Hello World!\n");
}
- 通过程序编辑软件得到
hello.c
- 将
hello.c
预处理、编译、汇编、链接,生成可执行目标程序
gcc -o hello hello.c
预处理:将以#
开头的命令进行处理
编译:编译得到汇编语言源程序
汇编:得到(二进制)可重定位目标文件
链接:多个可重定位目标文件和标准库函数合并为一个可执行目标文件。
启动和执行依靠操作系统的支持。
程序与指令之间的关系
可执行程序目标文件包括机器代码段,执行实质是机器代码段执行。机器代码段由一条条指令构成。
指令是一个0/1序列,用来指示CPU完成一个特定的原子操作。
- 操作码 指令操作类型
- 地址码 指令操作数的地址
- 立即数 具体一个数/偏移地址
指令的执行过程
- 根据PC取指令到IR
- 指令译码并送出控制信号
- 取操作数
- 指令执行
- 回写结果
计算机系统性能评价
用户感觉到的时间分为CPU时间和其他时间。
CPU时间分为:
- 用户CPU时间
- 系统CPU时间
时钟周期:CPU的主脉冲信号宽度。
时钟频率:CPU的主脉冲信号的频率,时钟周期的倒数。
CPI:执行一条指令所用的时钟周期数
$$CPU执行时间=\frac{程序所含时钟周期数}{时钟频率}=程序所含时钟周期数×时钟周期$$
$$程序总时钟周期数=程序所含指令条数×CPI$$
n种不同指令,第i条指令数和CPI已知综合CPI:
$$程序总时钟周期数=\sum_{i=1}^n(CPI_i\times F_i)$$
所以: $$CPU执行时间=CPI\times 程序总指令条数\times 时钟周期$$
用指令执行速度进行性能评估
MIPS:指令速度的单位,每秒钟执行多少百万条指令。
相对MIPS:被测机型速度是相对参考机型的多少倍。
不同机器用MIPS进行性能比较是不准确/不客观的:
- M1上一条指令的功能,M2上要多条指令来完成
- 不同机器的CPI和时钟周期不同,执行一条指令所用的时间也不同。
数据的机器级表示
二进制八进制十六进制十进制写法标记(开头)
- 十进制非零开头
- 二进制0b开头
- 八进制0开头
- 十六进制0x开头
进制简化符号(结尾)
- 二进制 B(Binary)
- 八进制 (Octal)
- 十进制 D(Decimal)
- 十六进制 H(Hexadecimal)
数制和编码
信息使用二进制编码原因:
- 二进制只有两种状态,制作有两种稳态的物理器件很方便。
- 编码和运算规则简单,可以开关电路实现,简单易行。
- 1、0对应逻辑真假,为逻辑运算和逻辑判断提供便利条件,可以用逻辑门电路实现算术运算。
进位计数制
(略)
定点与浮点表示
- 定点 小数点固定
- 浮点 尾数决定表示精度,指数决定表示范围
定点数的编码表示
- 真值:现实世界带有正负号的数。
- 原码:符号位后跟数值位。
- 反码:正数不变,数(除符号位)按位取反
- 补码:正数不变,负数反码加一
已知反码/补码求原码,同上述操作。
- 移码:每个数加一个偏置常数
若将移码第一位看做符号位,则同一个真值的移码和补码只有符号位不同
整数的表示
无符号整数的表示
无符号位,略
带符号数的表示
常用补码表示。优点:
- 0的表示形式唯一
- 可以用加法实现减法运算,符号位可以参与运算
- 与原码和反码相比,多一个最小负数
- 不需要通过循环进位调整结果
C语言中的整数类型
(略)
实数的表示
计算机中用浮点数表示实数
浮点数的表示格式
(无)
浮点数的规格化
规格化数:尾数最高位具有非零数字
- 右归:有效数字在小数点之前,需右归。尾数每右移一位,阶码+1。
- 左归:……
IEEE754浮点数标准
- 32位单精度 1符号 8阶码 32尾数
- 64位双精度 1符号 11阶码 52尾数
尾数用原码,1在小数点之前(省略第一个1)
指数用移码
C语言中的浮点数类型
转换 | int | float | double |
---|---|---|---|
int | - | 可能有数据被舍入 | 保留精确值 |
float | 可能向0方向截断,可能溢出 | - | 保留精确值 |
double | 可能向0方向截断,可能溢出 | 可能有数据被舍入,可能溢出 | - |
十进制数的表示
ASCII字符表示
将数看做字符串,方便输入输出,但运算不方便。
用BCD码表示
- 有权BCD码
8421
- 无权BCD码
余三码、格雷码
非数值数据的编码表示
逻辑值
0 1
数据的宽度和存储
数据的宽度和单位
- 字 用来处理信息的单位,用来度量各种数据类型的宽度
- 字长 表示进行数据运算、存储、传送的各种部件的宽度,反映计算机处理信息的能力
数据的存储和排列顺序
i=01234567H
&i=0800H
地址 | 0800H | 0801H | 0802H | 0803H |
---|---|---|---|---|
大端方式 | 01H | 23H | 45H | 67H |
小端方式 | 67H | 45H | 23H | 01H |
数据校验码
奇偶校验码
不能确定错误位置,没有纠错能力。
- 奇校验位 有奇数个1时P取0
$$B=b_{n-1}\oplus b_{n-2}\oplus \ldots \oplus b_1 \oplus b_0 \oplus 1$$
- 偶校验位
$$B=b_{n-1}\oplus b_{n-2}\oplus \ldots \oplus b_1 \oplus b_0$$
海明校验码
(待补全)
循环冗余校验码
(待补全)
高级语言和机器指令中的运算
C程序中涉及的运算
MIPS指令中涉及的运算
基本运算部件
串行进位加法器
并行进位加法器
带标志加法器
算数逻辑部件
定点数运算
补码加减运算
Latex公式无法显示,反而导致后面排版错位……
$$
\begin{cases}
[x+y]_补=[x]_补+[y]_补(mod 2^n)\\\\
[x-y]_补=[x]_补+[-y]_补(mod 2^n)
\end{cases}
$$
CF—进位标志,加法时的最高位(D7或D15)产生进位或减法时最高位出现借位,则CF=1,否则CF=0;
AF—辅助进位标志,供BCD码使用。当D3位出现进位或借位时AF=1,否则AF=0;
OF—溢出标志,带符号数进行算术运算时,其结果超出了8位或16位的表示范围,产生溢出,则OF=1,否则OF=0;
ZF—零标志,运算结果各位都为零,则ZF=1,否则ZF=0;
SF—符号标志,运算结果为负数时,即运算结果的最高位为1,则SF=1,否则SF=0;
PF—奇偶标志,反映操作结果中“1”的个数的情况,若有偶数个“1”,则PF=1,否则PF=0。
3个控制标志位
DF—方向标志,用来控制数据串操作指令的步进方向;
当设置DF=1时,将以递减顺序对数据串中的数据进行处理。当设置DF=0时,递增。
IF—中断允许标志,当设置IF=1,开中断,CPU可响应可屏蔽中断请求;当设置IF=0时,关中断,CPU不响应可屏蔽中断请求。
TF—陷阱标志,为程序调试而设的。当设置TF=1,CPU处于单步执行指令的方式;当设置TF=0时,CPU正常执行程序。
原码加减运算
移码加减运算
原码乘法运算
原码一位乘
- 确定乘机的符号位
- 计算乘积的数值位
自行查书看样例掌握无符号数相乘运算
补码一位乘
原码一位除
补码一位除
浮点数运算
浮点数加减运算
- 对阶
- 尾数加减
- 规格化
- 舍入
运算部件的组成
所谓运算部件,通常是指ALU、移位器、存放临时数据的寄存器,加上用于数据选择的多路选择器和实现数据传送的总线等构成的一个运算数据通路。
指令系统
指令格式设计
指令地址码的个数
每条指令必须包含:
- 操作码 指定操作类型
- 源操作数或地址
- 结果的地址
- 下一条指令地址
指令格式设计原则
- 指令应尽量短 减少空间开销
- 要有足够的操作码位数 向后兼容,预留
- 操作码的编码必须有唯一解释
- 指令长度应是字节的整数倍 便于指令的读取和指令地址的计算
- 合理选择地址字段的个数 空间开销与事件开销权衡
- 指令应尽量规整 简化硬件的设计
指令系统的设计
- 完整性或完备性 较复杂的功能可以通过伪指令实现
- 兼容性 高档机的指令系统应兼容以前低端机的指令系统,给软件资源重复利用带来方便
- 均匀性 运算系统应能应对多种类型的数据进行处理
- 可扩充性 操作码预留编码空间
基本设计问题
- 操作码的个数、种类、复杂度如何选择?
- 运算指令能对哪几种数据类型进行操作?
- 采用什么样的指令格式?
- 规整型 定长指令字定长操作码,减少时间开销,增加空间开销
- 紧凑型
- 通用寄存器的个数、功能、长度如何规定?
增加通用寄存器个数可以减少指令执行访存次数,但会增加寄存器存取延迟,增大CPU成本
- 如何设计寻址方式的种类和编码已经各种寻址方式下有效地址如何计算?
- 下一条指令的地址如何确定?
一般通过一个专门的寄存器,叫做 程序计数器(PC) 或 指令指针(IP)
操作数类型
- 指针或地址
- 数值数据 带符号整数、浮点数
- 位、位串、字符、字符串
- 布尔
寻址方式
- 立即寻址 指令中直接给出操作数本身
- 直接寻址 指令中给出操作数的地址
- 间接寻址 指令中给出操作数的地址的地址……
- 寄存器寻址 指令中给出寄存器的编号
- 寄存器间接寻址 寄存器中存的是操作数的地址
- 变址寻址 指令中给出基准地址,变址寄存器给出偏移量,相加得到实际地址
- 相对寻址 指令中给出偏移量,基准地址由PC给出
- 基址寻址 指令中给出偏移量,基准地址由基址寄存器给出
- 其他寻址方式
基址寻址、变址寻址、相对寻址统称为 偏移寻址 。
操作数类型
操作码编码
标志信息的生成和使用
指令系统设计风格
按操作数位置指定风格来分
按指令格式的复杂度来分
- CISC指令系统
- 指令系统复杂
- 指令周期长
- 指令周期差距大
- 采用微程序控制
- 难以进行编译优化
- RISC指令系统
- 指令数目少
- 指令格式规整
- 采用
Load/Store
型指令设计风格 - 采用流水线方式执行指令
- 采用大量寄存器
- 采用硬连线控制器
- 采用优化的编译系统
指令系统实例
程序的机器级表示
中央处理器
CPU概述
指令执行过程
- 取指令并计算下一条指令地址
- 对指令操作码译码
- 计算源操作数地址并取源操作数
- 数据操作
- 目的操作数地址计算并存结果
CPU的基本功能和基本组成
- 程序计数器PC 用来存指令的地址
- 指令寄存器IR 用于存现行指令‘
- 指令译码器
- 脉冲源及启停控制线路
- 时序信号产生部件
- 操作控制信号形成部件
- 总线控制逻辑
- 中断机构
数据通路的基本结构
单周期处理器设计
指令功能的描述
数据通路的设计
控制逻辑单元的设计
时钟周期的确定
多周期处理器的设计
微程序控制器设计
硬连线控制器速度快,适合简单或规整的指令系统。对于复杂指令系统或其中的复杂指令,大多采用微程序方式设计控制器。
微程序控制器的结构
异常和中断处理
基本概念
在程序正常执行过程中,CPU会遇到一些特殊情况而无法继续执行。
- 内部异常 处理器内部异常引起的意外事件
- 外部中断 外设完成任务或完成某些特殊事件,发中断事件,等待处理。
指令流水线
流水线概述
流水线的执行效率
适合流水线的指令集特征
- 指令长度尽量一致
- 指令格式尽量规整,尽量保持源寄存器的位置相同
- 采用
Load/Store
型指令风格 - 数据和指令在存储器中“对齐”存放
流水线处理器的实现
每条指令的流水段的分析
流水线数据通路的设计
流水线控制器的设计
流水线冒险及处理
结构冒险
也称硬件资源冲突,同一部件被不同指令同时使用。
数据冒险
后一指令要用到前面指令的结果,而结果还没产生。
- 插入空操作
- 插入气泡 阻塞
- 使用转发技术 将中间数据之间转发到ALU的输入端
控制冒险
高级流水线技术
- 超流水线技术 增加流水线级数使更多的指令同时在流水线中重叠执行。
流水线的级数越多,用于流水段寄存器的开销越大,因而流水线级数是有限制的,不可能无限增加。
- 多发射流水线技术 同时启动多条指令独立运行提高指令并行性。
- 指令打包 将并行处理的多条指令同时发送到发射槽 推测技术
- 冒险处理
存储器分层体系结构
存储器概述
存储器的分类
- 按存储原件分类
- 半导体存储器
- 磁表面存储器
- 光盘存储器
- 按存取方式分类
- 随机存取存储器 按地址访问存储单元
- 顺序存取存储器 信息按顺序存入和读出 存储容量大,存取速度慢
- 直接存取存储器 兼有随机访问和顺序存储的特点 磁盘
- 相联存储器
- 按信息的可更改性分类
- 读写存储器
- 只读存储器
- 按断电后信息的可保存程度分类
- 非易失性存储器
- 易失性存储器
- 按功能分类
- 高速缓冲存储器 静态RAM芯片
- 主存储器 核心存储器 MOS管半导体存储器
- 辅助存储器 磁盘存储器
- 海量后备存储器 容量大 速度慢
辅存和海量后备存储器统称为 外部存储器 ,简称 外存 。
主存储器的组成和基本操作
存储器的主要性能指标
- 容量
- 价格
- 速度
访问时间用读出时间T_A和写入时间T_W来描述
- 接到命令开始到信息被送到数据线上的时间
- 接到命令到信息写入存储器的时间
存储周期(T_M):一次读写操作需要的全部时间,存储器进行连续读写操作的最短时间间隔。
存储器的层次化结构
典型存取时间 | 存储器 | 典型容量 |
---|---|---|
1ns | 寄存器 | <1KB |
2ns | 高速缓存(cache) | 4MB |
10ns | 主存储器(RAM和ROM) | 500MB~4GB |
10ms | 辅助存储器(硬盘) | 40~500G |
10s | 海量后备存储器(磁带库、光盘等) | 10~100TB |
半导体随机存取存储器
基本存储原件
用来存储一位二进制信息,是组成存储器的最基本电路。
- 六管静态MOS管存储元件
- 单管动态MOS管存储元件 降低了功耗
- 静态存储元件和动态存储元件的比较
- SRAM存储元件所用MOS管多,占硅片面积大,功耗大,集成度低
- DRAM存储元件MOS管少,占硅片面积小,功耗小,集成度更高,但因电容存储电荷,有漏电现象,必须定时刷新。
SRAM芯片和DRAM芯片
- 存储器芯片的内部结构
- 存储体
- 地址译码器
- 驱动器
- I/O控制电路 放大信息的作用
- 片选控制信号
- 读写控制信号
- DRAM芯片的刷新
- 集中刷新 时间较长,影响系统的执行效率
- 分散刷新 不存在死时间区,但每个存储时间周期被加成
- 异步刷新
- DRAM芯片读写周期
SDRAM芯片技术
SDRAM
芯片技术 每一步操作都在CLK的控制下,支持 突发 传输方式。DDR SDRAM
芯片技术DDR2 SDRAM
芯片技术DDR3 SDRAM
芯片技术
存储器芯片的扩展及其与CPU的连接
内存条和内存条插槽
存储器芯片的扩展
- 位扩展
- 字扩展 容量扩充,位数不变
- 字、位同时扩展
半导体只读存储器和Flash存储器
半导体只读存储器
- 掩膜只读存储器
- 双极型
- MOS型
内容固定,可靠性高,但灵活性差,生产周期长,用户和厂家依赖性大,只适合定型批量生产
- 可编程只读存储器
- 熔丝型
- 反向二极管型
写入不可逆
- 可擦除可编程只读存储器
- 电擦除电改写只读存储器
半导体Flash存储器
闪存,高密度非易失型读写存储器。功耗低,集成度高,不需要后备电源。
- Flash存储元
- Flash存储器的基本操作
- 编程
- 擦除
- 读取
并行存储器结构技术
双口存储器
两组独立的读写控制电路和两个独立的读写端口。
多模块存储器
- 连续编址方式
- 交叉编址方式
高速缓冲存储器
程序访问的局限性
较短时间间隔内,程序产生的地址往往集中在存储器的很小的一个范围。
- 时间局限性 被访问的某存储单元在较短时间内可能又被访问
- 空间局限性 被访问的某个存储单元在一个较短的时间间隔内很可能也被访问
cache的基本工作原理
cache行和主内存块之间的映射关系
- 直接映射
- 全相联映射
- 组相联映射
cache中主存块的替换算法
cache的一致性问题
- 全写法
- 回写法
虚拟存储器
虚拟地址空间
- 简化存储
- 使主存空间有效利用
- 保护各自进程不被其他进程破坏
虚拟存储器的实现
互联及输入输出组织
外部设备的分类和特点
外设的分类
按信息的传输方向分类
- 输入设备
- 输出设备
- 输入输出设备
按功能分类
- 人机交互设备
- 存储设备
- 机-机通信设备
外设的特点
- 异步性
- 实时性
- 多样性
输入设备和输出设备
外部存储设备
磁表面存储器的原理
硬盘存储器
冗余磁盘阵列
U盘和固态硬盘
外设与CPU、主存的互联
总线概述
计算机内数据传输的公共路径,用于实现两个或两个以上部件之间的信息交换。
通常由一组数据线、一组控制线和一组地址线组成。有些总线没有单独的地址线,地址信息通过数据线来传送,这种行为称为数据线和地址线复用。
- 总线宽度 总线中数据线的条数
- 总线工作频率
- 总线带宽 单位时间最多可传递的数据量 $B=W*F/N$
- W 总线宽度
- F 总线的时钟频率
- N 完成一次数据传送所用的时钟周期数
- 总线的寻址能力 地址线位数所确定的可寻址空间的大小
- 总线定时方式
- 同步
- 异步
- 半同步
- 总线传送方式
- 非突发 先传地址,再传数据
- 突发 先给出首地址,连续传送数据块
在总线宽度和总线时钟频率相同的情况下,突发方式数据传输更快。
- 总线负载能力 总线的负载一般指总线上扩展槽的个数
基于总线的互连结构
I/O接口
解决外设与主机之间同步与协调、工作速度的匹配和数据格式的转换等问题。
I/O接口的功能
- 数据缓冲
- 错误或状态检测
- 控制和定时
- 数据格式转换
I/O接口的通用结构
I/O端口及其编址
I/O数据传送控制方式
程序直接控制I/O方式
- 无条件传送方式 适用于简单外设
- 条件传送方式 适用于自身能独立启动I/O的设备
- 定时查询
- 独占查询
程序中新I/O方式
- 中断的概念
- 中断系统的基本职能和结构
- 及时记录各种中断请求信号
- 自动响应中断请求
- 自动判优
- 保护被中断程序的断点和现场
- 中断屏蔽
- 中断过程
I/O子系统概述
内核空间I/O软件
与设备无关的I/O软件
- 设备驱动程序统一接口
- 缓冲区处理
- 错误报告
- 打开和关闭文件
- 逻辑块大小处理
设备驱动程序
中断服务程序
并行处理系统
通过采用多个功能部件或多个处理器核或多个CPU或多台计算机的互连,使得一个系统中可以同时进行多条指令或多个线程或多个任务的处理,从而实现计算速度和计算能力的大幅提升。
并行处理系统概述
并行处理的主要技术性问题
- 互连
- 数据一致性
- 同步控制
- 任务划分
- 并行程序设计
- 资源调度和管理
- 容错性和安全性
- 性能分析与评估
并行处理系统的分类
- Flynn分类
- 单指令流单数据流结构
- 单指令流多数据流结构
- 多指令流单数据流结构
- 多指令流多数据流结构
- 按地址空间的访问方式分类
- 多计算机系统 具有多个私有地址空间的并行处理系统
- 多处理器系统 共享的单一地址空间的并行处理器系统
- 按存储访问时间是否一致划分
- 一致性内存访问结构
- 非一致性内存访问结构
- 按处理器单元的位置及其互连方式划分
- 多核芯片 一个CPU芯片中包含多个处理单元,每个处理单元称为一个 核,所有核可能共享一个LLC,并共享主存储器
- 众核芯片 一个面向三维图形、视频和可视化处理的GPU芯片中,包含多达几百个的简单核
- 对称多处理器 多个相同类型的GPU通过总线互连,并以相同地位共享系统的所有资源
- 大规模并行处理机 以专用内联网络连接数量众多的处理单元而构成的一种并行计算系统
- 集群 通过高性能网卡将若干个普通PC或SMP服务器或工作站连接而成的并行处理系统
- 网格 用因特网等广域网连接起来的远距离分布的一组异构计算机系统构成的分布式并行处理系统
多处理器系统
UMA多处理器系统
每个处理器对存储单元的访问时间是一致的
NUMA多处理器系统
多处理器系统中的互连网络
片级多处理器和多线程技术
多计算机系统
集群多计算机系统
向量处理机和SIMD技术
向量处理机
Intel中的SIMD技术
GPU架构
并行处理编程模式简介
- 共享存储变量方式
- 消息传递方式
- MapReduce并行程序设计方式
- CUDA并行程序设计方式
最后修改于 2019-05-13