[TOC]
计算机系统概述
组织与结构
组织:操作单元及其相互连接 对编程人员不可见 控制信号 存储技术
结构:直接影响程序逻辑执行的属性 对编程人员可见 指令集 表示数据类型的位数
冯诺依曼结构
指令和数据以同等地位存放在存储器内
CPU性能
时钟频率(时钟速度) 计算机在单位时间内执行最基本操作的次数 单位一般为Hz
时钟周期(时钟实践) 执行每次最基本操作的时间 单位一般为s
CPI~i~:指定类型i所需要的周期数
(注意这里的I~i~表示一定程序中执行i类指令的条数)
基准程序
计算机的顶层视图
CPU
- CPU从一条指令到下一条指令以顺序方式执行(除非明确修改)
- 指令和数据存储在单个读写存储器中
- 主存中的内容按位置访问,无需考虑其中包含的类型
问题与解决
CPU频率不能无限提高——改进CPU芯片结构
内存墙的存在——采用cache
CPU等待I/O传输数据时保持空闲——采用中断机制
存储器
- 指令和数据以二进制形式存储在单个读写存储器中
- 主存中的内容按位置访问,无需考虑其中包含的类型
问题与解决
- 兼顾存储容量、速度和成本——层次式存储结构
- I/O设别传输速率差异大——采用缓冲区和改进I/O操作技术
总线
总线是连接两个或多个设备的通信通路
问题与解决
计算机部件互连复杂——采用总线
数据传输类型
- 控制线:控制数据线和地址线的访问和使用
- 地址线:指定数据总线和地址I/O端口上数据的来源或去向
- 数据线:在系统模块之间传送数据
数据的机器级表示
这里不用多说了,上机里面已经很清楚的讲的
数据校验码
纠错
基本思想
- 存储额外的信息以进行检错和校正
处理过程
- 数据输入:使用函数𝑓在𝑀位数据𝐷上生成𝐾位校验码𝐶
- 数据输出:使用函数𝑓在𝑀位数据𝐷’上生成新的𝐾位代码𝐶^”^,并与取出的𝐾位码𝐶^’^进行比较
奇偶校验码
奇校验多和1异或一次
优点是代价低,缺点是不能发现出错位数为偶数的情况,发现错误无法校正
海明码
这个其实很好理解,就是校验码至少得留够表示各种错误和不出错的位数
这个是重点
就是我得自己去推导出这个数据位划分公式确保能做到每一位有对应
不变的是只有一个1的对应校验码出错
再根据对应位是否为1确定数据位对应的公式
在存储故障字时选择直接就按照上面那个对应关系的顺序来
循环冗余校验(CRC)
用按位异或代替传统除法
整数运算
ALU(Arithmetic Logic Unit)
算术逻辑单元 (ALU) 是计算机实际完成数据算术逻辑运算的部件
- 数据由寄存器 (Registers) 提交给ALU,运算结果也存于寄存器
- ALU可能根据运算结果设置一些标志 (Flags),标志值也保存在处理器内的寄存器中
- 控制器 (Control unit) 提供控制ALU操作和数据传入送出ALU的信号
与门延迟:1级门延迟 (1ty)
或门延迟:1级门延迟 (1ty)
异或门延迟:3级门延迟 (3ty)
剩下整数运算详见机试
浮点数运算
详见机试
二进制编码的十进制运算
详见机试
内部存储器
存储器(Memory)由一定数量的单元构成,每个单元可以被唯一标识,每个单元都有存储一个数值的能力
- 地址:单元的唯一标识符(采用二进制)
- 地址空间:可唯一标识的单元总数 处理器的总线宽度决定
- 寻址能力:存储在每个单元中的信息的位数 可访问的最大存储容量 总线宽度大小和存储单元大小共同决定
大多数存储器是字节寻址的,而执行科学计算的计算机通常是64位寻址的
半导体存储器类型
密度:高读写速度的存储器通常需要更复杂的电路和更多的控制单元,这可能会降低密度
RAM
随机存取存储器
Random-Access Memory
特性
- 可以简单快速地进行I/O操作
- 易失的(Volatile)
分为Dynamic RAM和Static RAM两种
DRAM
Dynamic RAM
在电容器上用电容充电的方式存储数据
- 电容器中有无电荷在分别代表二进制的1与0
需要周期地充电刷新以维护数据存储
- 原因:电容器有漏电的自然趋势
- 由一个阈值来确定电荷是被解释为1还是0
SRAM
Static RAM
- 使用传统触发器、逻辑门配置来存储二进制值
- 使用与处理器相同的逻辑元件
- 只要有电源,就可以一直维持数据
DRAM和SRAM的区别
- 相同点
- 易失的:两者都要求电源持续供电才能保存位值
- 不同点
- DRAM比SRAM具有更简单、更小的位元,但要求能支持刷新的电路
- DRAM比相应的SRAM密度更高,价格更低
- SRAM通常比DRAM快
- DRAM更倾向于满足大容量存储器的需求,SRAM一般用于高速缓存,DRAM用于主存
上下两张图看得出来,SRAM更复杂,位元和密度都和这个相关,更复杂当然也更快,更快也就更适合用于高速缓存…..好绕
SDRAM
Synchronous DRAM 同步DRAM
传统DRAM是同步的 处理器向内存提供地址和控制信号和DRAM执行I/O有一定时间延迟
- DRAM:工作在异步模式下,控制信号(RAS、CAS、WE、CS等)直接管理读写操作的时序。
- SDRAM:工作在同步模式下,所有操作与系统时钟同步,读写操作在时钟信号的边沿进行。
DDR SDRAM
Double-Data-Rate SDRAM 双速率SDRAM
- 每个时钟周期发送两次数据,一次在时钟脉冲的上升沿,一次在下降沿
- DDR ➔ DDR2 ➔ DDR3 ➔ DDR4
- 增加操作频率
- 增加预取缓冲区
ROM
Read-only memory 只读存储器
- 非易失
- 可读,但只有出厂时可写入
PROM
Programmable ROM 可编程ROM
可以让用户使用特殊设备进行一次写入(电信号执行)
EPROM
Erasable Programmable read-only memory 可擦除可编程“只读”存储器
光擦除 电写入
所有存储单元都变回相同的初始状态
EEPROM
Electrically erasable Programmable read-only memory 电可擦除可编程“只读”存储器
- 特性
- 可以随时写入而不删除之前的内容
- 只更新寻址到的一个或多个字节
- 写操作每字节需要几百微秒
- 与EPROM对比
- EEPROM更贵,且密度低,支持小容量芯片
Flash Memory
快闪存储器
特性基本就是比EPROM好,比EEPROM差,价格也一样
从位元到主存
寻址单元
寻址单元:若干相同地址的位元组成
寻址模式
- 字节(常用)
- 字
存储阵列
Memory array
如何寻址
靠译码器 多少位就能有2^n^种输出
如何刷新
- 集中式刷新(Centralized refresh)
- 停止读写操作,并刷新每一行
- 刷新时无法操作内存
- 刷新控制器定时发出刷新信号
- 分散式刷新(Decentralized refresh)
- 在每个存储周期中,当读写操作完成时进行刷新
- 会增加每个存储周期的时间
- 异步刷新(Asynchronous refresh)
- 每一行各自以64ms间隔刷新
- 效率高:常用
芯片
模块组织
位扩展:芯片并行连接
字扩展:芯片串联连接
大端序 小端序
最右边的字节是最低有效字节
- 小端序(Little-endian)
- 定义:小端序是指最低有效字节(Least Significant Byte, LSB)存储在最低地址处,最高有效字节(Most Significant Byte, MSB)存储在最高地址处。
- 特点:小端序的存储方式与数据的自然读取顺序相反,适合按字节扩展。
示例
假设有一个32位整数 0x12345678
,在小端序的系统中,它的存储方式如下:
0x1000 | 0x78 |
---|---|
0x1001 | 0x56 |
0x1002 | 0x34 |
0x1003 | 0x1 |
- 大端序(Big-endian)
- 定义:大端序是指最高有效字节(Most Significant Byte, MSB)存储在最低地址处,最低有效字节(Least Significant Byte, LSB)存储在最高地址处。
- 特点:大端序的存储方式与数据的自然读取顺序一致,适合按字节截断。
示例
假设有一个32位整数 0x12345678
,在大端序的系统中,它的存储方式如下:
0x1000 | 0x12 |
---|---|
0x1001 | 0x34 |
0x1002 | 0x56 |
0x1003 | 0x78 |
Cache
Cache工作流程
依靠tags来标识其内容在主存中的对应位置
程序访问的局部性原理
平均访问时间
Cache的构成
Cache的设计要素
Cache容量
扩大容量意味着
- 增加命中率p
- 增加了cache的开销和访问时间Tc
映射功能
直接映射
cache行号:i 主存储器块号:j cache的行数:C
i = j mod C
直接映射甚至不需要替换策略,因为他能放在哪早已确定
抖动现象(缺点):如果一个程序重复访问两个需要映射到同一行中且来自不同块的字,则这两个块不断地被交换到cache中,cache的命中率将会降低如果一个程序重复访问两个需要映射到同一行中且来自不同块的字,则这两个块不断地被交换到cache中,cache的命中率将会降低
优点
- 简单
- 快速映射
- 快速检查
适合容量大的cache
关联映射
一个主存块可以装入任意一行
优点
- 避免抖动
缺点
- 实现起来复杂
- cache搜索代价大
适合容量小的cache
组关联映射
Cache分为若干组,每一组包含相同数量的行,每个主存块被映射到固定组的任意一行
S表示组数 s表示组号 j表示内存块号
s = j mod S
K-路组关联映射 K = C / S
优点和缺点就是结合了前两者的优点和缺点
比较
关联度:一个主存块映射到cache中可能存放的位置个数
直接映射:1
关联映射:C
组关联映射:K
- 关联度越低,命中率越低
- 直接映射的命中率最低,关联映射的命中率最高
- 关联度越低,判断是否命中的时间越短
- 直接映射的命中时间最短,关联映射的命中时间最长
- 关联度越低,标记所占额外空间开销越小
- 直接映射的标记最短,关联映射的标记最长
替换方法
LRU
Least Recently Used 最近最少使用算法
- 假设:最近使用过的数据块更有可能会被再次使用
- 策略:替换掉在cache中最长时间未被访问的数据块
- 实现:对于2路组关联映射
- 每行包含一个USE位
- 当同一组中的某行被访问时,将其USE位设为1,同时将另一行的USE位设为0
- 当将新的数据块读入该组时,替换掉USE位为0的行中的数据块
FIFO
先进先出算法
- 假设:最近由主存载入Cache的数据块更有可能被使用
- 策略:替换掉在Cache中停留时间最长的块
- 实现:时间片轮转法 或 环形缓冲技术
- 每行包含一个标识位
- 当同一组中的某行被替换时,将其标识位设为1,同时将其下一行的标识位设为0
- 如果被替换的是该组中的最后一行,则将该组中的第一行的标识位设为0
- 当将新的数据块读入该组时,替换掉标识位为0的行中的数据块
LFU
Least Frequently Used 最不经常使用算法
- 假设:访问越频繁的数据块越有可能被再次使用
- 策略:替换掉cache中被访问次数最少的数据块
- 实现:为每一行设置计数器
Random
随机替换算法
- 假设:每个数据块被再次使用的可能性是相同的
- 策略:随机替换cache中的数据块
- 实现:随机替换
- 随机替换算法在性能上只稍逊于使用其它替换算法
写策略
- 主存和cache的一致性
- 当cache中的某个数据块被替换时,需要考虑该数据块是否被修改
- 两种情况
- 如果没被修改,则该数据块可以直接被替换掉
- 如果被修改,则在替换掉该数据块之前,必须将修改后的数据块写回到主存中对应位置
写直达
所有写操作同时对cache和主存进行
优点
- 主存和cache数据一致,永远最新
缺点
- 产生大量主存访问,减慢写操作
写回法
- 先更新cache中的数据,当cache中某个数据块被替换时,如果它被修改了,才被写回主存
- 利用一个脏位(dirty bit)或者使用位(use bit)来表示块是否被修改
- 优点
- 减少了访问主存的次数
- 缺点
- 部分主存数据可能不是最新的
- I/O模块存取时可能无法获得最新的数据,为解决该问题会使得电路设计更加复杂且有可能带来性能瓶颈
行大小
随着行大小增加
- cache命中率先上升
- 数据块中包含了更多周围的数据,每次会有更多的数据作为一个块装入cache中
- 利用了空间局部性
- 再下降
- 当Cache容量一定的前提下,较大的行会导致Cache中的行数变少,导致装入cache中的数据块数量减少,进而造成数据块被频繁替换
- 每个数据块中包含的数据在主存中位置变远,被使用的可能性减小
Cache数目
一级vs多级
- 一级
- 将cache与处理器置于同一芯片(片内cache)
- 减少处理器在外部总线上的活动,从而减少了执行时间
- 多级
- 当L1未命中时,减少处理器对总线上DRAM或ROM的访问
- 使用单独的数据路径,代替系统总线在L2缓存和处理器之间传输数据,部分处理器将L2 cache结合到处理器芯片上
统一vs对立
- 统一
- 更高的命中率,在获取指令和数据的负载之间自动进行平衡
- 只需要设计和实现一个cache
- 分立
- 消除cache在指令的取值/译码单元和执行单元之间的竞争,在任何基于指令流水线的设计中都是重要的
外部存储器
外部存储设备
- 用于存储不经常使用、数据量较大的信息
- 非易失
磁盘存储器
磁头:对盘片进行读写操作的装置
读写机制
- 在读或写操作期间,磁头静止,而盘片在其下方旋转
- 磁头的数量
- 单磁头:读写公用同一个磁头(软盘、早期硬盘)
- 双磁头:使用一个单独的磁头进行读取(当代硬盘)
数据组织
- 盘片上的数据组织呈现为一组同心圆环,称为磁道(track)
- 数据以扇区(sector)的形式传输到磁盘或从传出磁盘
- 默认值为512B
- 相邻磁道之间有间隙(gap),相邻的扇区之间也留有间隙
I/O访问时间
磁头寻道/磁盘调度
FCFS
First Come First Service
SSTF
Scan
C-SCAN
LOOK
C-LOOK
CD和CD-ROM
CD和CD-ROM采用类似技术,但是CD-ROM更加耐用且有纠错功能
RAID
磁盘冗余阵列 Redundant Arrays of Independent Disks
RAID 0
- 数据以条带的形式在可用的磁盘上分布
- 不采用冗余来改善性能(不是RAID家族中的真正成员)
- 用途
- 高数据传输率
- 高速响应I/O请求
RAID 1
- 优点
- 高速响应I/O请求:即便是同一个磁盘上的数据块,也可以由两组硬盘分别响应
- 读请求可以由包含请求数据的两个对应磁盘中的某一个提供服务,可以选择寻道时间较小的那个
- 写请求需要更新两个对应的条带:可以并行完成,但受限于写入较慢的磁盘
- 单个磁盘损坏时不会影响数据访问,恢复受损磁盘简单
- 缺点
- 价格昂贵
就是多了一个copy
读请求快好多,写请求快没多少
RAID 2
就是多放了几个盘用来存储校验码
RAID 3
- 优点:能够获得非常高的数据传输率
- 对于大量传送,性能改善特别明显
- 缺点:一次只能执行一个I/O请求
- 在面向多个IO请求时,性能将受损
RAID 4
RAID 5
RAID 6
总结
虚拟存储器
分区
分页
映射算法:关联映射
写策略:写回
TLB
快表
Translation Lookaside Buffer
- 页表的使用增加了主存的访问次数
- 为了减少访存次数,把页表中最活跃的几个页表项复制到高速缓存中
- 后备转换缓冲器(简称“快表”):将页表项放入高速缓存中
- 映射:关联映射,组关联映射
- 替换:随机替换
- 主存中的页表相应地称之为“慢表”
分段式虚拟存储器
- 将程序和数据分成不同长度的段,将所需的段加载到主存中
- 虚拟地址:段号 + 段内偏移量
- 与分页式虚拟存储器相比
- 分页式虚拟存储器
- 优点:实现简单、开销少
- 缺点:一个数据或一条指令可能会分跨在两个页面
- 分段式虚拟存储器
- 优点:段的分界与程序的自然分界相对应,易于编译、管理、修改和保护
- 缺点:段的长度不固定
- 分页式虚拟存储器
段页式虚拟存储器
- 将程序和数据分段,段内再进行分页
- 每个分段都有一个页表
- 虚拟地址
- 段号 + 页号 + 页内偏移量
- 优点
- 程序按段实现共享与保护
- 缺点
- 需要多次查表
指令系统
记号
- A: 指令中地址字段的内容
- R: 指向寄存器的指令地址字段内容
- EA: 被访问位置的实际(有效)地址
- (X): 存储器位置 X 或寄存器 X 的内容
寻址方式
立即寻址
操作数 = A
直接寻址
EA = A
间接寻址
EA = (A)
寄存器寻址
EA = R
寄存器间接寻址
EA = (R)
偏移寻址
EA = (R) + A
相对寻址
EA = (PC) + A
基址寄存器寻址
EA = (B) + A
变址寻址
EA = A + (R)
栈寻址
方式:栈指针保存在寄存器中,对寄存器中栈位置的访问实际上是一种寄存器间接寻址方式
指令周期和指令流水线
指令周期:处理单个指令的过程
间址周期
把间接地址的读取看成一个额外的指令子周期
六阶段方法
FI Fetch Instruction
DI Decode Instruction
CO Caculate Operands 计算操作数 计算每个操作数的有效地址
FO Fetch Operands 取操作数 从存储器中取出每个操作数
EI Execute Instruction 执行指令
WO Write Operand 写操作数
不是所有指令都包含6个阶段
不是所有阶段都能并行完成
限制
- 条件转移指令能使若干指令的读取变为无效
- 中断
冒险
结构冒险
原因:已进入流水线的不同指令在同一时刻访问相同的硬件资源
解决:使用多个不同的硬件资源,或者分时使用同一个硬件资源
数据冒险
原因:未生成指令所需要的数据就要调用了
解决方案
- 插入nop指令
- 插入bubble
- 转发/旁路
- 交换指令顺序
控制冒险
原因:指令的执行顺序被更改
- 转移(Transfer): 分支(branch), 循环(loop), …
- 中断(Interrupt)
- 异常(Exception)
- 调用 / 返回(Call / return)
解决:
- 分支预测
- 取多条指令
控制器
程序状态字:一个或一组包含状态信息的寄存器,包含条件吗加上其他状态信息
微操作:每个子周期由一系列涉及CPU寄存器操作的更小步骤组成,这些步骤称为微操作
微操作分组原则
- 事件流动顺序恰当
- 必须避免冲突
- 时间单位尽量少
ICC
指令周期代码 Instruction Cycle Code
CPU内部总线
- ALU和寄存器都连接到CPU内部总线上
- 为了数据在该内部总线和各寄存器之间传递,内部总线和寄存器之间有门和控制信号
- 控制线控制着数据和系统总线(外部)的交换以及ALU的操作
控制CPU的功能需求
- CPU的基本元素
- ALU,寄存器组,内部数据通路,控制器,外部数据通路
- CPU需要完成的微操作
- 在寄存器之间传送数据
- 将数据由寄存器传送到外部接口(如系统总线)
- 将数据由外部接口传送到寄存器
- 将寄存器作为输入和输出,完成算术和逻辑运算
- 控制器的两个基本任务
- 定序(sequencing):根据正被执行的程序,控制器使CPU以正确的顺序通过一系列微操作
- 执行(execution):控制器使每个微操作得以完成
控制器的输入输出
控制器实现
- 硬布线实现(hardwired implementation)
- 控制器是一个组合电路,把输入逻辑信号转换为一组输出逻辑信号,即控制信号
- 微程序实现(microprogrammed implementation)
- 控制逻辑是微程序指定的,控制器是一个相对简单的逻辑电路,通过执行每条微指令来产生控制信号
- 微指令定序(microinstruction sequencing)
- 根据当前的微指令、条件标志和指令寄存器的内容,产生下一微指令的控制存储器地址
- 设计考虑
- 微指令的大小:减小微指令的大小就能节省控制存储器的成本
- 地址生成时间:尽可能快地执行微指令
- 微指令执行(microinstruction execution)
- 产生控制信号:发往CPU内部,送往外部控制总线或其他外部接口
总线
类型
- 芯片内部总线
- 连接芯片内部各部分
- 系统总线
- 连接CPU、存储器、IO设备和其他功能设备
- 通信总线
- 连接主机和IO设备
- 连接不同的计算机系统
总线可以被多个设备监听,但同一时刻只能由一个设备发送数据
发送数据和请求数据前都需要先获得总线的使用权
用途
- 专用总线
- 始终只负责一项功能
- 优点:高吞吐量 减少总线冲突
- 缺点:增加了系统的规模和成本
- 复用总线
- 将同一线路用于多种用途
- 优点:使用的布线少,节省空间和成本
- 缺点:每个模块需要更复杂的控制电路,且共享可能降低性能
仲裁
- 优先级:优先级高的设备优先被服务
- 公平性:优先级最低的设备不能一直被延迟
集中式
由仲裁器(arbiter)或总线控制器(bus controller)负责分配总线使用权
- 链式查询 / 菊花链(daisy chain)
- 计数器查询(query by a counter)
- 独立请求(independently request)
分布式
每个设备都包含访问控制逻辑,各设备共同作用分享总线
- 自举式(self selection)
- 冲突检测(collision detection)
时序
确定每个总线事务开始和结束的时间
总线事务:地址+数据+数据+…….+数据
类型
- 同步时序:事件的发生由时钟决定
- 异步时序:一个事件的发生取决于前一个事件的发生
- 半同步:同步时序和异步时序相结合
- 分离事务:设备准备数据期间释放总线
同步时序
- 优点
- 更容易实现和测试
- 缺点
- 所有设备共享同一个时钟
- 总线长度受到时钟偏差的限制
异步时序
1中的ReadReq线:控制信号线,用于发送读取请求 存储器检测到信号后读取相应地址
2中的Ack线:一个确认信号线,用于通知 CPU 数据读取操作已完成,数据已准备就绪 CPU检测到后就可以释放地址线和ReadReq线了
5中的DataRdy线:一个信号线,用于通知 CPU 数据已经准备好,可以读取 CPU检测后就读取数据
其余以此类推
七步可以这么记忆
发送地址和指令到内存
- CPU请求读取数据并设置地址线提供地址
与内存准备数据并行
- 存储器读取地址并设置Ack线
- CPU释放地址线和ReadReq线
- 存储器释放Ack线
数据传输到CPU
- 存储器把数据传到数据线并设置DataRdy线告知CPU数据准备好了
- CPU读取数据并设置Ack线
- 存储器释放数据线和DataRey线 CPU释放Ack线
- 优点
- 可以灵活地协调速度不同的设备
- 缺点
- 接口逻辑复杂
- 对噪声敏感
半同步时序
分离事务
同步总线和异步总线的数据传输速率
- 总线带宽(bus bandwidth):总线的最大数据传输速率
- 不要考虑总线仲裁、地址传输等因素
- 数据传输速率
- 考虑地址传输、握手等因素
- 总线宽度(bus width):组成总线的线数
- 数据总线越宽,一次传输的数据位数就越多
- 地址总线越宽,一次传输的地址位数就越多
eg:假设同步总线的时钟周期为50ns,每次传输需要一个时钟周期,异步总线每次握手需要40ns。两个总线都是32位宽,内存的数据准备时间为230ns。当从存储器中读出一个32位的字时,计算两个总线的数据传输速率
- 同步总线
- 发送指令和地址到内存:50ns
- 内存准备数据:250ns(230要向上取时钟周期整数倍)
- 将数据传输到CPU:50ns
- 数据传输速率 = 32bit / (50 + 250 + 50)ns = 91.4Mbps
- 值得注意的是同步总线的三步所消耗的时间必须是时钟周期的整数倍
- 异步总线
- 步骤一:40ns
- 步骤2,3,4/数据准备:max(40ns * 3,230ns)
- 步骤4,5,6:40ns * 3
- 数据传输速率 = 32bit / (40 + 230 + 120)ns = 82.1Mbps
注意
- 最后一次总线事务后的空闲周期仍然要算进去
- 数据传输经过计算需要2个时钟周期
提高总线数据传输率
- 提高时钟频率
- 增加数据总线宽度
- 每次传输更多的数据(成本:更多的总线线路)
- 块传输
- 传输一次地址就传输一块数据(成本:高复杂性)
- 分离总线事务
- 减少总线空闲时间(成本:复杂性高,增加每个事务的持续时间)
- 分离地址线和数据线
- 同时传输地址和数据(成本:更多的总线线路)
总线层次结构
单总线结构
双总线结构I
在CPU和存储器中间增加一个存储器总线
优点:增加CPU和存储器之间的传输效率,同时降低系统总线的负担
双总线结构II
- 将系统总线分为存储器总线、I/O 总线 和 IOP (input/output processer)
- 优点:降低I/O对总线的负担
多总线结构I
- 增加一个 本地总线(local bus)来连接 CPU 和 cache
- 优点:分离了 CPU 和 I/O 的交互
双总线结构II
- 将系统总线分为存储器总线、I/O 总线和 DMA 总线(Direct Memory Access)
- 优点:增加 I/O 效率
多总线结构III
- 增加一个 高速 I/O 总线 来连接高速设备
- 优点:增加 I/O 交互效率
I/O
外设不能直接连接在系统总线上
需要I/O模块
- 通过系统总线或中央交换器和存储器连接
- 通过专用数据线与一个或多个外设连接
I/O模块的功能
- 数据缓冲
- 控制和定时
- 检错
外部接口
- 通过系统总线或中央交换器和存储器连接
- 通过专用数据线与一个或多个外设连接
编程式I/O
I/O指令映射为I/O命令
处理器发送一个指定具体I/O模块和外设的地址,并发送一条I/O命令
- 当处理器在执行过程中遇到一条与I/O操作有关的指令时,它通过发送指令到适当的I/O模块来执行这条指令
- I/O模块将执行所要求的动作,然后在I/O状态寄存器中设置一些适当的位
- I/O不会中断处理器,因此处理器需要周期性地检查I/O模块的状态,直到发现该操作完成
中断式I/O
-
处理器发送一个I/O命令到模块,然后去处理其它有用的工作
-
当I/O模块准备和处理器交换数据时,它中断处理器以请求服务
-
处理器执行数据传送,最后恢复它原先的处理工作
-
I/O模块
-
I/O模块接收来自处理器的读命令
-
I/O模块从相关的外设中读入数据
-
一旦数据进入I/O模块的数据寄存器后,该模块通过控制总线给处理器发送中断信号
-
I/O模块等待直到处理器请求该数据时为止
-
当处理器有数据请求时,I/O模块把数据传送到数据总线上,并准备另一个I/O操作
-
-
处理器
-
处理器发送一个读命令
-
处理器离开去做其它的事情,并在每个指令周期结束时检查中断
-
当来自I/O模块的中断出现时,处理器保存当前程序的现场
-
处理器从I/O模块读取数据字并保存到主存中
-
处理器恢复刚才正在运行的程序的现场,并继续运行原来的程序
-
-
响应优先级决定了多个中断请求同时发生时,哪个中断请求会被首先响应。
-
处理优先级决定了在中断处理过程中,当另一个中断请求发生时,是否中断当前的中断处理并处理新请求。
掩码字 0启动 1禁用 反应处理优先级
- 多条中断线:处理器仅仅挑选具有最高优先级的中断线
- 软件轮询:模块的轮询次序就决定了模块的优先级
- 菊花链:链接模块次序就决定了模块的优先级
- 独立请求:中断控制器决定
DMA
无需经过处理器即可直接访问内存的模块
- 处理器通过发送以下信息向DMA模块发出命令:读/写、I/O设备地址、内存中的起始位置、字数
- 处理器继续进行其他工作
- DMA模块将全部数据块,每次一个字,直接将数据传输到存储器或从存储器读出,而无需经过处理器
- 当传输完成时,DMA模块向处理器发送一个中断信号
面向考试
杂乱
机器字长
机器字长是指 CPU 内部用于整数运算的数据通路的宽度。CPU 内部数据通路是指 CPU内部的数据流经的路径及路径上的部件,主要是 CPU 内部进行数据运算、存储和传送的部件,这些部件的宽度基本上要一致才能相互匹配。因此,机器字长等于 CPU 内部用于整数运算的运算器位数和通用寄存器宽度。
注意看按什么编址
单总线数据通路将所有寄存器的输入输出端都连接在一条公共通路上,一个时钟内只允许一次操作,无法完成指令的所有操作
指令执行过程中数据所经过的路径,包括路径上的部件,称为数据通路。ALU、通用寄存 器、状态寄存器、Cache、MMU、浮点运算逻辑、异常和中断处理逻辑等,都是指令执行过程 中数据流经的部件,都属于数据通路的一部分。数据通路中的数据流动路径由控制部件控制,控制部件根据每条指令功能的不同,生成对数据通路的控制信号。、
程序计数器 PC 给出下一条指令字的访存地址(指令在内存中的地址),它取决于存储器的字数(4GB/32bit=2^30),因此 PC 的位数至少是 30 位,指令寄存器 IR 用于接收取得的指令,它取决于指令字长(32bit),因此 IR 的位数至少为 32 位。
单位
Byte KB MB GB 每个隔了10^3^
Hz KHz MHz GHz
ms μs ns 每个隔了10^3^
bps = bit/s
rpm Revolutions Per Minute 每分钟转数
CPI MIPS大题
CPI 每个指令执行所需周期数
MIPS 每秒百万条指令
PFLOPS 是 “Peta Floating Point Operations Per Second” 的缩写,表示每秒千万亿次浮点运算
十进制有效位数
- 有效位数:指的是一个数在特定表示法(例如十进制或二进制)中,从最左边的第一个非零数字开始,到最右边的一个非零数字结束的所有数字。即,一个数的精度。
- 十进制有效位数:在 IEEE754 单精度浮点数表示中,24 位二进制有效位大约等于 7 位十进制有效位。这是因为 (2^{24} ≈ 10^7),即 24 位二进制数可以表示大约 7 位十进制数。
校验码
海明码
循环冗余校验码 右移k+1
CF OF
Carry Flag (CF) - 进位标志
- 进位标志(CF)用于指示无符号运算中的进位或借位情况。
- 进位(加法):当进行无符号加法运算时,如果结果超出了目标寄存器的位宽(如 32 位寄存器中超过 0xFFFFFFFF),则 CF 置 1,否则 CF 置 0。
- 借位(减法):当进行无符号减法运算时,如果被减数小于减数,则需要借位,此时 CF 置 1,否则 CF 置 0。
Overflow Flag (OF) - 溢出标志
- 溢出标志(OF)用于指示有符号运算中的溢出情况。
- 溢出(加法):当进行有符号加法运算时,如果结果超过了目标寄存器能够表示的范围(例如 32 位寄存器中超过正数最大值 0x7FFFFFFF 或小于负数最小值 0x80000000),则 OF 置 1,否则 OF 置 0。
- 溢出(减法):当进行有符号减法运算时,如果结果超过了目标寄存器能够表示的范围,则 OF 置 1,否则 OF 置 0。
DRAM 芯片规格
1K × 4 位的 DRAM 芯片表示:
- 1K:表示 1K(1024)个存储位置,或者说 1024 行。
- 4 位:表示每个存储位置存储 4 位(半字节)。
前面那个1k决定片内选址(10位)
数据寄存器位数 = 寻址单元中数据长度
地址寄存器位数(专指) = 寻址空间所需位数
刷新
集中式刷新每个单元同时按行刷新
RAM ROM
EPROM也是随机存取 CD-ROM不是
DRAM地址复用地址线得/2
动态RAM需要刷新 其余不用
指令cache和数据cache分离
主要目的是为了减少指令流水线资源冲突
cache命中率
a[k] = a[k] + 32 算访问了两次a[k]
cache行的位数
磁盘
磁盘存储器最小读写单位是一个扇区
考虑一个有 10 个磁盘,每个磁盘 100GB 的 RAID 阵列。对于 RAID0、1、2、3、4、5、6
中的各级,有效数据的存储容量为多大?
RAID0:1000G
RAID1:500G
RAID2:600G
RAID3:900G
RAID4:900G
RAID5:900G
RAID6:800G
页表
页表中存放虚拟页 每个虚拟页中存放页表项 页表项存放物理页号等等
物理地址:标记 + 行号 + 块内偏移 物理页号 + 页内偏移
可见不可见
汇编程序员可见的寄存器有基址寄存器(用于实现多道程序设计或者编制浮动程序)和状态/标志寄存器、程序计数器 PC 及通用寄存器组;而 MAR、MDR、IR 是 CPU 的 内部工作寄存器,对汇编程序员不可见。微指令寄存器属于微程序控制器的组成部分,它是硬 件设计者的任务,对汇编程序员是透明的(不可见的)。
中断
在响应外部中断的过程中,中断隐指令完成的操作包括:① 关中断;② 保护断点;③ 引出中断服务程序(形成中断服务程序入口地址并送 PC)
加法器
串行进位加法器: 2n + 1(n >= 3)
全先行进位加法器:6
部分先行进位:3 + 2 + 2 + 5 = 12