408-计组-基础笔记
本文最后更新于:2022年10月10日 下午
408-计组-基础笔记
1.概述
1.1.结构
- 冯诺依曼结构
- 计算机由五大部件组成
- 指令和数据以同等地位存于存储器,可按地址寻访
- 指令和数据用二进制表示
- 指令由操作码和地址码组成
- 存储程序
- 以运算器为中心。现代计算机以存储器为中心
- 现代计算机结构
1.2.硬件
主存储器
存储字长:存储单元中二进制代码的位数
MAR:地址寄存器;MDR:数据寄存器
存储元:存储二进制的电子元件,每个存储元可存1bit
MAR=4位 $\Longrightarrow$ 总共有$2^4$个存储单元
MDR=16位 $\Longrightarrow$ 每个在储单元可存放16bit,即字长16bit。字和字节不一样
运算器
控制器
1.3.性能指标
存储器
- MAR:存储单元个数
- MDR:位数代表字长,即每个存储单元的大小(bit)
CPU
- 主频:一个波峰是一个脉冲
- CPI(Clock cycle Per Instruction):执行一条指令所需的时钟周期数
- IPS(Instructions Per Second):每秒执行多少条指令
- FLOPS:每秒执行多少次浮点运算(10进制)
整体性能指标
- 吞吐量:单位时间内处理请求的数量
响应时间:CPU(运行) + 等待(磁盘访问、内存访问、I/O、操作系统开销)
问:若A、B两个CPU的平均CPI相同,那么A一定更快吗?
——否!指令系统不一定一样
问:基准程序执行得越快说明机器性能越好吗?
——否!基准程序语句存在频度差异
2.数据表示
2.1.进制转换
10进制 转 其他:小数部分 * 基数 的整数部分就是那个进制的小数第一位
例:0.3 -> 2进制
$0.3\times2=0.6=0+0.6$,$0.6\times2=1.2=1+0.2$,$0.2\times2=0.4=0+0.4$,$0.4\times2=0.8=0+0.8$……
最终二进制:0.01001循环
2.2.编码
- ASCII码,A-Z的前三位从010变成011就是a-z
- GB2312
- 大端:数据最高有效字节存放到低地址中(也就是和内存是反着的)
- CRC:$2^r\ge K+R+1$ 则有纠错能力,否则出错位置可以套圈。校验码是和位置一一对应,但不是直接二进制的值
- 可检测出所有奇数个错误
- 可检测出所有双比特的错误
- 可检测出所有小于等于校验位长度的连续错误
2.3.二进制计算
数字的表示
原码
定点整数认为小数点在最后,定点小数认为小数点在符号后面,$[x]_{原}=1.0010011$
最高位0/1表示正负。如果没指定机器字长,不补0也行
$[x]_{原}=1,0010011$,那个逗号只是帮你区分符号位,没什么特别意思
若字长n+1位,原码整数范围$-(2^n-1)\le x\le 2^n-1$,原码小数范围$-(1-2^{-n})\le x\le1-2^{-n}$
反码:若符号位为0,则反码与原码相同;若符号位为1,则数值位全部取反
补码:正数的补码=原码;负数的补码=反码+1(要考虑进位)
已知一数补码,求其相反数的补码:符号位和数值位全部取反,再加一
移码:补码的基础上将符号位取反。只能用于表示整数
- 真值增大时,移码的数也是不断增大,很方便比大小。其本质上就是把表示范围改成从0往上增大
运算
算数移位:补码,负数,右移,左边要补1
- 循环移位,可用于大小端转换
原码加减
加法,如果符号相同,用绝对值算;如果符号不同,用绝对值大-小。算完添符号。同号运算有可能溢出
- 减法,全转化为加法
补码加减
加法:直接加,符号位参与运算
负数补码->原码:最右边的1,它以及右边不变,左边全部取反
判断溢出:正+正=负:上溢;负+负=正:下溢
- $V=A_sB_s\bar S_s+\bar A_s\bar B_sS_s$,0无溢出,1有溢出
- 前面再放一位,与符号位异或,0无溢出,1有溢出
- 双符号位,正00负11,结果的两个符号位异或运算,,0无溢出,1有溢出
定点数-符号扩展
正整数、正小数:原码反码补码都填0
负整数:原码填0,反码和补码填1
负小数:原码和补码填0,反码填1
基本思想:补码最后一个1左边的都和补码一样,右边的都和原码一样
原码乘法:符号由异或得到,每一轮被乘数和结果都逻辑右移,然后结果算加法。n轮加法、移位
- 补码乘法:n轮加法、移位,再加一次加法
原码除法
- 恢复余数法:先默认上商1,余数<0再改上商0,把除数加到ACC里恢复被除数。逻辑左移
- 示意图
- 左移n次,加法n+1次
- 加减交替法:若余数为负,则可直接商0,并让余数左移1位再加上除数。左移n次,加减n+1或n+2次
- 通过第一次减除数的商来判定两个数的大小,如果余数为正,说明被除数大,定点小数无法表示
- 恢复余数法:先默认上商1,余数<0再改上商0,把除数加到ACC里恢复被除数。逻辑左移
补码除法:加减交替法
- 使用2位符号位
- 最后一位无论怎样,直接设置为1
2.4.浮点数
表示格式
规格化:小数点左移:右规;小数点右移:左规。阶码也要相应地改
规格化的原码尾数,最高数值位一定是1
在IEEE754中,最高位1直接省略了
0.75,也就是$(0.11)_2$,表示到浮点数里数值部分只剩
.1000...
,最高位1省略了规格化的补码尾数,符号位与最高数值位一定相反
溢出
格式辨析
IEEE 754
- 移码
- 阶码全0表示非规格化小数,也就是幂次取到最小 $(0.00XX)\times 2^{-126}$
- 阶码全1,尾数全0,无穷大;尾数不为0,NaN
加减
对阶:阶数小的向大的对齐;尾数加减;规格化;舍入;判溢出
例题
2.5.ALU
- 串行加法器:只有一个全加器,数据逐位串行送加法器中进行运算。进位触发器用来寄存进位信号,以便参与下一次运算
- $S_i=A_i\oplus B_i\oplus c_{i-1},\ C_i=A_iB_i+(A_i\oplus B_i)C_{i-1}$
- 并行进位加法器
- 套娃
3.存储系统
3.1.概念
随机存取存储器(内存)、串行访问存储器、相联存储器(快表)
破坏性读出:读数据后需要重写(DRAM)。SRAM不需要重写
存储速度:数据传输率 = 数据的宽度 / 存储周期(存取时间+恢复时间)
金属引脚个数:地址线(n位地址)+数据线(字长)+片选线(1)+读写控制线(1/2)
DRAM采用地址复用,地址线减半,但是需要一根行列通选线,替代掉了片选线
各种字长
- 地址码长度:存储器地址的二进制位数
- 存储字长:一个存储单元中二进制码位数
- 指令字长:一条指令的二进制位数
- 机器字长(计算机位数):一次能处理的二进制位数,一半等于寄存器位数
- 操作系统位数:操作系统可寻址的位数
3.2.DRAM
- DRAM:栅极电容;SRAM:双稳态触发器
- 地址分两次送,第一次行,第二次列
- 每次刷新一行
- 刷新
- 分散刷新:读一次写一次
- 集中刷新:一段时间专门安排刷新
- 异步刷新:把刷新分散在刷新周期里(默认2ms)
3.3.RAM与CPU连接
- 位扩展:每个存储芯片表示1位,多个芯片并联来达到总线带宽。0-12号线
- 字扩展:用片选信号切换哪个芯片传送数据。13-15号线
- 通过使能信号控制片选信号生效时间
- 双端口存储器:优化多核CPU访问一根内存条的速度
- 多体并行存储器:流水线读取数据。连续取n个字耗时 T+(n-1)r
- 低位交叉存储器效果比高位交叉存储器效果好
- 存取周期T,存取时间r,为了使流水线不间断,应保证模块数 $m\ge \frac{T}{r}$
- 单体多字存储器:一次读一行
3.4.Cache
命中率H
- 先访问cache,平均访问时间 $t=Ht_c+(1-H)(t_c+t_m)$
- 同时访问,平均访问时间 $t=Ht_c+(1-H)t_m$
映射方式
全相联
- Cache存储空间利用充分,命中率高;缺点:查找“标记”最慢,有可能需要对比所有行的标记
直接映射:主存块号 % cache块数
当cache块数是$2^n$,主存块号末尾n位直接反映它在cache中的位置,标记位就不存储这几位了
对于任意一个地址,只需对比一个“标记”,速度最快;缺点:Cache存储空间利用不充分,命中率低
例题:
组相联:另外两种方式的折中,综合效果较好
- n路组相联映射:每n个Cache行为一组
替换算法
- 随机替换
- 先进先出
最近最少使用 LRU
- 命中时,所命中的行的计数器清零,比其低的计数器加1,其余不变
- 未命中且还有空闲行时,新装入的行的计数器置0,其余非空闲行全加1
- 未命中且无空闲行时,计数值最大的行的信息块被淘汰,新装行的块的计数器置0,其余全加1
最不经常使用 LFU:记录每个块被访问多少次,最小的淘汰
cache写策略
写命中
- 全写法:命中时同时写cache和主存,通常使用写缓冲
- 写回法:添加一个脏位,标记为修改过就写回主存,否则不用写回
写不命中
- 写分配法:先把数据调入cache,再修改,==配合写回法==
- 非写分配法:直接写主存。==搭配全写法==
3.5.页式存储器
- 逻辑地址:逻辑页号+页内地址(长度取决于页面多大)
- 快表(TLB):类似于页表的cache
- 虚拟存储器
- 段页式虚拟存储器:虚拟地址=段号+段内页号+页内地址
4.指令系统
4.1.指令格式
- 零地址指令 OP:
- 不需要操作数,如停机、空操作
- 栈型计算机,数据隐含在栈顶
- 一地址指令 OP A1:
- 只需要一个操作数,如取反 OP(A1)->A1
- 需要两个操作数,另一个隐含在寄存器里 (ACC)OP(A1)->ACC
- 二地址指令 OP A1(目的) A2(源):
- 需要两个操作数的算术运算、逻辑运算等 (A1)OP(A2)->A1
- 三地址指令 OP A1 A2 A3(结果):
- 需要两个操作数的算术运算、逻辑运算等 (A1)OP(A2)->A3
- 四地址指令 OP A1 A2 A3(结果) A4(下址):
- A4为下一条指令要执行的地址
- 正常情况下,取指令之后PC+1,指向下一条指令;四地址指令将PC的值修改位A4所指地址
- 扩展操作码 例题
4.2.寻址
- 指令寻址:始终由PC给出
- 顺序寻址
- 跳跃寻址
- 数据寻址
- 0000 隐含寻址
- 指令短,但是需要增加硬件
- 0001立即寻址:指令中包含 操作数 本身
- # + 补码
- 0010 直接寻址
- 0011 间接寻址:指向一个主存单元,单元储存数据实际所在位置
- 0100 寄存器寻址:指向一个寄存器编号,寄存器储存数据实际所在位置
- 指令短,执行块
- 0101 寄存器间接寻址:指向一个寄存器编号,寄存器指向一个主存单元,单元储存数据实际所在位置
- 0110 相对寻址:以PC所指地址作为起点(相对下一条指令的偏移量)
- 0111 基址寻址:以程序起始地址(基址寄存器BR 或 通用寄存器)作为起点。偏移量可变
- 1000 变址寻址:程序员自己决定起点。变址寄存器IX可变
- 此时IX视为偏移量,形式地址A视为基地址
- 一个累加应用例子
- 1001 堆栈寻址
- 0000 隐含寻址
4.3.机器数运算的标志位
- 求A+B时,进位输出为1则CF=1;进位输出为0则CF=0
- 求A-B时,进位输出为1则CF=0;进位输出为0则CF=1
5.中央处理器
- PC存放指令地址,位数取决于存储器字数
- IR存放指令内容,位数取决于指令字长
- MAR、MDR位数:数据总线宽度
5.1.CPU结构和功能
- 每执行完一条指令都检查中断
- 运算器内部结构
- 控制器内部结构
5.2.指令执行过程
指令周期:取指周期 FE + [间址周期 IND] + 执行周期 EX + [中断周期 INT]。单位「机器周期」,「机器周期」单位「时钟周期」
- 每个指令周期内机器周期数可以不等,每个机器周期内的节拍数也可以不等
数据流
- 取指
- 间址
- 中断
5.3.数据通路
寄存器之间
主存与CPU
算数或逻辑运算
例题:
ADD (R0) R1
的指令和数据流
5.4.控制器
硬布线:取决于 指令操作码、目前的机器周期、节拍信号、机器状态条件
- 微指令条件
- 可用于 RISC
微程序
如果某指令系统中有n条机器指令,则CM中微程序的个数至少是n+1个,微程序段的个数至少n个
物理上,取指周期、执行周期看起来像是两个微程,但逻辑应该把它们看作一个整体。因此1条指令对应1个微程序的说法是正确的
指令=微程序 > 微指令 > 微命令=微操作。
ADD R0 R1
>C0
>(Z)->MDR
微程序设计
水平型:长指令,一堆功能一条指令干完
- 微程序短,执行快,但编写麻烦
- 字段直接编码:分段,互斥性微操作在一个段内,相容的微操作在不同段内。每个段留出000表示无操作
- 字段间接编码:一个字段的某些微命令需由另一个字段中的某些微命令来解释
- 微地址形成方式:
- 下地址字段 指出:微指令中下地址字段直接指出。又称为断定方式
- 由操作码经微地址形成部件形成
- 增量计数器法:(CMAR)+1 -> CMAR
- 分支转移:操作控制字段 + 转移方式(判别条件) + 转移地址(去向)
- 通过测试网络:地址低位由各种条件确定
- 硬件产生
垂直型:一个微指令只对应一个微操作
- 简单规整便于编写,但执行慢
混合型
控制单元设计
- 分析每个阶段的微操作序列
- 写出对应机器指令的微操作命令及节拍安排
- 确定微指令格式:操作码 + 下地址
- 编写微指令码点
5.5.流水线
性能指标
- 吞吐率:单位时间完成指令条数
- 加速比:不使用流水线与使用流水线所用时间之比
- 效率:流水线设备利用率,「设备使用时间占总时间的比率」。用时空图所占面积来算
影响因素
- 资源冲突「互斥」:多条指令在同一时间争用同一资源
- 暂停相关指令
- 资源重复配置
- 数据冲突「同步」
- 硬件阻塞 stall
- NOP空指令
- 数据旁路(数据在寄存器内转发,省去写回内存的过程)
- 控制冲突
- 分支预测
- 预取转移成功和不成功两个控制流方向上的目标指令
- 加快和提前形成条件码
- 提高转移方向的猜准率
- 资源冲突「互斥」:多条指令在同一时间争用同一资源
分类
部件功能级、处理机级、处理机间级
部件功能级:将复杂的算术逻辑运算组成流水线,如 浮点数求阶差、对阶、尾数相加、结果规格化
处理机级:一条指令解释过程分成多个子过程,如 取指、译码、执行、访存及写回 五个过程
处理机间级:每一个处理机完成某一专门任务
单功能流水线、多功能流水线
动态流水线、静态流水线
线性流水线、非线性流水线
多发技术
- 超标量:每个时钟周期内可并发多条独立指令
- 超流水:
- 超长指令字:
6.总线
6.1.概念
分类
- 按数据传输格式
- 串行总线:抗干扰好,适用长距离传输,节省部件空间
- 并行总线:逻辑时序简单,电路实现容易,布线复杂,高频率时存在干扰
- 按总线功能
- 片内总线:CPU内
- 系统总线:数据、地址、控制
- 通信总线:计算机系统之间
- 按时序控制方式
- 同步总线
- 异步总线
- 按数据传输格式
经典结构
- 单总线:使用一组总线连接所有设备
- 双总线:主存总线(支持突发传送)、IO总线
- 三总线:主存总线、IO总线、DMA总线
- 高速外设效率提升,鼠标键盘响应变快,系统吞吐量提升
- 三个总线只能有一个在工作,系统工作效率较低
- 桥接器:用于连接不同的总线,具有数据缓冲、转换和控制功能
性能指标
- 传输周期(总线周期):申请、寻址、传输、结束
- 时钟周期:即机器的时钟周期
- 工作频率:总线周期 的倒数。1秒内传送几次数据
- 时钟频率:总线时钟周期 的倒数。1秒内有多少个时钟周期
- 宽度:数据总线的宽度
- 带宽:总线的数据传输率。1秒传输多少bit数据
信号线数:地址 + 数据 + 控制
例:同步总线,数据线和地址线复用,地址/数据线有32根,总线时钟频率为66MHz,每个时钟周期传送两次数据(上升沿和下降沿各传送一次数据)
1)该总线的最大数据传输率(总线带宽)是多少?
总线频率=2*66=132MHz
总线宽度=32bit=4B
带宽=132*4=528MB/s
2)若该总线支持突发(猝发)传输方式,传输一个地址占用一个时钟周期,则一次“主存写”总线事务传输128位数据所需要的时间至少是多少?
一次总线事务中,主设备只需给出一个首地址,设备就能从首地址开始的若干连续单元读出或写入多个数据。
发送首地址占用1个时钟周期,128位数据需传输4次,占用2个时钟周期。
1个时钟周期=1/66MHz~15ns,总耗时=(1+2)*15=45ns
6.2.仲裁
集中仲裁
链式查询:
计数器定时查询:
- 计数初始值可以改变优先次序;对n个设备需要 $log_2n+2$ 条控制线
独立请求:各自有请求线和允许线,所有设备共用总线忙
获得总线使用权的设备发出总线忙,而不是控制器
分布式仲裁
- 请求总线时把自己的号发到总线上,优先级最高的获得响应
6.3.操作和定时
- 同步定时
- 传送速度快,具有较高的传输速率;总线控制逻辑简单
- 主从设备强制性同步;不能及时进行数据通信的有效性检验,可靠性较差
- 适用于总线长度较短,总线所接部件的存取时间比较接近的系统
- 异步定时
- 不互锁:主从设备的信号都自动撤销,不受对方控制
- 半互锁:主设备等到从设备的「确认」后才会撤销「请求」。从设备自己撤销信号
- 全互锁:主从设备都等到收到对方信号后才会撤销信号
- 周期可变,适用于速度差距大的设备。速度不如同步方式快
- 半同步:统一时钟的基础上,增加一个“等待”响应信号 $\overline{WAIT}$
- 分离式: 分为两个周期,主模块申请占用总线、从模块传送信息
- 各模块均有权申请占用总线
- 采用同步方式通信,不等对方回答
- 各模块准备数据时,不占用总线
- 总线利用率提高
6.4.标准
- 概念
- 系统总线:通常与CPU直接相连,用于连接CPU与北桥芯片、或CPU与主存等
- 局部总线:没有直接与CPU连接,通常是连接高速的北桥芯片,用于连接了很多重要的硬件部件(如显
卡、声卡等) - 设备总线、通信总线:通常由南桥芯片控制,用于连接计算机与计算机,或连接计算机与外部/O设备
- 系统总线:ISA、EISA(带宽翻倍)、FBS、QPI
- 局部总线:VESA(并行32位)、PCI、AGP(并行)、PCI-E(串行、全双工、热插拔)
- 设备总线:RS-232C(串行)、SCSI(并行)、PCMCIA、USB、ATA(硬盘)、SATA(串行)
7.I/O
7.1.I/O系统基本组成
- 三种方式
- 程序查询:CPU等待
- 中断:每个字符都中断。不适合快速存储器如磁盘
- DMA:Direct Memory Access
DMA:
- CPU向DMA接口发出「读/写」命令,并指明主存地址、磁盘地址、读写数据量等参数。DMA完成一整块的读写才会发一次中断
通道控制方式
- 通道:特殊功能的处理器,对I/O设备进行统一管理
适用于超多I/O设备的中型机、大型机
CPU向通道发出I/O指令,指明通道程序在内存中的位置、要操作的是哪个/O设备
通道执行内存中的通道程序,控制I/O设备完成一系列任务
- 通道执行完后发中断
I/O软件
I/O指令:CPU指令的一部分
- 操作码+命令码+设备码
- 操作码指明了CPU要对IO接口做什么,命令码指明了IO接口要对设备做什么
通道指令:通道程序提前编制好放在主存中
- 在含有通道的计算机中,CPU执行I/O指令对通道发出命令,由通道执行一系列通道指令,代替CPU管理设备
7.2.输出设备
- VRAM最小显存:分辨率 * 灰度级位数
- VRAM带宽 = 分辨率 灰度级位数 帧率
- CRT
- 字符显示器
- RAM存ASCII码。ROM存字形码,$m\times n$的矩阵
- 字符显示器
7.3.外存储器
- 磁盘组成
- 存储区域
- 磁头数:记录面的个数,多少面
- 柱面数:每一面盘片上有多少条磁道,多少圈
- 扇区数:每一条磁道上有多少个扇区,一圈多少块
- 硬盘存储器
- 磁盘驱动器:磁头+盘片组件
- 磁盘控制器:IO接口。SCSI、SATA等
- 盘片本体
- 存储区域
- 磁盘性能指标
- 容量:字节总数。分为非格式化容量和格式化容量
- 记录密度:盘片单位面积上记录的二进制的信息量
- 道密度是沿磁盘半径方向单位长度上的磁道数
- 位密度是磁道单位长度上能记录的二进制代码位数
- 面密度是位密度和道密度的乘积
- 平均存取时间:寻道(会给一个平均值) + 旋转延迟(算期望用半圈时间) + 传输 + [控制器延迟]
- 数据传输率:转数 * 磁道容量
- 磁盘地址
- RAID
- RAID 0:无冗余,无校验
- RAID 1:镜像
- RAID 2:海明码纠错
- RAID 3:位交叉奇偶校验
- RAID 4:块交叉奇偶校验
- RAID 5:无独立校验的奇偶校验
7.4.I/O接口
- 作用
- 数据缓冲:通过数据缓冲寄存器达到主机和外设工作速度的匹配
- 错误或状态监测:通过状态寄存器反馈设备的各种错误、状态信息,供CPU查用
- 控制和定时:接收从控制总线发来的控制信号、时钟信号
- 数据格式转换:串并、并串等格式转换
- 与主机和设备通信:实现 主机-I/O接口-I/O设备 之间的通信
- 结构原理
- 结构图
- 发命令:发送命令字到I/O控制寄存器,向设备发送命令(需要驱动程序的协助)
- 读状态:从状态寄存器读取状态字,获得设备或I/O控制器的状态信息
- 读/写数据:从数据缓冲寄存器发送或读取数据,完成主机与外设的数据交换
- XX寄存器 有时称为 XX端口
- I/O端口
- 数据线:读写数据、状态字控制字、中断类型号
- 地址线:指明I/O端口
- 控制线:读/写IO端口的信号、中断请求信号
- 分类
- 统一编址:又称存储器映射方式。RISC常用
- 优点:不需要专门的指令,编程灵活
- 缺点:主存地址空间变小。地址位数多,地址译码速度慢,外设寻址时间长
- 独立编址:又称I/O映射方式
- 优点:不占用主存地址空间。译码快
- 缺点:需要CPU提供存储器读写和IO设备读写两组信号,控制复杂
- 统一编址:又称存储器映射方式。RISC常用
7.5.中断方式
工作流程:
- 中断请求
- 中断响应
- 响应中断的条件(可以关中断)
- 中断判优(优先响应哪一个)
- 中断处理
- 中断隐指令:
- 关中断
- 保存断点(PC)
- 引出中断服务程序:软件查询 或 由硬件产生向量地址,再由向量地址找到入口程序
- 中断服务程序
- 中断隐指令:
多重中断
中断屏蔽字:一个方阵,可以被抢占设为1,不可以被抢占设为0。自身不可以被自身抢占
一个例子:
例题:
7.6.DMA方式
- 流程
- CPU向DMA控制器指明要输入还是输出;要传送多少个数据;数据在主存、外设中的地址
- 接受外设发出的DMA请求(外设传送一个字的请求),并向CPU发出总线请求
- CPU响应此总线请求,发出总线响应信号,接管总线控制权,进DMA操作周期
- 确定传送数据的主存单元地址及长度,并能自动修改主存地址计数和传送长度计数
- 规定数据在主存和外设间的传送方向,发出读写等控制信号,执行数据传送操作。
- 概念
- DMA请求:向主存传送一字节的数据
- DMA中断请求:全传完了
- DMA与CPU共同使用主存的方式
- 停止CPU访问主存:控制简单。但CPU对主存利用率不高
- DMA与CPU交替访存:不需要总线使用权的申请、建立和归还过程。但硬件逻辑复杂
- 周期挪用(窃取):不抢占。冲突时DMA优先
- 与中断对比:
本博客所有文章除特别声明外均为原创,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!