计算机组成原理 - 速记版(为coursera.org上pku课程总结)
概论:分类应用,概念,基本组成,层次结构
计算机组成基本结构
冯 诺伊曼结构
CPU
控制器:CC,ALU
运算器:CU(主要是控制电路,指令译码):IR,PC
主存
- 主存储器:MDR,MAR
计算机执行指令的过程
取指:PC, MAR, M, MDR, IR
译码:OP(IR),CU
执行:ADD(IR), MAR, M, MDR, ACC
回写:回写到目标地址
基本的简单模型
CPU
北桥:一般是用于一些高速设备和CPU之间的连接,如显卡。
南桥:主要是用作非运算类的设备,如IO
系统芯片SoC(System on a clip):将计算机的所有电子系统集成到单一的芯片上面
Moore’s Law
总线系统
中央处理器(ALU)(运算器和控制器)
逻辑运算
R型:and/or/nor
i型:andi/ori(高16位全为0,不是对于低位的复制
算术运算
R型:add/addu,sub/subu
i型:addi/addiu
加法和减法的实现
半加法器half adder
将两个二进制相加,使用异或门实现
改进:正常位实现异或门实现,进行使用与门实现
全加器full adder:由两个半加器构成,并且增加一个进行线路
溢出:仅仅针对有符号的数进行相加
判断标志:Cin和Cout不想等,就溢出
门电路:异或门相连,值不同时就为真,就溢出
为什么可以作为标志位?
当Cin为0时,Cout为1表示最高位两个1相加,溢出
当Cin为1时,Cout为0表示,进入的是两个0相加,即这一位不存在
减法:在最低位使用一个异或门
MIPS:addu和addiu是两条不处理溢出的指令
X86: 把opcode看作是有符号的,多了一个标志位OF
加法的逻辑优化·
行波进位加法器(RCA,Ripple Carry Adder)
结构:低位全加器的Cout连接至高一位全加器Cin,因此,第二位要先等第一位计算完成后再计算
优点:电路简单,设计方便
缺点:高位必须等待低位进行
耗费时间(以4位累加器件):T 2T*4= 9T
超前进位加法器(CLA)
本质上是将电路进位计算,这也意味着电路会复杂表
32位的CLA;常见方法:使用4个CLA进行桥接
C1 = G0 P0C0
C2 = G1 P1C1
C3 = G2 P2C2
耗费时间:4T
乘法器:
无多位暂存寄存器,进行到哪一位就对哪一位进行直接的相加
基本硬件:
乘数寄存器Multiplier 带右移
被乘数寄存器Multiplicand 带左移
乘积寄存器Product
ALU(8位加法器:乘积最大数)
控制电路
基本过程:
1.检查“乘数寄存器”最低位
2.值为1执行:乘积值和被乘数相加;或者不进行
3.1将被乘数寄存器向左移动一位;
3.2 将乘数寄存器向右移动一位
\4. 是否已经到第N次相关的循环
优化:
软件:
- 因为寄存器的值被改变后,需要等到下一个clock改变才会生效,所以,2,3.1,3.2可并行进行;
硬件
将被“乘数寄存器”使用最小值,并去掉移位功能
将“乘积寄存器”的高位用来存储相关,低4位用于存储乘数,并进行相应的右移动
乘数寄存器不要
alu改为最少位数的
除法器:
基本硬件
除数寄存器 Divisor:带向右移动
商 Quotient:带向左移动
余数(被除数寄存器) Remainder
ALU:(加法和减法两种)
基本过程
1 余数 = 余数- 除数
2 检查余数
2.1 大于等于0 ,商左移1位,新的设为1
2.2 小于0,回退(加回原来的值),新的最右位设为0
3 除数右移1位
4 检查值是否已经循环完毕或者余数精确值
优化:
软件:因为检查后的值会导致执行不同,因此,无法并行执行
硬件:
除数寄存器,与上面类似
商寄存器取消
alu类似
余数寄存器
与乘法类似,高32位为记录相应的值,低32位存相应的商
支持左移和右移,执行加法时左移,执行减法时右移动
门电路基本原理:
非门
与门
或门
异或门:两值不相同时,则取真值
寄存器的基本原理:
- D触发器:output的值随着clock周期进行相关的变化
指令系统(x86,MIPS ISA)
RISC和CISC:精简指令集和复杂指令集
X86体系结构
X8086
以IP作为PC
具备16位地址,所以寻址能力是2^16
为了扩展寻址能力到2^20, 增加了4个段寄存器:CS代码段, DS数据段, ES附加段, SS堆栈段
逻辑地址->物理地址
- 16位段基值:16位偏移量->段基值左移4位形成实际20位段基值:16位偏移量-> 2^物理地址(20位) 偏移量
X80386
- 在8086的基础上新增加FS,GS两个段寄存器,以及10个通用寄存器,形成总共的32位
X86-64
新增8个64位的寄存器
地址不是统一长度,需要实现变址
X86指令简介
指令的分类:
运算类指令:ADD/ADC(带进位)/INC
传送类指令:MOV EBX,40
转移类指令:JNZ
控制类指令:LOOP
X86复杂指令例子
串操作指令
作用
对存储器中的每一个数据进行每次一个元素的操作
基本单位是字节或字
串长度可达64KB
分类
共5条串操作指令
另有3种重复前缀,与串操作指令配合使用
例子:MOVSB
MOV AX,DS
MOV ES,AX
MOV SI,2040H
MOV DI,2060H
CLD
MOV CX,3(定义执行三次)
REP MOVSB
MIPS体系结构(MIPS相关的部分需要重看)
由MIPS公司发展而来,现在仍然广泛运用于数字电视,机顶盒等嵌入式设备
MIPS指令特点
固定指令长度
简单寻址模式
指令数量少,功能简单
只支持Load和Store这两种对存储器的访问
load和store的区别(方向完全相反):由寄存器写入临时寄存器($8),由临时寄存器($8)写入寄存器
lw $8,12($9)/sw $8,40($19)
MIPS体系指令
举例MIPS实现A[10]=h A[3]
lw $8,12($9)
add $8,$18,$8; $8 = $8 $18
sw $8,40($19)
分类:
符号的基本含义
opcode操作寄存器
rs源操作寄存器
rt第二个源操作寄存器
rd目的操作寄存器
shamt移位寄存器
funct计算
R型:寄存器 32
- 基本结构:opcode: rs: rt: rd: shamt: funct = 6bit: 5bit: 5bit: 5bit: 5bit: 6bit
I型:立即执行
基本结构:opcode: rs: rt: immediate = 6bit: 5bit: 5bit: 16bit
PC 2^15 bytes
J型:转移类
分支指令:控制相关的分支系统
条件分支 beq rs, rt, true
如何充分发挥16bit作用?
以当前pc为准16bit 2^15
MIPS固定为32位
16位位移量的基础上 加4位 2^15 = 2^17
分支不成立:pc=pc 4
分支成立:pc =(pc 4) immediate*4
非条件分支
opcode占用6位
pc= (pc的高4位) 地址量:地址范围就变为2^(32-4)
如何调用更远的目的地址?
2次调用j指令
使用jr指令:jr,js
周期处理器
单周期处理器
处理器的设计步骤
1.分析指令系统,得出对数据通路的需求。
2.为数据通路选择合适的组件。
3.连接组件建立数据通路。
4.分析每条指令的实现,以确定控制信号。
5.集成控制信号,形成完整的控制逻辑。
需求:
数据通路:
指令
运算指令:
访存指令:
只有访存指令才需要访存时间
lw负责从源寄存器取值,写会寄存器
sw负责将值写回rd,缺少回写
分支指令:
- 只负责判断,不会写入寄存器值
控制信号:
控制信号的逻辑表达式:
控制器的逻辑表达式:opcode(6bit)和func(6bit)构成
流水线处理器
指令执行处理过程
取指Fetch
译码Decode
执行Execute
访存Memory
回写Write back
流水线的优化
简单优化
流水线的平衡
- 不平衡的流水线会对性能造成影响,主要是等待耗时
时钟周期
将大的操作进行再切分小的。形成超级流水线技术(Super pipeling)
实际操作:提升时钟的相关的频率
缺点:单条指令的延迟读取比例会增加,进而影响性能
历史处理器的发展:
频率就是流水线深度的体现(时钟周期)
Intel:
1986 R200/R3000 5级
1993 Pentinum 5级
1995 Pentinum Pro 12级(尝试引入RISC创造流水线)
2004 Pentinum 4(Presoft)31级
ARM:
1997 ARM9/ARM11 5级
2013 CoreX-A57 15 级别(现在基本主流芯片基本维持的深度)
超标量流水线SuperScalar
原理:拓宽流水线(通常具有2条以上的并行工作的流水线的结构)
采用超标量的芯片:1964 CDC600(第一台)->Cortex-A9
与标量之间的区别:
单周期->标量流水线:时间并行性的优化
标量流水线->超标量流水线:空间并行性的优化
多核CPU
- 在一个CPU芯片中集成了多个超标量处理器的处理器核
流水线的冒险
通用解决方案:
- 流水线停顿(stall),产生空泡,通俗地说就是等待;
结构冒险
产生原因:同一个指令被同时执行读和写的操作(本质是硬件资源的不足)
问题:指令和数据放在同一存储,不能同时读存储器?
- 指令和数据在存储器而不是寄存器时,进行单独的存储。
问题:读和写同时发生?
- 前半个时钟读,后半个时钟写,并且设置独立的读写口。
数据冒险
产生原因:一条指令需要使用之前的指令结果,但结果没有写回。
问题:需要使用到先前的指令?
软件:使用nop来占用更多时间周期,达到时钟平衡
数据前递(Forwading):省略相关的执行步骤(如读写寄存器),硬件实现叫旁路(即增加多的硬件实现相应的功能)
问题:一条指令需要使之前指令的访存结果?
- 单数据无法解决,因此只能使用硬件上前递解决
控制冒险
产生原因:无法确定下一条指令出现的冒险
Branch Frequency:
i7:4 * 16
ARM Cortex-A15: 3*15
转移指令占流水线的比例大概在15%~25%
延迟转移技术:将不需要参与前者运算的指令放进需要等待的周期中,从而节约一个周期。
主要思想:分析相关的停顿和寄存器,从而进行相关的优化。
存储管理:与操作习题存储器管理类似
基本功能:
非易失性(断电仍然保存,主要是bios和芯片)
可读可写
随机访问(与位置有关)
访问时间
层次结构(从第一项到最后一项为过程方向)
CPU
SRAM(cache)
DRAM(内存)
DISK
DRAM
基本结构:通过行地址/列地址进行定位访问数据
基本过程
行选 -> tRCD -> 列选 -> CL ->数据-> 预充电->tRP -> 行地址->tRCD
行选和列选的过程主要是对单元进行刷新(refresh),使得原来表示“1”的电荷有效,表示为“0”的保持无电荷状态
发展
SDRAM 同步Sync的过程是通过提升时钟来提升相关的频率
SDR SDRAM单通道 同步动态存储
- 只在时钟clock上升时传送数据
DDR SDRAM双通道 同步动态存储
- 时钟clock上升和下降都传送数据
优点:
集成度高
功耗低
价格较低
缺点:
速度较慢
定时刷新
SRAM(cache)
相同的一个DRAM单位,SRAM需要6个mos晶体管
基本结构
地址线
片线:是否有读写功能
数据线
读/写线:决定是否进行读/写
优化条件:
空间局部性:以数据块(block)为单位。
时间局部性:提高访问数据的频率
策略
命中时策略
写穿透Write Through:数据同时写入cache和主存
写返回Write Back:数据只写入cache,仅当被替换时再写入cache
失效时策略
写不分配Write allocate:直接写入主存
写分配Write Non-allocate:将该数据的块写入cache后,再将数据写入cache
访问时间
计算公式:
失效原因:
义务失效 compulsory miss: 完全访问不到
容量失效capacity miss:不能存下更多的块
冲突失效conflict miss:替换算法
组合方式:(解决容量失效)
直接相联
全相联
替换算法(解决冲突失效,具体的可在操作系统中查看)
随机
轮转
最少使用
单位:
总结:除高速缓存和内存外,都采用国际单位制的10进制,2进制的单位缩写需要在国际单位后面加i
1 Byte = 8 bits(看清楚缩写,bit才为一个二进制)
中断和异常
来源和历史
第一台带有中断的机器UNIVAC
中断工作的最初原理是:专向地址为0的执行修复或者停机
表结构
内存分区
中断专用区:一般用于初始化代码
通用区
中断专用区:主要用于中断向量表
基本
中断向量:
基本表示方法:IP:CS(实模式)
物理地址计算:CS左移4位(2^4) 偏移量IP
内容和地址的区别:
内容:中断指令*相应的位数
地址:根据IP:CS从低到高进行取出
扩展:
保护模式:EIP(16->32):CS
保护模式下:段基址不在CS中而在内存中
GTD 全局描述符表
GTDR 全局描述符表的地址寄存器
中断描述符表:
专用中断:0~4
- 类型2:非屏蔽中断,不属于内部中断
保留中断:5~31
用户自定义:32~255
处理过程
\1. 关中断
\2. 保存中断点
3.识别中断源
4.保护现场
5.执行中断程序
主要是为了响应高优先级
通过中断标志位进行判断IF(1时允许响应)
相关指令
STI: 1
CLI:0
6.恢复现场并返回
内部中断的分类
类型0:除法错中断
与OF位有关
一般由程序员自定义
类型4:溢出中断
- 恢复现场并返回
类型1:单步中断 :
与TF位有关
除了单步中断外,所有内部中断都不可以通过软件方法屏蔽
类型3:断点中断
常用方法:通过类型3确定出现问题的大体方向,通过类型1进行内部详细筛查
特点:
中断类型号
屏蔽方式
优先级
功能调用:
INT指令
ROM BIOS中断
例子
MOV AH,1
MOV CX,0
MOV DX,0
INT 1AH
10H
0 设置显示位置
2 设置光标位置
1AH
0读时钟
1置时钟
DOS中断
INT 21H
比BIOS更完善和易于操作
06H 直接控制IO
09H 显示字符串
2CH 取时间
2DH 设置时间
输入和输出设备 (I/O相关设备)
I/O的基本功能
数据缓冲:解决CPU与外设之间的速度差距
提供联络信息:协调与同步数据交换过程
信号与信息格式的转换:模/数,数/模,串/并,并/串转换,电平转换
设备选择
中断管理
可编程
I/O指令说明:
IN AC,PORT
OUT PORT,AC
- OUT中存在M/IO来决定读取memory还是IO
取指方式
直接取址
间接取址
I/O设备的编制方式
分开和统一是指I/O设备和存储器的结合方式
统一编址
优点
可以用访问存储器的指令来访问I/O端口,访问存储器的指令功能比较齐全,可以实现直接对I/O端口内的数据进行处理
可以将CPU中的I/O操作与访问存储器操作统一设计为一套控制逻辑,
缺点
由于I/O端口占用了一部分存储器地址空间,因而使存储地址空间减小
由于利用访问存储器的指令来进行I/O操作,指令的长度通常比单独I/O指令要长,因而指令的执行时间也比较长
分开编址
优点
I/O端口不占用存储器地址,不会减少用户的存储器地址空间
I/O指令编码短,执行速度快
I/O指令的地址码较短,地址译码方便
采用单独的I/O指令,使程序中I/O操作和其他操作层次清晰,便于理解
缺点
I/O的控制方式
含义:
- CPU控制外设的数据传送类
方式:
软件方式
程序控制方式(无条件传送,程序查询方式)
无条件传送: 不检查状态之直接传送,容易造成数据冲突
程序查询方式:通过CPU循环查找I/O设备是否有请求
中断控制方式
中断检查相应的状态,不用CPU循环。设备可以向CPU发送相关的信息。
NMI 非屏蔽中断
INTR 可屏蔽中断
PIC中断控制器
APIC硬件外部中断
硬件方式
直接存储方式(DMA):通过硬件实现相应的中断
DMAC芯片
拥有两个模块:M:内存模块和S:从模块接口
作为CPU的一部分