- 1 计算机系统概论
- 1.1 计算机系统简介
- 1.1.1 计算机的软硬件概念
- 1.1.2 计算机系统的层次结构
- 1.2 计算机的基本组成
- 1.2.1 冯诺依曼计算机特点
- 1.3 计算机硬件的只要技术指标
- 1.3.1 机器字长
- 1.3.2 运算速度
- 1.3.3 存储容量
- 2 系统总栈
- 2.1 总线的基本概念
- 2.2 总线的分类
- 2.3 总线特性及性能指标
- 2.3.1 总线标准
- 2.3.2 总线的性能指标
- 2.4 总线结构
- 2.5 总线控制
- 2.5.1 总线判优控制
- 2.5.2 总线通信控制
- 3 存储器
- 3.1 概述
- 3.1.1 存储器分类
- 3.1.2 存储器的层次结构
- 3.2 主存储器
- 3.2.1 概述
- 3.2.2 半导体存储芯片简介
- 3.3 随机存取存储器RAM(SRAM和DRAM)
- 3.3.1 SRAM:静态RAM(双稳态触发器原理)
- 3.3.2 DRAM:动态RAM(栅极电容)集成度高、功耗低
- 3.3.3 动态RAM与静态RAM的比较
- 3.4 只读存储器(ROM)
- 3.4.1 五种ROM
- 3.5 存储器与CPU的连接
- 3.5.1 存储器与容量的扩展
- 3.5.2 存储器与CPU的连接
- 3.5.3 例题
- 3.5.4 存储器的校验
- 3.6 提高访存速度的措施
- 3.7 高速缓冲存储器Cache
- 3.7.1 Cache的工作原理
- 3.7.2 Cache的基本结构
- 3.7.3 Cache的读写操作
- 3.7.4 Cache—主存的地址映射
- 3.7.5 替换算法
- 3.8 辅助存储器
- 3.8.1 虚拟存储器
- 4 输入输出系统
- 4.1 概述
- 4.2 I/O接口
- 4.3 I/O控制方式
- 4.3.1 程序查询方式
- 4.3.2 中断的作用及原理
- 4.3.3 多重中断
- 4.3.4 程序中断方式
- 4.3.5 DMA方式
- 5 计算机的运算方法
- 5.1 无符号数和有符号数
- 5.1.1 进位计数制
- 5.1.2 BCD码
- 5.1.3 无符号整数的表示和运算
- 5.1.4 带符号整数的表示和运算
- 5.1.5 定点小数
- 5.2 算术逻辑单元
- 5.2.1 电路基本原理+加法器设计
- 5.2.2 并行进位加法器
- 5.2.3 补码加减运算
- 5.2.4 标志位的产生
- 5.2.5 定点数的移位运算
- 5.2.6 原码的乘法运算
- 5.2.7 补码的乘法运算
- 5.3 浮点四则运算
- 5.3.1 浮点数的表示
- 5.3.2 IEEE 754 标准
- 5.3.3 浮点数的运算
- 6 指令系统
- 6.1 机器指令
- 6.1.1 指令格式
- 6.1.2 扩展操作码
- 6.2 寻址方式
- 6.2.1 指令寻址
- 6.2.2 数据寻址
- 6.3 RSIC
- 7 中央处理器
- 7.1 CPU的结构
- 7.1.1 运算器的基本结构
- 7.1.2 控制器的基本结构
- 7.2 指令执行过程
- 7.2.1 指令周期的概念
- 7.2.2 数据流
- 7.2.3 指令执行方案
- 7.3 数据通路的功能和工作原理
- 7.4 指令流水线
注:本文前三章和书本顺序一致,但是由于后四章没有跟着老师学,跟着王道课程学的,因此后四章顺序和王道书一致
1 计算机系统概论
1.1 计算机系统简介
1.1.1 计算机的软硬件概念
- 计算机系统:硬件、软件
- 硬件五大部件:三器两设备—运算器、控制器、存储器、输入设备、输出设备
- (中央处理器)CPU = 运算器 + 控制器
- 软件:系统软件、应用软件
- 现代计算机框图:
1.1.2 计算机系统的层次结构
- 源程序:用户用高级语言编写的程序
- 高级语言源程序编译成的目标程序,只能在本机器上运行
1.2 计算机的基本组成
1.2.1 冯诺依曼计算机特点
- 计算机由五大部件组成(现代计算机是以存储器为中心)
- 冯诺依曼存储程序的思想:数据和程序都存储在存储器
1.3 计算机硬件的只要技术指标
1.3.1 机器字长
机器字长是指CPU一次处理数据的位数,通常与CPU的寄存器位数有关
通用机器字长 = 通用寄存器长度
1.3.2 运算速度
- 主频(时钟周期(Cycle) = 1/主频)
- 吉普森法
- MIPS:每秒执行百万条指令 (Million Instruction per Second),和频率相关
- CPI:执行一条指令所需要的时钟周期 (Cycle Per Instruction) / 每一条指令的平均执行时间
- FLOPS:每秒浮点运算次数(Float Operation Per Second)
1.3.3 存储容量
- 定义:存放二进制信息的总位数
- 存储单元个数和地址位数有关,假如地址位数为n,则存储位数为2^n
- 例题:一个16K x 32位的存储器,其地址线和数据线的总和是()
2^14=16k,所以MAR=14,MDR=32,所以答案为:14+32=46
- 例题:微机A和B是采用不同主频的CPU芯片,片内逻辑电路完全相同。
(1)若A机的CPU主频为8MHz,B机为12MHz,则A机的CPU时钟周期为多少?
(2)若A机的平均指令执行速度为0.4MIPS,那么A机的平均指令周期为多少?
(3)B机的平均指令执行速度为多少?
(1) A时钟周期=1/主频=1/8M=0.125us
(2) 每秒可以执行0.4MIPS //速度A平均指令周期=1/0.4M=2.5us //执行一条指令需要多少时间
(3) A和B片内逻辑电路完全相同,执行一条指令所需要的时钟周期数相同,即CPI相同主频不同,不影响CPI,只影响一个周期的时间A机CPI=2.5us/0.125us=20B机CPI=20B机主频为12MHZ,即每秒12M个时钟周期平均指令执行速度=12M/20=0.6MIPS
2 系统总栈
2.1 总线的基本概念
总线:连接各个部件的信息传输线,是各个部件共享的传输介质
2.2 总线的分类
- 片内总线:芯片内部的总线
- 系统总线:计算机各部件(五大部件)之间的信息传输线
按照传输信息类别的不同可分为三类:
数据总线(双向)
地址总线(单向)
控制总线(有出有入) - 通信总线,传输方式可分为串行通信总线和并行通信总线
2.3 总线特性及性能指标
2.3.1 总线标准
- ISA 及其扩展
- PCI:并行,即插即用,支持突发工作方式
- USB:串行,即插即用
2.3.2 总线的性能指标
- 总线宽度:数据线的根数
- 标准传输率(总线带宽):每秒传输的最大字节数(MBps)
2.4 总线结构
-
例题1:计算机使用总线结构的主要优点是便于实现积木化,同时©
A 减少了信息传输量 B 提高了信息传输的速度 C 减少了信息传输的速度 D 加重了CPU的工作量 -
例题2:计算机使用总线结构的主要优点是便于实现积木化,同时© 。
A 减少了信息传输量 B 提高了信息传输的速度 C减少了信息传输线的条数 D加重了CPU的工作量 -
系统总栈是指(D)
A 运算器、控制器、寄存器之间的连接部件
B 运算器、寄存器、主存之间的连接部件
C 运算器、寄存器、外围设备之间的连接部件
D CPU、主存、外围设备之间的连接部件
2.5 总线控制
2.5.1 总线判优控制
总设备(模块):对总线有控制权
从设备(模块):响应从主设备发来的总线命令
三条总线仲裁的辅助线:BS总线忙、BR总线请求、BG总线同意
- 集中式
- 链式查询:仅需要常数根线
- 计数器定时查询
2.1 计数从0开始,则优先级从0到n降序
2.2 计数从上次终点开始,则优先级相等
2.3 需要 log2n 条地址线,其中n为设备数目 - 独立请求方式
3.1 响应快速,控制复杂
3.2 需要 2n 根线(但不会增加处理机开销)
- 分布式
- 自举式
- 冲突检测式:常用于网络
2.5.2 总线通信控制
目的:解决通信双放协调配合的问题
总线传输周期的四个阶段:
- 申请分配阶段
- 寻址阶段
- 传输阶段
- 结束阶段
总线通信的四种方式
- 同步通信
- 异步通信
波特率:单位bps(位每秒),波特率 > 比特率 - 半同步通信
- 分离式通信
3 存储器
3.1 概述
3.1.1 存储器分类
- 按存储介质分类:
半导体存储器(易失)、磁表面存储器、磁芯存储器、光盘存储器 - 按存取方式分类
(1)存取时间与物理地址无关(随机访问):随机存储器RAM、只读存储器ROM
(2)存取时间与物理地址有关(串行访问):顺序存取存储器—磁带、直接存取存储器—磁盘 - 按在计算机中的作用分类
3.1.2 存储器的层次结构
缓存容量小,速度高; 主存容量大,速度低
CPU和辅存之间没有数据通道
- 例题
3.2 主存储器
3.2.1 概述
- 主存的基本组成: 以存储器为中心, 其X轴依次是 读写电路, MDR, 数据总线…其Y轴依次是驱动器, 译码器, MAR, 地址总线.
- 主存中存储单元地址的分配
(1)每一行是一个存储字,字有两个字节组成;
(2)对字节编址时,在右边给一个相对较小的编号;
(3)字地址的编号取得是最右侧地址作为字节地址。
3. 主存的技术指标
(1)存储容量:主存存放二进制代码的总位数
(2)存储速度:存取时间、存取周期(连续两次独立的存储器操作所需的最小间隔时间,一次完整的读写操作所需的最小时间间隔)
(3)存储器的带宽(数据传输率 bit/s )
3.2.2 半导体存储芯片简介
- 存储芯片的容量由地址线和数据线的位数共同决定
- 存储芯片·1片选线的作用
(1)例:用16K x 1位的存储芯片组成64K x 8 位的存储器 - 译码驱动方式: 线选法, 重合法
(1)首先将011转为十进制,为3
(2)Y3处为1,其余为0
3.3 随机存取存储器RAM(SRAM和DRAM)
3.3.1 SRAM:静态RAM(双稳态触发器原理)
虚线框里面的为基本电路,可以存放一个二进制
T1-T4组成了一个触发器
T5、T6:控制门管(若T5、T6被断开内部则无法选中)
Z:字线(选择存储单元)
静态RAM(SRAM)芯片举例:Intel 2114外特性
1. 通过控制位线电平,来控制写入状态T1导通,T2截止 写1T1截止,T2导通 写0
2. 通过读取位线电流,来读取状态位线1有电流,位线2无电流 读1位线2有电流,位线1无电流 读0
3. 写步骤(此时有电压差走交叉线路):① 字线给高电平(T5、T6都导通)② 根据要写入的状态给两位线不同电平(H高L低)
4. 读步骤(此时无电压差走耦合线路) :① 字线给高电平(T5、T6都导通)② 两位线都给高电平③ 检测电流
3.3.2 DRAM:动态RAM(栅极电容)集成度高、功耗低
- 读1:MOS管接通,电容放电,数据线上产生电流(电容放电是破坏性读出,还需重写操作),在对破坏性读出的的存储器进行读写操作时,为维持原来保存的信息不变,必须辅以再生操作
- 读0:MOS管接通后,数据线上无电流
地址送两次,一次行地址,一次列地址//行列地址是分开传送的
-
动态RAM的读写时序
-
动态RAM刷新
刷新与行地址有关
“死区”为:0.5 us×128= 64 us
死时间率”为:128/4 000×100%=3.2%
3.3.3 动态RAM与静态RAM的比较
3.4 只读存储器(ROM)
3.4.1 五种ROM
-
掩模ROM(MROM)
行列选择线交叉处有"MOS"管为"1"
行列选择线交叉处无"MOS"管为"0" -
可编程ROM(PROM)(一次性编程)
熔丝连接为1,断开为0
-
EPROM(多次性编程,紫外线擦除)
-
EEPROM(电可擦除存储器)
电可擦写、局部擦写、全部擦写 -
闪速存储器
比EEPROM快,具备RAM功能
3.5 存储器与CPU的连接
3.5.1 存储器与容量的扩展
- 位扩展(数据线——增加存储字长)
各个存储芯片的片选线连在一起
解释:数据位扩展,多个芯片要同时工作,所以片选线要连在一起
如:用2片1K x 4位存储芯片组成1K x 8位的存储器(10根地址线,8根数据线) - 字扩展(地址线)
多个芯片的片选端,连接到扩展的地址线上
解释:多个芯片不能同时工作
如:用2片1K x 8位的存储芯片组成2K x 8位的存储器(11根地址线,8根数据线) - 字位扩展(增加存储字的数量)
先扩展位,再扩展字。
扩展的位相当于分好了列,扩展后的位数为一组,同一组的芯片片选线连到一起
把这几组的片选线,连接到扩展的地址线上(片选译码器分出多个信号)
如:用8片1K x 4位存储芯片组成4K x 8位的存储器(12根地址线,8根数据线)
3.5.2 存储器与CPU的连接
- 地址线的连接
- 数据线的连接
- 读/写命令线的连接
- 片选线的连接
- 合理选择存储芯片
系统程序区: ROM
其他:RAM - 其他 ,时序、负载
3.5.3 例题
主存地址空间分配:
系统程序区:6000H~67FFH
用户程序区:6800H~6BFFH
(1) 写出对应的二进制代码
(2)确定芯片的数量和类型
(3) 分配地址线
(4) 确定片选信号
74138译码器介绍
A,B,C 输入端口,输入二进制数;
Y0~Y7 输出端口,输出十进制数;
G1,G2A,G2B 片选端口,当以此为100时芯片选通,否则无法工作;
(1) 写出对应的二进制地址码
(2) 确定芯片的数量和类型
(3) 分配地址线
- 有一个 16K ×16位的存储器,由1K×4位的动态RAM芯片构成(芯片内是64×64结构),问:
(1) 总共需要多少RAM芯片?
(2) 存储体的组成框图。
(3) 采用异步刷新方式,如最大刷新间隔为2 ms,则相邻两行之间的刷新间隔是多少?
(4)如采用集中式刷新方式,存储器刷新一遍最少用多少刷新周期?设存储器的读写周期为0.5us,死区占多少时间?死时间率为多少?
(1)芯片1K×4位,片内地址线10位(A9--A0 ),数据线4位。芯片总数为:(16K×16)/(1K×4)=16×4=64片
(2)存储器容量为16K,故地址线总数为14位(A13─A0),其中A13A12A11A10通过 4:16译码器产生片选信号CS0─CS15
(3)采用异步刷新方式,在2ms时间内把芯片的64行刷新一遍,相邻两行之间的刷新间隔=2ms/64=31.25μs,可取的刷新间隔为31μs
(4)如果采用集中刷新方式,则存储器刷新一遍最少用64个存储周期,因为存储器的存储周期为0.5μs
则“死区”=0.5μs×64=32μs
“死时间率”=32μs/2000μs×100%=1.6%
- 有4个模块组成的四体存储器结构,每个体存储字长是32位,存取周期为200ns,每读一个字的时间怎么是200ns,假设数据总线宽度为32位,总线传输周期为50ns,试求顺序存储和交叉存储的存储器带宽。
存储器模块数为:n,存取周期为:T 总线传输周期:t 已知低位交叉的存储器,连续读取n个字所需要的时间t1为: T +(n-1)t
已知高位交叉的存储器,连续读取n个字所需要的时间t2为: nT
顺序存储和交叉存储连续读出4个字的信息量为324=128位
顺序存储存储器连续读出4个字的时间为:200ns4=800ns
交叉存储存储器连续读出4个字的时间为:200ns+50ns*(4-1)=350ns
顺序存储器的带宽为:128bit/800ns=16 * 10^7bps
交叉存储器的带宽为:128bit/350ns=37 * 10^7bps
3.5.4 存储器的校验
- 编码的最小距离
任意两组合法代码之间二进制位数的最小差异;
编码的纠错,检错能力与编码的最小距离有关;
汉明码就是具有一位纠错能力的编码; - 汉明码的组成
汉明码采用奇偶检验,分组校验;
汉明码的分组是一种非划分方式:
P1检测位—1,3,5,7
P2检测位—2,3,6,7
P4检测位—4,5,6,7 - 奇偶校验(高位放一位校验码)不能指出错误
(1)加上最高位,1的个数是奇数个是奇校验,1的个数是偶数个是偶校验
(2)添加冗余位之后,8个合法的,8个非法的
(3)码距:任意两个合法的编码之间的最小距离(最小码距)
(4)码距与编码系统的检错、纠错能力有关,见1。 偶校验只具有检错1位错误的能力,不具有纠错能力(2-1=D+C,D>=C,D=1, C=0) - 汉明码的纠错过程—形成新的检测位Pi
(1) 其位数与增添的检测位有关,如增添3位(k=3),新的检测位为P4 P2 P1
(2) 以 k=3 为例,P1=C1+3+5+7,P2=C2+3+6+7,P4=C4+5+6+7
(3) 对于按“偶检验”配置的汉明码,不出错时,P1=P2=P4=0 - 例题:求 0101 按“偶检验”配置的汉明码
C1检测位检测二进制序号为3、5、7的编码,有两个1,所以补一个0成偶数
C2检测位检测二进制序号为3、6、7的编码,有一个1,所以补一个1成偶数
C4检测位检测二进制序号为5、6、7的编码,有两个1,所以补一个0成偶数
因此汉明码为0100101
- 例题:已知接收到的汉明码为0100111(按配偶原则配置),试问要求传送的信息是什么
110=2^1 + 2^2=6,第六位出错
3.6 提高访存速度的措施
- 采用高速器件;
- 采用层次结构 Cache -主存;
- 调整主存结构:
(1) 单体多字系统—增加存储器的带宽
总线带宽=总线数据传输频率*数据总线位数
(2) 多体并行系统—高位交叉(顺序编址,各个体并行工作)、低位交叉(各个体轮流编址),低位交叉特点为,在不改变存取周期的前提下,增加存储器的带宽
(3) 存储器控制部件(存控)
3.7 高速缓冲存储器Cache
3.7.1 Cache的工作原理
- 作用:解决CPU–主存之间的速度矛盾
-
CPU可以不直接访问主存,而是直接与高速的Cache交换信息,找不到之后才去主存里面存取信息,主存的信息不仅要给CPU一份,还要给Cache一份进行存储
-
每一个小格子是一个存储单元(字),根据程序的局部性原理,可以将主存和缓存分为若干个块,每个块包含若干字,使他们大小相同。主存的地址分为两段,高m为主存的块地址,低b位表示块内地址。如下图将主存分为M个块,2m =M,2c= C,C必定远小于M
-
主存物理地址=块号+块内地址(就是把一串二进制数分成了两部分)
-
主存和缓存间对应块的大小都是相同的,校内地址也相同。主存和缓存间调用的是块,只调用不做修改。
-
工作原理: CPU想从主存中读取某一个字
(1) 所需要的字已经在cache中, 那么就直接访问cache.
(2) 所需要的字不在cache, 在主存内, 此时就将字所在的主存整个字块一次过调入到cache里面, 这样主存和cache就建立了映射关系.
- 命中和不命中
- 命中:主存块调入缓存,主存块与缓存块建立了对应关系的主存块号
- 未命中:主存块未调入缓存,主存块与缓存块未建立了对应关系的主存块号
- 命中率
- 命中率与Cache的容量和块长有关。
3.7.2 Cache的基本结构
- 地址总线上的地址传输的是主存地址
- 整个过程是由CPU完成的,是硬件完成的,而不是操作系统
- Cache的结构主要包括3部分:
- 数据存储体:用于存放主存数据的副本。
- 标记存储体:用于存放标记,不同类型的映射方式标记位数不同。因此,所需要的标记存储体的容量也不同。
- 有效位:用来标识存放在Cache中的数据是否有效,CPU查找Cache以及Cache更新时都需要使用有效位。
3.7.3 Cache的读写操作
写操作:Cache和主存的一致性
- 写直达法
写操作时数据既写入Cache也写入主存(始终保持一致)
写操作的时间就是访问主存的时间
缺点:增加了访存的次数 - 写回法
写操作时只需要把数据写入Cache而不写入主存,当Cache被替换出去时才写回主存
写操作时间就是访问Cache的时间(快)
缺点:成本高
3.7.4 Cache—主存的地址映射
- 直接映射
- 先根据地址中间的 c 位,找到对应 Cache 行并用主存地址高 t 位与 Cache 行标记进行比较,若相等且有效位为 1,则访问 Cache “命中”,此时根据主存地址中低位的块内地址在对应 Cache 行读取信息;若不相等或有效位为 0,则“不命中”,此时 CPU 从主存读出该地址所在的一块信息并调入对应的 Cache 行中,将有效位置 1,并将标记设置为地址的高 t 位,同时将该地址中的内容送入 CPU。
- 主存内可以分成很多个C块(组),每个组都可以完成Cache的分布,且在C块里面是1对1的,每一块主存块只能放入Cache块中的唯一位置。
- 按地址访问
- 主存物理地址=标记+Cache行号+块内地址
- 全相联映射
- 主存中地每一块可以装入 Cache 中地任何位置,每行地标记用于指出该行取自主存地哪一块,所以 CPU 访存时需要与所有 Cache 行标记进行比较,是按内容访问
- 主存物理地址=标记+块内地址
- 组相连映射
- 将 Cache 空间分成大小相同地组,主存地一个数据块可以装入一组内地任何一个位置,即组间采取直接映射,组内用全相联映射
- 组地址:一行是一组(几路组相连)
- 主存物理地址=标记+组号+块内地址
- Cache的计算
Cache的总容量 = 标记阵列 + cache的存储容量
- 例题1:有效容量为128KB的Cache,每块16B,采用8路组相连。字节地址为1234567H的单元调入该Cache,则其Tag应为?
字节地址为7个十六进制数,一个十六进制可以用四个二进制位表示,所以该字节地址一共可以用7*4=28个二进制位表示,所以主存物理地址为28位
Cache每块16B(默认按字节编址,1B对应一个地址),4个二进制位可以表示16个地址,所以块内有16个地址,可以用4个二进制位表示,块内地址为4
Cache行(块)数:128KB / 16B = ( 2^7^ x 2^10^ ) / 2^4^ = 2^13^ 块
8路组相连的话,8个块一组,组数=2^13^ / 8 =2^10^ 组
所以用10个二进制位就可以表示了
主存物理地址(28)=标记(14)+组号(10)+块内地址(4)
所以标记就是前14位,找1234567H的前14位
转成2进制位:0001 0010 0011 0100 0101 0110 0111
0111是块内地址,0001 0010 0011 01至此为标记的前14位,但是凑不成十六进制了,因此可以在前面加00,后面不可以,就像002=2,200≠2)
0000 0100 1000 1101变为十六进制:048DH
- 例题2:有一主存-Cache层次的存储器,其主存容量为1MB,Cache容量为16KB,每块有8个字,每字32位,采用直接地址映像方式,若主存地址为35301H,且 CPU访问Cache命中,则在Cache的第(A)(十进制表示)字块中( Cache起始字块为第0字块)
A. 152 B.153 C. 154 D. 151
主存物理地址(20)=主存字块标记()+Cache行号(?)+块内地址(5)
主存容量:1MB = 2^20B ,默认按字节编址,可以用20个二进制位表示,20位地址
Cache每块有8个字,每个字32位,一位是1B,所以8*32bit/1B(8bit)=32bit=2^5 ,可以用5个二进制位表示,所以块内地址是5
Cache行号=Cache块号=16KB/32B=2^9 ,所以9个
知道了块内地址是5,所以从后往前数9个
35301H 化为2进制:0011 0101 0011 0000 0001
0 0001是块内地址,01 0011 000为前9位,十进制为152
- 例题3:若计算机主存地址空间大小为 256MB,按字节编址,其数据 Cache 有 8 行,行长 64B,则:
1)采用直接映射方式,Cache 总容量是多少?
2)在直接映射方式下,主存地址为 3200(十进制)的主存块对应的 Cache 行号是多少?若采用二路组相联映射呢?
1)Cache容量=8*Cache行的位数(可以理解为每块的容量)
Cache行的位数=有效位(1bit)+标记位+数据位(Cache块位数))行长即数据块大小,主存和Cache是以数据块为单位进行数据交换的,主存块大小=Cache块大小行长为64B(数据块大小),默认按字节编址,64B=2^6 B,可以用6位二进制位表示,占6位,块内地址为6
主存容量256MB=2^28 B,默认按字节编址,一个B(字节byte)对应一个地址,所以256MB主存需要为28位地址那么采用不同的映射方式会对主存地址(28位)有不同的划分(本题是直接映射)cache
块: 块是一个固定大小的信息包,是cache和主存之间交换数据的最小单位
行: 行是cache的一个容器,存储块以及其他信息(例如有效位和标记位)
组: 组是一个或多个行的集合。在直接映射中一组由一行组成,组相联映射中一组由多行组成
因为一行总是存储一块,因此 “行” 和 “块” 通常互换使用由于Cache总共8行,占3位(LRU替换算法,淘汰最近最久未访问的Cache块,当一个分组内8个块已满时,要进行选择淘汰,8个块需用3位进行标记,因为LRU占3位)主存地址由tag、cache行号、cache块内地址组成
主存物理地址(28)=主存字块标记(19)+Cache行号(3)+块内地址(6)
数据位=数据块的数据位数=64个字*字长位数=64*8=512位
Cache每块容量=有效位(1bit)+标记位(19bit)+数据位(64B*8=512bit))2)直接映射方式下,主存依照 Cache 行大小进行划分,则主存地址 3200 对应的字块号为 3200B / 64B = 50
Cache 有 8 行,50 mod 8 = 2,因此对应的 Cache 行号为 2.
二路相联组映射,即将两个 Cache 行合并,组内全相联映射,组间直接映射,所以 50 mod 4 = 2 , 对应的组号为 2,即对应的 Cache 行号为 4 或 6.
- 例题4:假设主存容量为512K,Cache容量为4KB,每个字块为16个字,每个字32位
(1) Cache地址为多少位?可容纳多少块?
(2) 主存地址多少位 可容纳多少块?
(3) 在直接映射方式下,主存的第几块映射到Cache中始字块为第5块?(设起始字块为第一块)
(4) 画出直接映射方式下主存地址字段中各段的位数。
(1) Cache的容量为4KB=2^12B,Cache地址为12位
可容纳块数=2^12 / 2^4=2^8=64
(2) 主存的容量为512K=2^19,主存地址为19位
可容纳块数2^19 / (2^2 * 2^4)=2^13=8192块
(3) 在直接映射的方式下,i=j mod C,i是Cache的字块号,j是主存的字块号,C为Cache的字块数量为2^6=64块,主存的字块数量为8192块,i=5,主存的自块数分别是5,64+5,……
(4) 字块内地址:(16*32)/8=2^6,所以字块内地址为6位
Cache字块地址:12-6=6位
主存字块地址:19-12=7位
即可画图,图略
- 例题5:假设主存容量为512K×16位,Cache容量为4096 ×16位,块长为4个16位的字,访存地址为字地址。
(1)在直接映射方式下,设计主存的地址格式。
(2)在全相联映射方式下,设计主存的地址格式。
(3)在二路组相连映射方式下,设计主存的地址格式。
(4)若主存容量为512K×32位,块长不变,在四路组相联映射方式下,设计主存的地址格式。
(1)主存容量:512K=2^19B,主存地址位数为19位
Cache容量:4096=2^12,Cache位数为12位
Cache字块地址为:12-2=10位
访存地址为字地址,4=2^2,字块内地址为2位
主存字块标记:19-12=7位
画图即可(主存物理地址:主存字块标记+Cache字块地址+字块内地址)
(2)在全相连映射方式下,主存字块标记为19-2=17位,字块内地址为2位,画图即可
(3)二路组相连,r=1,主存字块标记:7+1=8位
组地址:10-1=9位
字块内地址:2位
主存物理地址=主存字块标记+组地址+自块内地址
(4)主存容量为512K×32位,块长为4个16位的字,则贮存容量可以写为1024Kx16,主存地址为:2^20,所以主存地址位数20位
四路组相连,r=2
组地址:10-2=8位
主存字块标记:20-8-2=10位
画图(主存物理地址=主存字块标记+Cache字块地址+字块内地址)
- 例题6:假设某机主存容量为16MB,cache的容量为8KB。每字块有8·个字,每字32位。设计一个四路组相联映射的cache组织。
(1)画出主存地址字段中各段的位数。
(2)设Cache初态为空,CPU依次从主存第0,1,2,…,99号单元读出100个字(主存一次读出一个字),并重复此次序读10次,问命中率是多少?
(3)若Cache的速度是主存速度的5倍,试问有Cache和无Cache相比,速度提高多少倍?
(4)系统的效率为多少?
3.7.5 替换算法
- 先进先出(FIFO)算法
- 近期最少使用算法(LRU算法)
3.8 辅助存储器
- 特点:不直接与CPU交换信息
- 磁表面存储器的技术指标
(1)记录密度:道密度D1=1/P(P是道距—相邻两条磁道中心线间的距离),位密度D2=位数/周长
在磁盘各磁道上所记录的信息量是相同的(每个磁道的存储容量是一样的),而位密度不同,内圈磁道的位密度大,技术难度更高,所以一般用内圈的位密度作为磁盘位密度
(2)存储总容量C=nks【n为存放信息的盘面数(如果说另外两侧盘面不能记录,nX2-2),k为每个盘面的磁道数,s为每条磁道上的记录的二进制代码数】
(3)平均寻址时间=平均找道时间+平均等待时间(旋转半圈的时间,最后×0.5)
(4)数据传输率
(5) 误码率:出错信息位数和读出信息的总位数之比 - 数据在盘片上的分布及磁盘地址定位
3. 硬磁盘存储器
(1)类型:固定磁头和移动磁盘、可换盘和固定盘
(2)存储器结构 - 例题1:假设磁盘存储器共有6个盘片,最外侧盘面不能记录,每面有204条磁道,没条磁道有12个扇段,每个扇段有512B,磁盘机以7200rpm速度旋转,平均定位时间为8ms。问:
(1)计算该磁盘存储器的存储容量
(2)计算该磁盘存储器的平均寻址时间
1. 盘面数量n=6 x 2 - 2,每个盘片两侧都有盘面,其中有两个盘面不能用磁盘存储器的存储容量C=nks=(6 x 2-2)x 204 x12 x 512B=12533760B
2. 平均寻址时间=平均找道时间+平均等待(旋转)时间平均找道时间=8ms平均等待时间(先化成r/ms,在转化成1圈多少ms,平均等待时间再乘0.5):1/7200 x 60 x 1000 x 1/2=4.17ms 平均寻址时间:8+4.17=12.17ms
- 例题2:一个磁盘组共11片,每片有203道,数据传输率为983040 Bps,磁盘组转速为3600 rpm。假设每个记录块有1024B,且系统可以挂16台这样的磁盘机,计算该磁盘存储器的总容量并设计磁盘地址格式。
磁盘存储容量C=(nks)
磁面数n=16 x(11x2-2)
磁道数k=203
每条磁道上的记录的二进制代码数s=每条磁道上的扇段数 X 每个扇段(记录块)所记录的字节数,但是没有给每条磁道上的扇段数
每条磁道上的扇段数只能根据数据传输率和转速算
老师说过,实在不知道怎么算就利用单位,B/S=r/S X B/r(我这个也不懂),B/r=B/s X s/r=983040 X 60 X 1/3600=16384
C=16 x(11x2-2) x 203 x 16384=1064304640B
磁盘地址格式为:台号+柱面号+盘面号+扇段号
16台这样的磁盘机=2^4,所以台号为4
每片有203道,最近256=2^8,所以柱面号8
盘面20,比他大且最接近32=2^5,所以扇面号5
扇段号=16384/1024=16=2^4,所以扇段号为4
3.8.1 虚拟存储器
- 例题
cache是纯硬件完成的,不需要处理器参与切换进程
4 输入输出系统
4.1 概述
-
输入输入系统的组成:
1. I/O软件:
①I/O指令
②通道指令:通道能识别的指令
2. I/O硬件: ①接口模块 ②I/O设备
3.I/O指令和通道指令的区别: 通道指令是自身的指令, 用来执行I/O操作, 而I/O指令是CPU指令系统的一部分. -
I/O设备与主机的联系方式
1. I/O设备编址方式
①统一编址: 全部放在内存里,将I/O设备看做是存储器的一部分, 所以将设备码看作是 地址码, 通过地址码访问I/O设备.
②不统一编址: 通过专用的I/O指令 才能访问I/O设备.
2.I/O设备寻址方式
①并行传输:适用近距离,速度快,效率不一定高
②串行传输:适用远距离
3.I/O设备与主机的联络方式(主机必须知道I/O设备当前什么状态才能够决定是否可以发送数据)
①立即响应方式: 只要CPU的I/O指令一到,设备就立即响应.(这样做的前提是, I/O设备已经处于等待状态)
②异步工作方式: I/O设备和CPU各自完成自身的任务, 一旦出现联络信号, 彼此才准备交换信息.
③同步工作方式: 要求I/O设备与CPU的工作速度完全同步, 发送有多快, 接收就要有多块.
5.I/O设备和主机之间的连接方式
①辐射式: 要求每一套I/O设备都要有一套控制线和一组信号线.
②总线式:现代计算机采用方式,所有设备都通过一套控制线和信号线与主机连接(共享)
-
常见的I/O设备:
- 输入设备:鼠标、键盘
- 输出设备:显示器、打印机
- 既可输入也可输出设备:硬盘、光盘
-
主机如何与I/O设备进行交互?
- I/O接口(USB接口):又称I/O控制器、设备控制器,负责协调主机与外部设备之间的数据传输
键盘插入电脑时需要插入USB插口,USB插口后部就有一个I/O设备,用来控制主机和键盘的数据交互
- 一般I/O控制器就是一块芯片,常被集成到主板上,通过主板上面的总线,和CPU\内存等进行连接
- I/O接口(USB接口):又称I/O控制器、设备控制器,负责协调主机与外部设备之间的数据传输
- I/O设备与主机交换信息的三种控制方式
- 程序查询方式
- 程序中断方式:
特点:
①程序中断方式消除了程序查询方式的踏步现象,提高了资源利用率
②占用CPU内部寄存器,消耗资源
过程:
① 中断现行程序
② 保护断点,保存状态至寄存器
③ 转至中断服务程序
④ 处理完后返回断点 - DMA方式:
①进一步提高资源利用率
②主存与I/O设备之间有一条数据通路
③CPU总是将总线占有权让给DMA,让一个机器周期(又称存取周期/窃取周期/挪用周期)
④DMA接口也是一种特殊的I/O控制器
4.2 I/O接口
-
作用
- 数据缓冲功能:通过数据缓冲寄存器(DBR)达到主机和外设工作速度的匹配
- 村务或状态监测:通过状态寄存器反馈设备的各种错误、状态信息,供CPU查用
- 控制和定时:接收从控制总线发来的控制信号、时钟信号
- 数据格式转换:串-并、并-串等格式的转换
- 与主机和设备通信:实现主机—I/O接口—I/O设备之间的通信
- 如何确定要操作的设备?
每个设备对应一组寄存器,操作不同的寄存器就是在操作不同的设备
-
接口与端口
-
I/O端口
- I/O端口是指接口电路中可以被CPU直接访问的寄存器
- 统一编址和独立编址
-
统一编址
(1)把I/o端口当做存储器的单元进行地址分配,用统一的访存指令就可以访问I/o端口,又称存储器映射方式
(2)靠不同的地址码区分内存和I/o设备,I/O地址要求相对固定在地址的某部分。
(3)优点:不需要专门的输入/输出指令,所有访存指令都可直接访问端口,程序设计灵活性高。端口有较大的编址空间
(4)缺点:端口占用了主存地址空间,使主存地址空间变小。外设寻址时间长(地址位数多,地址译码速度慢) -
独立编址
(1)IO端口地址与存储器地址无关,独立编址CPU需要设置专门的输入/输出指令访问端口,又称I/O映射方式
(2)靠不同的指令区分内存和I/o设备
(3)优点:使用专用I/O指令,程序编制清晰;I/O端口地址位数少,(地址译码速度快;I/O端口的地址不占用主存地址空间
(4)缺点:I/O指令类型少,一般只能对端口进行传送操作,程序设计灵活性差;需要CPu提供存储器读/写、/O设备读/写两组控制信号,增加了控制逻辑电路的复杂性
-
- I/O接口的类型
- 按照数据传送方式可以分为:
(1)并行接口:一个字节或一个字所有位同时传送
(2)串行接口:一位一位地传送 - 按主机访问I/O设备的控制方式可以分为:
(1)程序查询接口
(2)中断接口
(3)DMA接口 - 按功能选择的灵活性可以分为:
(1)可编程接口
(2)不可编程接口
4.3 I/O控制方式
4.3.1 程序查询方式
- 程序查询需要执行的三条指令
- 测试指令:查询I/O设备是否准备就绪
- 传送指令:准备就绪,执行传送指令
- 转移指令:未准备就绪,执行转移指令,再继续执行测试指令
- 查询多个设备时优先级标准为:先查速度快的,离CPU越近速度越快
- 计数值(保存在堆栈中): 将传送的数据长度保存为负数的补码形式,每次加一至溢出则结束
- 模拟:打印2个字符ab
1. 2个字符可能存在寄存器,也可能存在主存内,如果存在只存内,只需要对主存进行一次读主存操作即可假设a放在寄存器1中,b放在寄存器2中。
2. CPU向打印机发出打印的命令字(一串2进制):用OUT指令发出打印的命令—CPU通过地址线指明我要输出的I/O端口地址是Rn+1;CPU通过控制线指明此次对I/O端口写操作,要写的命令字数据只需要通过数据线传到Rn+1端口即可
3. 打印机对应的I/O接口(I/O控制逻辑电路)通过需要根据CPU发来的打印命令信号,通过控制线传输给打印机,启动打印机。启动后,打印机会通过状态线给I/O接口一个反馈,I/O接口发现打印机启动操作已经完成,I/O控制逻辑电路会给ready就绪这个状态信息存放在Rn+1接口(因为打印命令已经发出,所以没有必要继续存储了)
4. CPU采取程序查询方式,打印机通过OUT指令发出打印状态之后,CPU会一直循环检查状态寄存器是否已经变成了就绪的状态
6. CPU开始输出a字符,通过地址线指明操作Rn接口……
- 例题:在程序查询方式的输入/输出系统中,假设不考虑处理时间,每一个查询操作需要100个时钟周期,CPU的时钟频率为50MHz。现有鼠标和硬盘两个设备,而且CPU必须每秒对鼠标进行30次查询,硬盘以32位字长为单位传输数据,即每32位被CPU查询一次,传输率为2×220B/s。求CPU对这两个设备查询所花费的时间比率,由此可得出什么结论?
此时牵扯到一个知识点:CPU程序查询方式:在数据不丢失的情况下—定时查询(有间隔时间)和独占查询(100%的时间)
4.3.2 中断的作用及原理
- 中断的基本概念
- 程序中断是指在计算机执行现行程序的过程中,出现某些急需处理的异常情况或特殊请求,CPu暂时中止现行程序,而转去对这些异常情况或特殊请求进行处理,在处理完毕后CPU又自动返回到现行程序的断点处,继续执行原程序。
- 不同的中断请求,需要不同的中断程序处理
- 工作流程
(1)中断源向CPU发送中断请求信号
(2)中断响应
1. 响应中断的条件假如收到 关中断 的请求,那么CPU就不会响应中断
2. 中断判优:多个中断源同时提出请求时通过中断判优逻辑响应一个中断源
(3)中断处理
1. 中断隐指令:中断隐指令并不是一条具体的CPU指令因为不同的中断请求,需要不同的中断程序处理,所以需要通过隐指令的帮助把CPU的指令执行流转移到正确的中断服务程序
2. 中断服务程序
- 中断请求的分类
CPU如何分辨收到 关中断的信号呢
- 关中断的作用:实现原子操作
原子操作:一些指令要么不执行,要么一气呵成的执行完
IF=1表示开中断(允许中断)
IF=0表示关中断(不允许中断)
- 中断请求标记
(如何判断是哪个设备发来的中断信号)
- 每个中断源向CPU发出中断请求的时间是随机的。
- 为了记录中断事件并区分不同的中断源,中断系统需对每个中断源设置中断请求标记触发器INTR,当其状态为“1”时,表示中断源有请求。
- 这些触发器可组成中断请求标记寄存器,该寄存器可集中在CPU中,也可分散在各个中断源中
- 对于外中断,CPU是在统一的时刻即每条指令执行阶段结束前向接口发出中断查询信号,以获取i/o的中断请求,也就是说,CPU响应中断的时间是在每条指令执行阶段的结束时刻
- 关中断的作用:实现原子操作
- CPU响应中断必须满足以下3个条件:
1. 中断源有中断请求
2. CPU允许中断,即开中断
3. 一条指令执行完毕,且没有更紧迫的任务 - 中断判优—实现
如上图,有多个中断信号同时到来,先处理哪一个
- 中断判优既可以用硬件实现,也可用软件实现:
- 硬件实现是通过硬件排队器实现的,它既可以设置在CPU中,也可以分散在各个中断源中
- 软件实现是通过查询程序实现的。
- 中断判优—优先级设置
- 硬件故障中断属于最高级,其次是软件中断
- 非屏蔽中断优于可屏蔽中断
- DMA请求优于I/oO设备传送的中断请求
- 高速设备优于低速设备
- 输入设备优于输出设备
- 实时设备优于普通设备
- 中断判优既可以用硬件实现,也可用软件实现:
-
中断处理过程
- 中断处理过程—硬件向量法
注意区分向量地址(中断类型号)和中断向量
- 中断处理过程—中断服务程序
- 总结
- 中断处理过程—硬件向量法
4.3.3 多重中断
- 单重与多重中断
- 屏蔽字—中断屏蔽字(用来屏蔽某些中断的)
- 中断屏蔽技术
- 例题:设某机有4个中断源A、B、C、D,其硬件排队优先次序为A>B>C>D,现要求将中断处理次序改为D>A>C>B。
1)写出每个中断源对应的屏蔽字。
2)按下图所示的时间轴给出的4个中断源的请求时刻,画出CPU执行程序的轨迹。设每个中断源的中断服务程序时间均为20us。
4.3.4 程序中断方式
- 例题
- 解答第2题(第一题与本节无关)
- 解答第2题(第一题与本节无关)
4.3.5 DMA方式
DMA控制器通常是用来控制某些快设备(磁盘)
- CPU向DMA控制器指明要输入还是输出;要传送多少个数据;数据在主存、外设中的地址
- 传送前
- 接受外设发出的DMA请求(外设传送一个字的请求),并向CPU发出总线请求
- CPU响应此总线请求,发出总线响应信号,接管总线控剧权,进入DMA操作周期
- 传送时
- 确定传送数据的主存单元地址及长度,并能自动修改主存地址计数和传送长度计数
- 规定数据在主存和外设间的传送方向,发出读写等控制信号,执行数据传送操作
- 传送后—向CPU报告DMA操作的结束
- 传送前
-
DMA控制器内部结构
-
DMA传送过程
-
DMA方式的特点
- 主存和DMA接口之间有一条直接数据通路。
由于DMA方式传送数据不需要经过cPu,因此不必中断现行程序,I/O与主机并行工作,程序和传送并行工作。
- 它使主存与CPU的固定联系脱钩,主存既可被CPU访问,又可被外设访问。
- 在数据块传送时,主存地址的确定、传送数据的计数等都由硬件电路直接实现。
- 主存中要开辟专用缓冲区,及时供给和接收外设的数据。
- DMA传送速度快,CPU和外设并行工作,提高了系统效率。
- DMA在传送开始前要通过程序进行预处理,结束后要通过中断方式进行后处理。
- 主存和DMA接口之间有一条直接数据通路。
-
DMA传送方式
-
DMA方式中断方式
5 计算机的运算方法
5.1 无符号数和有符号数
在计算机中,用来表示主存地址的是无符号数
5.1.1 进位计数制
基数:每个数码位所用到的不同符号的个数,r进制的基础是r
-
r进制转化为十进制:
二进制—>十进制:101.1—> 1x22+0x21+1x20+1x2-1=5.5
八进制—>十进制:5.4—> 5x80+4x8-1=5.5
十六进制—>十进制:5.8—> 5x160+8x16-1=5.5还可以利用每个位置的权值计算,例如二进制10010010.110转化为十进制 权重:128 64 32 16 8 4 2 1 0.5 0.25 0.125 二进制:1 0 0 1 0 0 1 0.1 1 0 结果:128+16+2+0.5+0.25=146.75
-
二进制<—> 八进制、十六进制
1111000010.01101
- 二进制—>八进制
3位一组,每组转换成对应的八进制符号
001 111 000 010 . 011 010(不够分组,前面加0补齐)
1 7 0 2 . 3 2 - 八进制—>二进制
每位八进制对应的3位2进制
(251.5)8—>(010 101 001.101)2 - 二进制—>十六进制
四位一组,每组转换成对应的十六进制符号
0011 1100 0010 . 0110 1000
3 C 2 . 6 8 - 十六进制—>二进制
每位十六进制对应的4位二进制
(AE86.1)16—>(1010 1110 0110.0001)2
- 二进制—>八进制
-
各种进制的常见书写方式
-
十进制—>任意进制
短除法
拼凑法(如果给的十进制不大可以用这个方法)
-
真值和机器数
真值:符合人类习惯的数字
机器数:数字实际存到机器里的形式,正负号需要被“数字化”
5.1.2 BCD码
-
8421码—有权码
4个二进制位—>16种不同的状态
BCD码直接使用其中10种—>不同的映射方案
落在1010—10010的范围都可以+6进行修正
-
余3码:8421码+(0011)2—无权码
5.1.3 无符号整数的表示和运算
无符号整数:即自然数
C语言的无符号整数:
unsigned short a=1; //无符号整数(短整型,2B)
unsigned int b=2; //无符号整数(整型,4B)
提问
- 无符号整数,在计算机硬件内,如何表示呢?
- 无符号整数的加法、减法运算是怎么用硬件实现的呢?
- 无符号整数
- 无符号整数的表示
假如机器字长为8位—所以最多只能进行8位运算,即通用寄存只能存8位(现在的计算机机器字长通常是64或者32位)
- 全部二进制都是数值位,没有符号位,第 i 位的位权是2i-1
- n bit 无符号整数表示范围是0—2n-1,(2n-1是等比数列求和),超出则溢出,意味着该计算机无法一次处理这么多
- 可以表示最小的数,全0,可以表示最大的数,全1
- 无符号整数的加法运算:从最低位开始,按位相加,并往更高位进位
假如A-B=99-9- 减数B的变形
- 减法变加法
- 超出的1丢弃,不影响结果
- 无符号整数的表示
5.1.4 带符号整数的表示和运算
带符号整数,即“整数”,-2,-1,0,1……
C语言中的带符号整数:(位数不同,可表示的数值范围不同)
short a=1; //短整型,2B
int b=-2; //整型,4B
-
带符号整数的表示
原码、补码、反码(同一个含义,用不同的编码方式表示)
(假如机器字长为8位—所以最多只能进行8位运算,通用寄存只能存8位(现在的计算机机器字长通常是64或者32位),因此计算机硬件能支持的带符号整数位数有上限)
- 原码表示
- 原码的缺点:符号位不能参与运算,需要设计复杂的硬件电路才能处理,费钱!贵!
- 补码表示真值—符号位可以参与运算
以上是机算方法,且补码转反码不好计算(末位-1,减法不好计算)
那么我们可以:补码—原码—反码
- 原码表示
-
特性总结
原码表示:A=-64,B=-64会溢出,因为-127—127 补码表示:A=-64,B=-64不会溢出:因为范围是-128—127
-
移码
5.1.5 定点小数
定点数:定点整数(带符号整数)、定点小数
-
原码表示
原码—>反码—>补码、加减运算和整数一样
-
定点小数和定点整数区别
-
案例
5.2 算术逻辑单元
5.2.1 电路基本原理+加法器设计
- 算术逻辑单元(ALU)
5.2.2 并行进位加法器
-
串行进位的并行加法器
- 串行进位的并行加法器:把n个全加器串接起来,就可进行两个n位数的相加。
- 串行进位又称为行波进位,每一级进位直接依赖于前一级的进位,即进位信号是逐级形成的。
- 结论:第i位向更高位的进位C可根据被加数、加数的第1~i1位,再结合C。即可确定
5.2.3 补码加减运算
- 加法器原理
- 例题:A=1000,B=0111,Cin=0,则F=1111,Cout=0
- 例题:A=1000,B=0111,Cin=1,则F=0000,Cout=1
- 补码加减运算方法
- nbit补码X+Y。按位相加即可
- nbit补码X-Y:将补码Y全部按位取反,末位+1,得到[-Y]补,减法变加法
- 例:4bit补码,X=8,Y=7,X补=1000,Y补=0111
X+Y=1111B
X-Y=1000+(1000+1)=10001(最前面1溢出,丢弃) - 4bit补码,X=3,Y=4,X补=0011,Y补=0100
X+Y=0111B
X-Y=0011+(1011+1)=1111B
- 无符号整数的加减也可以用该电路实现
- 无符号整数X=8,Y=7,用4bit表示,,X=1000B,Y=0111B
X+Y=1111B=15D
X-Y=1000+(1000+1)=10001(最前面1溢出,丢弃)=1D**(正确)** - 无符号数X=3,Y=4,用4bit表示,X=0011B,Y=0100B
X-Y=0011+(1011+1)=1111B=15D**(错误)**
- 无符号整数X=8,Y=7,用4bit表示,,X=1000B,Y=0111B
- 例:4bit补码,X=8,Y=7,X补=1000,Y补=0111
5.2.4 标志位的产生
5.2.5 定点数的移位运算
- 原码的算数移位――符号位保持不变,仅对数值位进行移位。
- 右移
- 左移
- 右移
- 反码的算数移位
- 正数的反码和原码相同,因此移位运算也相同:
(1)右移:高位补0,低位舍弃
(2)左移:地位补0,高位舍弃 - 反码的算数移位—负数的反码数值为与原码相反,因此负数的反码的移位运算规则为:
(1)右移:高位补1,低位舍弃
(2)左移,低位补1,高位舍弃
- 正数的反码和原码相同,因此移位运算也相同:
- 补码的算数移位
- 正数与原码相同,移位运算相同
- 负数补码=反码末位+1,导致反码最右边几个连续的1都因为进位变成0,直到进位碰到第一个0为止
规律――负数补码中,最右边的1及其右边同原码。最右边的1的左边同反码
(1)右移(同反码):高位补1,低位舍弃
(2)左移(同原码):低位补0,高位舍弃
- 案例
-20X7
7D=111B=20+21+22
-20X(20+21+22)
20:不左移
21:左移1位
22:左移2位
- 逻辑移位
- 逻辑右移:高位补o,低位舍弃。
- 逻辑左移:低位补o,高位舍弃。
- 循环移位
5.2.6 原码的乘法运算
5.2.7 补码的乘法运算
后期再补
5.3 浮点四则运算
5.3.1 浮点数的表示
- 定点数的局限性
定点数可表示的数字范围有限,但我们不能无限制地增加数据的长度 - 浮点数的表示
但是对于b,阶码0,10对应真值+2
位数0.01001,对应真值为-(2-2+2-5)
b的真值=22X(-0.01001)=-1.001
1B的存储空间不够,最后一位1存不下,只能抛弃,但是精度降低,所以进行浮点数位数的规划进行优化
- 浮点数位数的规格化:规定尾数的最高数值位必须是一个有效值
b=21X(+0.10010)- 右规:当浮点数运算的结果尾数出现溢出(双符号位为01或10),可以挽救,将尾数算数右移一位,阶码加1。
- a=010;00.1100,b=010;00.1000,求a+b
a=22x00.1100,b=22X00.1000
a+b=22X(00.1100+00.1000)
=22X01.0100
=23X00.1010
- a=010;00.1100,b=010;00.1000,求a+b
- 右规:当浮点数运算的结果尾数出现溢出(双符号位为01或10),可以挽救,将尾数算数右移一位,阶码加1。
- 浮点数规格化的特点
5.3.2 IEEE 754 标准
移码:补码的基础上符号位取反(只能表示整数)
移码定义:移码=真值+偏置值
此处8位移码的偏置值=128D=10000000B,即2n-1,n指的是移码的总位数 2^7^=128
- 真值-127=-11111111B
移码=-1111111+100000000=00000001 - 真值-3=-11B
移码=-11+100000000=011111101
- 偏置值一般取2n-1,此时移码=补码符号位取反,但是也可以取其他值
- IEEE 754中偏置值=127D=01111111B,即2n-1-1
- 真值-128=-10000000B
移码=-10000000+01111111=11111111
在mod28,将被减数+28,被减数01111111+10000000=10111111,进行减法 - 真值-127=-1111111
移码=-111 1111+01111111=0000 0000
- 真值-128=-10000000B
- IEEE 754版本
- 由浮点数确定真值(阶码不是全0、也不是全1):
- 根据“某浮点数”确定数符、阶码、尾数的分布
- 确定尾数1.M(注意补充最高的隐含位1)
- 确定阶码的真值=移码-偏置值(可将移码看作无符号数,用无符号数的值减去偏置值)
- (一1)×1.MX2E-偏置值
- 由浮点数确定真值(阶码不是全0、也不是全1):
5.3.3 浮点数的运算
-
浮点数的加减运算步骤
- 对阶
小阶向大阶靠齐 - 尾数加减
- 规格化
- 舍入
计算机内部浮点数的尾部比特位有限 - 判溢出
-
例题:已知二进制X=-5/256,Y=+59/1024,按机器补码浮点运算规则计算X-Y,结果用二进制表示,浮点数格式如下:阶码取两位,阶码取3位,数符取2位,尾数取9位
0.转换格式,并用补码表示阶码和尾数5D=101B,1/256=2^(-8)X=-101 X 2^(-8)=-0.101 X 2^(-5)=-0.101 X 2^(-101)阶码补码:1011,双符号位补码:11011尾数补码:1.011,双符号位补码:11.011,扩展:11.011000000X=11011,11.01100000059D=111011B,1/1024=2^(-10)Y=+111011 X 2^(-10)=+0.111011 X 2^(-4)=+0.111011 X 2^(-100)阶码补码:1100,双符号位补码:11100尾数补码:0.111011,双符号位补码:00.000101,扩展:00.111011000 1. 对阶使两个数的阶码相等,小阶向大阶看齐,尾数每右移一位,阶码+1 333(2)对阶:令X向右移一位,阶码+1X=11011,11.011000000X=11100,11.101100000X=0.0101 X 2^(-100) 2. 尾数加减-Y=11100,11.000101000 X+[-Y]=10.110001000发生溢出X-Y=-1.001111X2^(-100),定点数>1,无法表示X-Y=11100,10.110001000 3. 规格化(右规,高位空位补1,双符号位最高位是正确的符号)X-Y=11101,11.011000100X-Y=-0.1001111X2^(-011) 4. 舍入——无舍入(右移已经抛弃了一个0,不影响) 5. 判溢出(常阶码,双符号位相同,无溢出) 结果真值:2^(-3)X(-0.1001111)2
- 例题2: 按机器数补码浮点运算步骤计算
x=2-011 x 0.101100,y=2-010 x (-0.011100)
- 对阶
-
浮点数的加减运算——舍入
- “0”舍“1”入法:类似于十进制数运算中的“四舍五入”法,即在尾数右移时,被移去的最高数值位为0,则舍去;被移去的最高数值位为1,则在尾数的末位加1。这样做可能会使尾数又溢出,此时需再做一次右规。
- 恒置“1”法:尾数右移时,不论丢掉的最高数值位是“1”还是“O”,都使右移后的尾数末位恒置“1”。这种方法同样有使尾数变大和变小的两种可能。
- 加减结果为11100,10.110001011
- (0舍1入):11100,11.011000110
- (横置1):11101,11.011000101
-
强制类型转换
6 指令系统
6.1 机器指令
6.1.1 指令格式
-
指令:定义—是指示计算机执行某种操作的命令,是计算机运行的最小功能单位。
指令:操作码+地址码 -
一台计算机的所有指令的集合构成该机的指令系统,也称为指令集。
-
注:一台计算机只能执行自己指令系统中的指令,不能执行其他系统的指令。
-
指令的分类
- 按照操作码长度分类
- 定长操作码:指令系统中所有指令的操作码长度都相同
n位→2n条指令(控制器的译码电路设计简单,但灵活性较低) - 可变长操作码:指令系统中各指令的操作码长度可变
(控制器的译码电路设计复杂,但灵活性较高) - 扩展操作码指令格式:定长指令字结构+可变长操作码
- 定长操作码:指令系统中所有指令的操作码长度都相同
- 按指令长度分类
- 指令字长:一条指令的总长度(可能会变)
机器字长:CPu进行一次整数运算所能处理的二进制数据的位数(通常和ALu直接相 关)
存储字长:一个存储单元中的二进制代码位数(通常和MDR位数相同) - 半字长指令、单字长指令、双字长指令――指令长度是机器字长的多少倍
指令字长会影响取指令所需时间。如:机器字长=存储字长=16bit,则取一条双字长指令需要两次访存 - 分类:
1. 定长指令字结构:指令系统中所有指令的长度都相等
2. 变长指令字结构:指令系统中各种指令的长度不等
- 指令字长:一条指令的总长度(可能会变)
- 根据地址码数目不同
- 零地址指令OP
(1)不需要操作数,如空操作、停机、关中断等指令
(2)堆栈计算机,两个操作数隐含存放在栈顶和次栈顶,计算结果压回栈顶 - 一地址指令OP+A1
(1)只需要单操作数,如+1,减1,取反、求补等
OP(A)→A
(2)需要两个操作数,但其中一个操作数隐含在某个寄存器(如隐含在ACC)
(ACC)OP(A1)→ACC
3. 二地址指令—常用于需要两个操作数的算术运算、逻辑运算相关指令
(1)指令含义:(A1)OP(A2)→A1
(2)完成一条指令需要访存4次,取指→读A1→读A2→写A1 - 三地址指令—常用于需要两个操作数的算术运算、逻辑运算相关指令
(1)指令含义:(A1)OP(A2)→A3
(2)完成一条指令需要访存4次,取指→读A2→读A3→写A3
4. 四地址指令
(1)指令含义:(A1)OP(A2)→A3,A4=下一条将要执行指令的地址
(2)完成一条指令需要访存4次,取指→读A1→读A2→写A3
正常情况下:取指令之后PC+1,指向下一条指令
四地址指令:执行指令后,将PC的值修改位An所指地址
- 零地址指令OP
- 按操作了类型分类
- 按照操作码长度分类
6.1.2 扩展操作码
-
概念:
定长指令字结构+可变长操作码→扩展操作码指令格式(不同地址数的指令使用不同长度的操作码)
-
例如(再此给出一种方法)
假设指令字长16位,每个地址码占4位:设置一个三地址地址,那么只需要3*4=12位,剩下4位作为操作码
-
前四位为基本操作码字段OP,另有3个4位长的地址字段A1、A2和A3
-
4位基本操作码若全部用在三地址指令,24即有16条。
但是如果我们还想设置一地址、二地址、零地址
那么,至少还需要将1111留作扩展操作码之用,即三地址指令为15条
-
1111 1111留作扩展码之用,因此二地址指令为15条
开头四位全部都是1111,那么CPU在读取指令的时候,就能根据前面是否为全1,来判断是否为三地址指令,如果CPU发现开头4位是全1,后面4位不是全1,那么就是二地址指令
-
1111 1111 1111留作扩展操作之用,一地址指令为15条
-
零地址指令为16条
前面12位都是1,即零地址指令,后面4位就可以从0000—1111,不需要扩展了,一共16条
-
-
在设计扩展操作码指令格式时,必须注意以下两点:
- 不允许短码是长码的前缀,即短操作码不能与长操作码的前面部分的代码相同—
三地址指令操作码只有4位,是短操作码,二地址指令操作码为8位,是长操作码。因此三地址指令的操作码不能和二地址指令的前四位操作码(1111)相同
- 各指令的操作码一定不能重复。
- 不允许短码是长码的前缀,即短操作码不能与长操作码的前面部分的代码相同—
通常情况下,对使用频率较高的指令,务配较短的操作码对禧用频率较低的指令,分配较长的操作码,从而尽可能减少指令译码和分析的时间
- 例:另外一种扩展操作码的方法
设指令字长为16位,试设计一套指令系统满足:
(1)有15条三地址指令(3*4=12,需要保留后面的12位作为地址,开头4位表示操作码0000—1110共15种状态,留下4个全1作为扩展码)
(2)有12条二地址指令(开头4个比特一定是全1,只需要保留2个地址2*4=8,因此智能用1111后面的4位表示12条二进制指令0000—1011(十进制也就是0—11),我们会发现剩下的四种状态是1100,1101,1110,1111,最高两位都是全1,所以开头如果有6位全1,那么一定超出了二地址指令的范围)
(3)有62条一地址指令(一地址指令只需要保留后面4位作为地址,中间6个比特可以表示0-61这62种状态,000000—111101)
(4)有32条零地址指令(如果前面11位是全1,那么就超出了一地址指令的范围,是零地址指令,剩下5个比特刚好能表示0—31)
- 计算
设地址Wi长度为n,上一层流出m种状态,下一层可扩展出mX2n种状态 - 总结小tips
6.2 寻址方式
6.2.1 指令寻址
指令寻址:顺序寻址、跳跃寻址
指令寻址:如何确定下一步指令的存放地址(始终都是由程序计数器PC给出)
顺序寻址:(PC)+“1”—> PC 这里的1理解为1个指令字长,实际加的值会因指令长度、编址方式而不同
跳跃寻址:由转移指令给出(直接修改PC的值)
每一条指令的执行都分为“取指令”、“执行指令”两个阶段
6.2.2 数据寻址
数据寻址:确定本条指令的地址码指明的真实地址(一共10种)
若初始地址为100,想要跳转到LDA的指令,对于地址为107指令寻址来说是7xxxxxx,显然不对。
- 我们如何解读第二幅图的7呢?即基于100这个初始地址的偏移量(100+7),跳转到LDA的这个指令
基于程序的起始地址往后偏移多少位置
- 如何解读第三幅图的3呢?即就PC所指向的这个104这个地址,向后偏移3个(104+3),跳转到LDA的这个指令
基于PC程序计数器往后偏移多少位置
发现:之前给出的指令由操作码和地址码组成,但是数据的寻址方式(地址码的解读方式有多种),那么如何区分一条指令的地址码用哪种方式解释呢?一般是在地址码前面增加4个比特位(寻址方式位)用来标识地址码用什么样的寻址方式(数据寻址特征)
假设:
- 指令字长=机器字长=存储字长
- 操作数为3
-
数据寻址方式(先给出6种)
-
直接寻址: 指令字中的形式地址A就是操作数的真实地址EA,即EA=A
操作码为取数指令LDA,形式地址A为主存的真实地址,通过A找到存放0...011的操作数,取到ACC累加寄存器中
- 一条指令执行的访存次数:取指令访存1次、执行指令访存1次,暂不考虑存结果(写入寄存器不算访存)共访存2次
- 优点:简单,指令执行阶段仅访问一次主存,不需专门计算操作数的地址。
CPU直接把指令里面给出的地址放到MAR存储器的地址寄存器中即可,不需要任何地址的转换
- 缺点:A的位数决定了该指令操作数的寻址范围。操作数的地址不易修改。
-
间接寻址: 指令的地址字段给出的形式地址不是操作数的真正地址,而是操作数有效地址所在的存储单元的地址,也就是操作数地址的地址,即EA=(A)。
形式地址A指向某一个存储单元,存储单元里面的地址才是操作数的真实地址
- 一条指令执行的访存次数:取指令访存1次、执行指令访存2次,暂不考虑存结果共访存3次
- 优点:
可扩大寻址范围(有效地址EA的位数大于形式地址A的位数)。
便于编制程序(用间接寻址可以方便地完成子程序返回)。 - 缺点:指令在执行阶段要多次访存(一次间址需两次访存,多次寻址需根据存储字的最高位确定几次访存)。
-
**寄存器寻址:**在指令字中直接给出操作数所在的寄存器编号,即EA =Rj,其操作数在由Rj所指的寄存器内。
- 一条指令执行的访存次数:取指令访存1次、执行指令访存0次,暂不考虑存结果共访存1次
- 优点:指令在执行阶段不访问主存,只访问寄存器,指令字短且执行速度快,支持向量/矩阵运算。
- 缺点:寄存器价格昂贵,计算机中寄存器个数有限
-
寄存器间接寻址: 寄存器Ri中给出的不是一个操作数,而是操作数所在主存单元的地址,
即EA=(Ri)。
- 一条指令执行的访存次数:取指令访存1次、执行指令访存1次,暂不考虑存结果共访存2次
- 特点:与一般间接寻址相比速度更快,但指令的执行阶段需要访问主存(因为操作数在主存中).
- 隐含寻址:不是明显地给出操作数的地址,而是在指令中隐含着操作数的地址。
- 优点:有利于缩短指令字长
- 缺点:需增加存储操作数或隐含地址的硬件
- 立即寻址: 形式地址A就是操作数本身,又称为立即数,一般采用补码形式。#表示立即寻址特征。
LOAD # 985(985)是立即数,而不是地址
- 一条指令执行的访存次数:取指令访存1次、执行指令访存0次,暂不考虑存结果共访存1次
- 优点:指令执行阶段不访问主存,指令执行时间最短
- 缺点:如A的位数为n,且立即数采用补码形式,可表示的数据范围为-2n-1~2n-1
-
-
数据寻址方式(三种区别在于偏移的“起点不一样”,统称—偏移寻址)
-
基址寻址:将CPU中基址寄存器(BR) 的内容加上指令格式中的形式地址A,而形成操作数的有效地址,即EA=(BR)+A
以程序的起始存放地址作为“起点”
ALU:加法运算器- 优点:
便于程序“浮动”,方便实现多道程序并发运行
- 可扩大寻址范围(基址寄存器的位数大于形式地址A的位数)﹔
- 用户不必考虑自己的程序存于主存的哪一空间区域,故有利于多道程序设计,以及可用于编制浮动程序(整个程序在内存里边的浮动)
- 注意:
- 其中R0需要用几个bit指明寄存器,需要通用寄存器的维数位数判断
- 基址寄存器是面向操作系统的,其内容由操作系统或管理程序确定。在程序执行过程中,基址寄存器的内容不变(作为基地址),形式地址可变(作为偏移量)。
- 当采用通用寄存器作为基址寄存器时,可由用户决定哪个寄存器作为基址寄存器,但其内容仍由操作系统确定。
-
变址寻址:有效地址EA等于指令字中的形式地址A与变址寄存器x的内容相加之和,即EA= (IX)+A,其中Ix可为变址寄存器(专用),也可用通用寄存器作为变址寄存器
程序员自己决定从哪里作为“起点”
- 注:变址寄存器是面向用户的,在程序执行过程中,变址寄存器的内容可由用户改变(lx作为偏移量),形式地址A不变(作为基地址)。
基址寻址中,BR保持不变作为基地址,A作为偏移量
A是相对于下一条指令的存放地址的位移量
- 注:变址寄存器是面向用户的,在程序执行过程中,变址寄存器的内容可由用户改变(lx作为偏移量),形式地址A不变(作为基地址)。
-
相对寻址:把程序计数器PC的内容加上指令格式中的形式地址A而形成操作数的有效地址.即EA=(PC)+A,其中A是相对于PC所指地址的位移量,可正可负,补码表示。
以程序计数器PC所指地址作为“起点”
- 优点:操作数的地址不是固定的它随着Pc值的变化而变化,并且与指令地址之间总是相差一个固定值,因此便于程序浮动(一段代码在程序内部的浮动)。相对寻址广泛应用于转移指令。
-
-
数据寻址方式(1种,堆栈寻址)
定义:操作数存放在堆栈中,隐含使用堆栈指针(SP)作为操作数地址。
注:堆栈是存储器(或专用寄存器组)中一块特定的按“后进先出(LIFO)”原则管理的存储区,该存储区中被读/写单元的地址是用一个特定的寄存器给出的,该寄存器称为堆栈指针(SP) 。- 特点:有效地址=基址地址+变址地址+形式地址
-
本节回顾(十种数据寻址方式)
6.3 RSIC
- CISC(复杂指令系统)和RISC(精简指令系统)
- CISC:
设计思路:一条指令完成一个复杂的基本功能
代表:X86架构,主要用于笔记本、台式机等 - RISC:
设计思路:一条指令完成一个基本“动作”;多条指令组合完成一个复杂的基本功能。仅用最常用的20%的简单指令,重新组合不常用的80%的指令功能
代表:ARM架构,主要用于手机、平板等
- CISC:
7 中央处理器
7.1 CPU的结构
已知:CPU由运算器和控制器两大部件组成
- CPU的五大功能:
- 指令控制(最重要功能):完成取指令、分析指令和执行指令的操作,即程序的顺序控制
- 操作控制:一条指令的功能往往是由若干操作信号的组合来实现的。CPU管理并产生由内存取出的每条指令的操作信号,把各种操作信号送往相应的部件,从而控制这些部件按指令的要求进行动作。
- 时间控制:对各种操作加以时间上的控制。时间控制要为每条指令按时间顺序提供应有的控制信号。
- 数据加工:对数据进行算数和逻辑运算
- 中断处理:对计算机运行过程中出现的异常情况和特殊请求进行处理
详细知识见输入输出系统章节
- 运算器和控制器的功能
- 运算器
对数据进行加工 - 控制器
协调控制计算机各部件执行程序测的指令序列,基本功能包括取指令、分析指令、执行指令- 取指令:自动形成指令地址;自动发出取指令的命令
- 分析指令:操作码译码(分析本条指令完成什么操作);产生操作数的有效地址。
- 执行指令:根据分析指令得到的“操作命令”和“操作数地址”,形成操作信号控制序列,控制运算器、存储器以及I/O设备完成相应的操作。
- 中断处理:管理总线及输入输出处理异常情况(如掉电)和特殊请求(如打印机请求打印一行字符)。
- 运算器
7.1.1 运算器的基本结构
- 算数逻辑单元:主要功能是进行算数/逻辑运算
- 通用寄存器组:如AX、 BX、 CX、 DX、 SP等,用于存放操作数(包括源操作数、目的操作数和中间结果)和各种地址信息等。SP是堆栈指针,用于知识栈顶的地址。
- 暂存寄存器:用于暂存从主存读来的数据,这个数据不能存放在通用寄存器中,否则会破坏其原有内容
- 累加寄存器:它是一个通用寄存器,用于暂时存放ALU运算的结果信息,用于实现加法运算。
- 程序状态字寄存器:保留由算术逻辑运算指令或测试指令的结果而建立的各种状态信息,如溢出标志(OP)、符号标志(SF)、零标志(ZF)、进位标志(CF)等。PSW中的这些位参与并决定微操作的形成。
- 计数器:控制乘除运算的操作步数。
其中R0-R3即寄存器,每个寄存器个ALU之间都有一个单独的专门的数据通路,因此这种可以成为专门数据通路方式
- 专用数据通路方式:根据指令执行过程中的数据和地址的流动方向安排连接线路。
- 解决方法1:使用多路选择器MUX根据控制信号选择一路输出
- 解决方法2:使用三态门可以控制每一路是否输出
- 优缺点:性能较高,基本不存在数据冲突现象,但结构复杂,硬件量大,不易实现
如果直接用导线连接,相当于多个寄存器同时并且一直向ALU传输数据,但是我们只需要挑选一个寄存器作为输入,另一作为输出即可
与之相对应,有另外一种数据通路方式
- CPU内部单总线方式:将所有寄存器的输入端和输出端都连接到一条公共的通路上
优缺点:结构简单,容易实现,但数据传输存在较多冲突的现象,性能较低
对于数据传输存在较多冲突的现象,我们可以在一端加入暂存寄存器—3.暂存寄存器:用于暂存从主存读来的数据,这个数据不能存放在通用寄存器中,否则会破坏其原有内容
7.1.2 控制器的基本结构
- 程序计数器:用于指出下一条指令在主存中的存放地址。CPU就是根据Pc的内容去主存中取指令的。因程序中指令(通常)是顺序执行的,所以PC有自增功能。
- 指令寄存器:用于保存当前正在执行的那条指令。
- 指令译码器:仅对操作码字段进行译码,向控制器提供特定的操作信号。
- 微操作信号发生器:根据IR的内容(指令) 、Psw的内容(状态信息)及时序信号,产生控制整个计算机系统所需的各种控制信号,其结构有组合逻辑型和存储逻辑型两种。
- 时序系统:用于产生各种时序信号,它们都是由统一时钟(CLoCK)分频得到。
- 存储器地址寄存器:用于存放所要访问的主存单元的地址。
- 存储器数据寄存器:用于存放向主存写入的信息或从主存中读出的信息。