哈工大刘宏伟老师《计算机组成原理》课程笔记
1.0 课程简介
-
计算机组成原理位于计算机课程硬件部分的最上层,如何实现计算机体系结构所体现的属性(如何实现指令)
-
计算机系统结构是连接软硬件的桥梁部分,核心内容是指令集,机器语言程序员编写在硬件系统上运行的程序所用到的计算机属性(用到哪些指令)
1.1 计算机系统简介
- 计算机软件分为系统软件和应用软件,系统软件用来管理整个计算机系统资源,包括语言处理程序、操作系统、服务性程序、数据库管理系统、网络软件等,应用软件是按任务需要编制成的各种程序
- 系统软件借助硬件接口(如指令集)来完成功能,应用软件调用系统软件接口来实现具体任务
1.2 计算机的基本组成
1.2.1 冯诺依曼计算机
(1)特点
- 计算机由五大部件组成
- 指令和数据以同等地位存于存储器,按地址寻访
- 指令和数据用二进制表示
- 指令由操作码和地址码组成
- 存储程序(核心特点)
- 以运算器为中心
(2)硬件组成
- 存储器用来存放数据和程序
- 控制器用于指挥程序运行
- 运算器包含算术运算和逻辑运算
- 输入输出设备用于转化信息形式
1.2.2 现代计算机硬件框图
- 以存储器为中心的计算机硬件框图 :输入输出设备同存储器打交道,减小运算器压力
- 计算机硬件包括主机和IO设备,主机包括CPU和主存,CPU包括运算器ALU和控制器CU
1.2.3 存储器
-
存储器由存储体、MAR和MDR组成
-
存储体由一块块存储单元组成,存储单元中存放一串二进制代码,存储字是存储单元中二进制代码的组合,存储字长是存储单元中二进制代码的位数,每个存储单元都有一个地址号,按地址寻访
-
MAR是存储器地址寄存器,保存存储单元地址和编号,长度反应存储单元个数
-
MDR是存储器数据寄存器,保存要存入和要取出的数据,长度反应存储单元字长
1.2.4 运算器
- 运算器由算术逻辑单元(ALU)和寄存器组成,ALU是组合电路,需要寄存器参与保存运算
- 数据寄存器X保存输入,ACC为累加寄存器,MQ用来保存乘除数据
- 乘法的微操作过程
1.2.5控制器
(1)控制器的功能:
- 解释指令(取指令、分析、取操作数、执行、保存)、保证指令的按序执行
(2)控制器的组成
- 控制器由程序计数器(PC)、指令寄存器(IR)和控制单元(CU)组成
- 完成一条指令需要取指令(PC),分析指令(IR)和执行指令(CU)
- PC寄存器保存当前指令的地址,具有计数功能
- IR寄存器存放当前要执行的指令,将操作码送入CU分析
- CU发出控制信号,控制相应部件来完成一系列微操作,从而执行指令
(3)以取数指令为例,分析主机完成一条指令的过程
(4)ax^2+bx+c程序的执行过程
1.3 计算机硬件的主要技术指标
- 机器字长:CPU一次能处理数据的位数,与CPU中寄存器位数有关
- 运算速度:主频(时钟周期的倒数,有关但不是决定)、核数及每个核支持的线程数、CPI(执行一条指令所需的时钟周期数)、MIPS(每秒执行百万条指令)、FLOPS(每秒浮点运算次数)
- 存储容量:主存容量(可使用存储单元个数*存储字长来表示存储体容量,MAR * MDR;也可使用字节数来表示)、辅存容量(字节数表示)
3.1 总线的基本概念
- 总线是各个部件共享的传输介质,是信号的公共传输线,同一时刻只能在两个部件间传输信息
- 以存储器为中心的双总线结构,但主存仍然无法同时向系统总线和存储总线传输信息
3.2 总线的分类
(1)片内总线:芯片内部的总线
(2)系统总线:计算机各部件之间的信息传输,分为
- 数据总线,双向,一般小于等于机器字长和存储字长
- 地址总线,单向,与存储地址、I/O地址有关
- 控制总线:双向(CPU发出存储器读写指令,总线允许,中断确认等;CPU接受中断请求,总线请求等)
3.3 总线的性能指标
- 总线宽度:同时可以传输多少位数据,数据线的根数
- 标准传输率:每秒传输的最大字节数MBps
3.4 总线控制
3.4.1 总线判优控制
- 通过是否能对总线发出占用请求,将设备分为主设备(主模块)和从设备(从模块)。主设备可以对总线有控制权,从设备响应从主设备发来的总线命令。
- 总线判优控制可以分为集中式和分布式,下面介绍集中集中式总线判优控制结构
(1)链式查询方式
- 总线控制部件通过BG来链式查询这些接口是否提出了BR,遇到了BR则交出控制权
(2)计数器定时查询方式
- 通过设备地址线来查找某个设备是否发出总线请求。计数器的值通过设备地址线进行传输,来查找某个设备是否发出请求。可以自定义计数器的计数方式,来改变从哪个设备先查询等。
(3)独立请求方式
- 为每个I/O接口增加了BR和BG,通过排队器来进行优先级排队。这种方式使用的线数较多。
3.4.2 总线通信控制
- 目的是解决通信双方(主从设备)协调配合的问题
(1)总线传输周期(完成一次主从设备传输所需时间)
- 申请分配阶段:主设备申请,总线决定
- 寻址阶段:主设备向从设备给出地址和命令
- 传数阶段:主从设备数据交换
- 结束阶段:主从设备撤销信息
(2)总线通信四种方式
- 同步通信:由统一时钟控制数据传送
- 异步通信:没有统一时钟,采用应答方式
- 半同步通信:同步异步结合
- 分离式通信:充分挖掘系统总线每个瞬间的潜力
(3)同步通信
- 强制同步,如果设备间速度不同,需要等待慢的设备
(4)异步通信
- 不互锁:不管从设备是否接收到请求信号,过段时间主设备都会撤销请求。不管主设备是否接收到应答信号,从设备多段时间都会撤销应答
- 半互锁和全互锁针对上面进行改进
(5)半同步通信
- 同步异步结合,增加等待响应信号,当数据没准备好时,WAIT为低电平,等待一个T
(6)分离式通信
-
上述三种通信的共同点:
- 一个总线传输周期内:
- 主模块发地址、命令占用总线;
- 从模块准备数据时不占用总线,总线空闲;
- 从模块向主模块发数据时,占用总线
-
通过分离式通信将总线空闲的时间利用起来
-
分离式通信的总线传输周期分为两个子周期
- 第一个子周期,主模块申请占用总线,用完后放弃总线使用权;
- 第二个子周期从模块申请占用总线(变为主模块),传输信息
-
分离式通信特点:
- 各模块有权申请占用总线;
- 采用同步方式通信,不等应答;
- 各模块准备数据时,不占用总线;
- 充分提高了总线的有效占用;
4.1 存储器分类
4.1.1 按存储介质分类
- 半导体存储器,是易失的,分为TTL(晶体管,速度快,电流控制)和CMOS(金属氧化物半导体,功耗小,电压控制)
- 磁表面存储器
- 磁芯存储器
- 光盘存储器
4.1.2 按存取方式分类
(1)存取时间与物理地址无关(随机访问)
- 随机存储器 可读可写 RAM
- 只读存储器 只读 ROM
(2)存取时间与物理地址有关(串行访问)
- 顺序存取存储器 磁带
- 直接存取存储器 磁盘
4.1.3 按在计算机中的作用分类
(1)主存储器
- RAM(分为静态RAM和动态RAM)
- ROM(MROM、PROM、EPROM、EEPROM)
(2)Flash Memory
- 介于主存和辅存之间,SSD,U盘
(3)高速缓冲存储器(cache)
- 介于CPU和主存之间
(4)辅助存储器
- 磁盘、磁带、光盘
4.2 存储器的层次结构
(1)分层结构
- 寄存器分为体系结构寄存器(指令可操作)和非体系结构寄存器(指令不可操作)
- 一部分缓存在CPU中
(2)缓存—主存层次和主存—辅存层次
- 缓存——主存层次,使用硬件方法连接到一个整体(对程序员透明,即不需要了解),解决CPU和主存之间速度差距较大的问题,缓存即为cache,CPU可以直接从缓存调用数据,cache和主存也进行数据交换。使用主存储器的实地址和物理地址。
- 主存——辅存层次,使用软硬件结合方式连接,解决容量不足问题。这个层次称为虚拟存储器,使用虚地址和逻辑地址。
4.3 主存储器
4.3.1 概述
(1)主存与CPU之间的联系
(2)主存中存储单元地址的分配
-
寻址指当CPU请求数据时获得该数据在内存上的位置的过程
-
地址是按字节进行编码的,也就是说以字节为单位分配的
-
字节是硬件能访问的最小单位,需要访问某一位要用到位运算符
-
按字和按字节寻址:访问的地址范围是一样的,只是方式的不同(按字访问需要预留专门的地址线来访问内部的字节)
4.3.2 半导体存储芯片简介
(1)基本结构
(2)片选线
-
第4组上存储第48K到64K个存储单元
-
片选线的作用是能够同时访问8位数据
(3)译码驱动方式
- 通过重合法能够减少译码线根数
4.3.3 RAM和ROM
- RAM(随机存取存储器)和ROM(只读存储器)都是半导体存储器
- RAM断电易失,分为静态SRAM和动态DRAM,SRAM由触发器电路组成,速度快,功耗大,造价高,用于Cache,DRAM由CMOS电容组成,速度慢,数据保留时间短,需要充电刷新,用于内存条
- ROM分为MROM、PROM、EPROM、EEPROM,主要用于BIOS,闪存由ROM发展而来
4.3.4 存储器与CPU的连接
- 地址线、数据线、读写命令线和片选线
4.4 高速缓冲存储器
4.4.1 概述
(1)提出
- 避免CPU“空等”现象
- 程序访问的局部性原理:时间和空间
(2)Cache的工作原理
- 主存和缓存都按块存储,块的大小相同
- 如果主存块已调入缓存,则CPU访问时称作命中,否则未命中
- Cache的命中率:CPU欲访问的信息在Cache中的比率
(3)Cache的基本结构
- Cache存储体、主存Cache地址映射变换机构、Cache替换机构
(4)Cache的读写操作
- 写时需要注意Cache和主存的一致性,有写直达法(既写Cache又写内存),写回法(只写Cache,只在Cache数据被替换时才写回主存)
4.5 辅助存储器
-
不直接与CPU交换信息
-
磁记录原理:写时线圈通电改变磁化单元方向表示0、1,读时线圈移动切割磁感线产生不同方向电流
5.1 输入输出系统概述
(1)输入输出系统的组成
-
IO软件(包括IO指令和通道指令)、IO硬件
-
CPU将IO指令交予IO通道来处理,通道程序可以执行IO操作
-
IO硬件分为设备和接口,设备通过接口连接到总线上
-
采用通道方式的话,IO硬件可分为设备、设备控制器和通道
(2)IO设备编址方式
- 统一编址:IO设备地址为内存地址的一部分,取数、存数指令是CPU指令的一部分
- 不统一编址:有专门的IO指令
(3)IO设备和主机信息传送的控制方式
-
程序查询方式:CPU等待IO准备数据
-
程序中断方式:CPU和IO并行,IO准备好后发出中断请求,CPU保存现场,执行中断服务程序
-
DMA:IO通过DMA控制器,进行周期挪用,直接和内存交互,一个存取周期内,CPU不能使用系统总线访问内存
6.1 无符号数和有符号数
6.1.1 无符号数
- 没有正负号,寄存器位数即为无符号数表示范围
6.1.2 有符号数
- 真值转化为机器数,机器数保存符号、小数点位置及其数值
(1)原码表示
- 整数:符号位+, +数值部分,符号位0正1负
- 小数:符号位+. +小数部分,符号位0正1负
- ,和.方便阅读,都不在计算机中存储
(2)补码表示
- 将减法转化为加法,“模”的概念,相当于用一个与负数等价的正数来代替负数
(3)三种机器数的对比
- 最高位为符号位,书写上用","(整数)和"."(小数)将数值部分和符号位隔开
- 对于正数,原码=补码=反码
- 对于负数,符号位为1,数值部分:补码为原码除符号位外每位取反加1,反码为原码除符号位外每位取反
(4)移码
- 用于直接判断真值大小
- 移码同补码的数值位相同,符号位取反
6.2 数的定点表示和浮点表示
6.2.1 定点表示
- 按照约定方式确定小数点位置,在数符和数值间称为小数定点机,在数值后为整数定点机
- 定点表示的数范围小
6.2.2 浮点表示
- N=S*r^j,S为尾数,为小数,可正可负,j为阶码,为整数,可正可负,r为基址,通常为2
- 原码/补码/反码表示形式:j的原码/补码/反码的整数形式+; +S的原码/补码/反码的小数形式
- 上溢:阶码>最大阶码,下溢:阶码<最小阶码,按机器零处理
6.2.3 定点运算
- 定点数的乘法可以转化为移位运算和加法运算
7.1 机器指令
-
指令系统是硬件和软件的中间层
-
当减少地址数(比如使用寄存器)后,能够增大指令的寻址范围、缩短指令字长或者减少访存次数
-
指令字长取决于操作码长度、操作数地址长度和操作数地址个数
-
指令字长固定的话,指令字长可以等于存储字长,可变的话,可以按字节的倍数变化
7.2 操作数类型和操作种类
7.2.1 数据在存储器中的存放方式
- 边界对准方式:数据存放的起始地址是数据长度的整数倍,既可以在一个周期内完成存储访问,也不太浪费存储空间
7.2.2 操作类型
(1)陷阱指令:意外事故的中断
- 一般不给用户使用,出现事故时,由CPU自动产生并执行(隐指令)
- 设置供用户使用的陷阱指令,如INT TYPE(软中断),用户使用完成系统调用
(2)输入输出
- 入:端口中的数据—>CPU寄存器
- 出:CPU寄存器—>端口数据
7.3 寻址方式
- 分为指令的寻址(确定下一跳指令的地址)和数据的寻址(确定本条指令的操作数地址)
7.3.1 指令寻址
- 分为顺序寻址(PC+1,按字和字节编制方式加的数不一样)和跳跃寻址(JMP等)
7.3.2 数据寻址
- 指令格式:操作码+寻址特征+形式地址A
- 形式地址(A):指令字中的地址,有效地址(EA):操作数的真实地址
(1)立即寻址
- 形式地址就是操作数
- 不访存
(2)直接寻址
- 有效地址由形式地址直接给出
- 访一次存,操作数地址不易修改
(3)隐含寻址
- 操作数地址隐藏在操作码中
- ADD、MOVS
(4)间接寻址
- 有效地址由形式地址间接提供
- 多次访存,可扩大寻址范围,便于编制程序(不用该形式地址,只用改里面的值)
(5)寄存器寻址
- 有效地址为寄存器编号
(6)寄存器间接寻址
- 有效地址在寄存器中
- 便于编制循环程序
(7)基址寻址
- 采用专用寄存器Br作为基址寄存器,程序执行过程中,Br内容不变,形式地址可变,有利于多道程序
- 采用通用寄存器Ro作为基址寄存器,用户指定通用寄存器,Ro内容不变,形式地址可变
(8)变址寻址
- 采用IX或者通用寄存器作为变址寄存器
- EA=(IX)+A
- IX内容可变,形式地址不变
- 便于处理数组问题
(9)相对寻址
- EA=(PC)+A
- A相对于当前指令的位移量,用补码
- 便于程序浮动,广泛用于转移指令
(10)堆栈寻址
- 分为硬堆栈(由寄存器存储数据)和软堆栈(指定存储空间)
- 借助ESP寄存器
7.4 指令格式举例
- IBM 360
- Intel 8086:指令字长1~6个字节,地址格式包含零地址、一地址、二地址
7.5 RISC和CISC
7.5.1 RISC(精简指令集)
- 选用频度高的简单指令,复杂指令由简单指令来组合
- 指令长度固定,格式少
- 只有LOAD/STORE指令访存
- 采用流水技术,一个时钟周期完成一条指令
- 采用组合逻辑实现控制器
7.5.2 CISC(复杂指令集)
- 指令复杂庞大,长度不固定,各市多
- 访存指令不收限制
- 大多数指令需要多个时钟周期来执行
- 采用微程序控制器
7.5.3 处理器分类
- x86是CISC,ARM、MIPS和RISC-V是RISC
8.1 CPU的结构
8.1.1 CPU功能
8.1.2 CPU结构
8.2 指令周期
- 取出并执行一条指令所需的全部时间,包括取指周期、间址周期、执行周期和中断周期四个机器周期
- 间址周期是从内存中取出地址码的时间
- CPU周期又称机器周期,CPU完成基本操作所需用时,通常用内存读取一个字指令字的时间来表示
- 时钟周期又称震荡周期,是时钟频率(主频)的倒数,CPU完成最基本动作,最小单位,控制产生一个或多个并行的微操作命令
8.3 指令流水
8.3.1 提高机器速度
- 提高访存速度(Cache)
- 提高IO和主机之间的传送速度(中断、DMA、通道)
- 提高运算器速度(改进算法)
- 提高整机处理能力(开发系统的并行性)
8.3.2 系统的并行性
- 并发(同一时间段)和同时(同一时刻)
- 并行的等级:过程级(程序和进程,由软件实现)、指令级(指令内部和之间,由硬件实现)
8.3.3 指令流水原理
- 将指令周期划分为多个阶段,不同部件完成当前指令后不用等待,进入下一个指令
- 二级流水、多级流水
8.3.4 影响指令流水线性能的因素
- 结构相关:不同指令争用同一功能部件
- 数据相关:不同指令访问操作数时的冲突,使用旁路技术(也称前向通道)解决,不用等待写入主存或寄存器,直接送入下一个指令
- 控制相关:由条件转移指令引起,只有执行后才知道下一个指令是什么
8.3.5 流水线的多发技术
- 超标量技术:每个时钟周期内可并发多条指令
- 超流水线技术:一个时钟周期内再分段
- 超长指令字技术:由编译器挖掘指令的并行性,将多条指令组成一条多个操作码字段的超长指令字
8.3.6 流水线结构
- 指令流水线结构:对完成指令的周期分段
- 运算流水线结构:对运算周期进行分段
8.4 中断系统
8.4.1 引起中断的因素
- 人为设置的中断,如转管指令
- 程序性事故,如溢出,除法错误
- 硬件故障
- IO设备
- 外部事件,如键盘中断程序
8.4.2 中断请求标记和中断判优逻辑
- 一个请求源对应一个INTR中断请求标记触发器
- 中断判优逻辑接口电路
8.4.3 中断服务程序入口地址查询
- 硬件向量法
- 软件查询法
8.4.4 中断响应
(1)响应中断的条件
- CPU允许中断触发器EINT=1
(2)响应中断的时间
- 指令执行周期结束时刻由CPU发查询信号至各个INTR
(3)中断隐指令:不是指令,由硬件直接实现
- 保护程序断点:存于特定地址内或者进栈
- 寻找服务程序入口:硬件向量法(PC=向量地址)或者软件查询法(PC=中断识别程序入口地址)
- 硬件关中断EINT=0
8.4.5 保护现场和恢复现场
(1)保护现场
- 保护断点,由中断隐指令完成
- 保存寄存器内容,由中断服务程序完成
(2)恢复现场
- 由中断服务程序完成
8.4.6 多重中断
(1)概念
- 执行中断服务程序过程中,收到更重要的中断请求
(2)实现多重中断的条件
- 提前开中断
- 优先级高的中断源有权中断优先级低的中断源
(3)屏蔽技术
- 通过屏蔽触发器,设置中断屏蔽字,调整中断的优先级
- 只能改变处理的优先级,不能改变响应的优先级
- 流程:保护现场->置屏蔽字->开中断->中断服务->关中断->恢复现场->恢复屏蔽字->开中断->中断返回
9.1 微操作命令的分析
- 一条指令的四个周期内所要做的微操作命令
- 微操作命令:可以理解为针对寄存器和存储器的基本操作
9.2 控制单元
- 控制方式:产生不同微操作命令序列所用的时序控制方式
(1)同步控制方式:任一微操作由统一基准时序信号控制
(2)异步控制方式:采用应答方式(如IO操作)
(3)联合控制方式
(4)人工控制方式:Reset、停机开关
10.1 组合逻辑设计
- 控制器的设计分为组合逻辑设计(RISC)和微程序设计(CISC)
(1)组合逻辑设计步骤
-
安排微操作时序
-
列出操作时间表(在哪个节拍执行哪些微操作,哪些指令会用到)
-
写出微操作命令的最简表达式(在什么条件下会用到该微操作命令)
-
画出逻辑图
(2)微程序设计思想
- 一条机器指令由多个微操作命令组成,将同一节拍内的几个并行的微操作命令组成微指令
- 微指令(例10100000)为1的部分表示在当前节拍为高电平时有效的微操作命令
- 微指令组成微程序,一条机器指令对应一个微程序,存入控制存储器(ROM)
- 设计思想为存储逻辑
(3)微程序控制单元的基本框图