408-cop
45’
C1 计算机系统概述
- 针对概念或者性能指标出选择题,也可出综合性能分析题
计算机的发展历程 不考捏
计算机系统的层次结构
冯诺依曼提出“存储程序概念”,奠定了现代计算机基本结构
- 存储程序
- 将事先编制好的程序和数据送入主存之后才能运行,一旦程序被启动,就无须操作人员的干预,计算机自动逐条执行指令直到
- 硬件由运算器、存储器、控制器、输入设备、输出设备 构成
- 指令和数据同等地位存储在存储器中,形式上没有区别
- 指令数据都是二进制代码表示
- 指令由操作码和地址码构成
- 操作码指出操作类型
- 地址码指出操作数的地址
- 存储程序
功能部件
- I/O设备
- 输入设备
- 输出设备
- 存储器,分成内外存储器 ⭐️
- CPU能直接访问的叫主存储器
- 辅助存储器的内容只有调入主存才能被CPU访问
- 主存按照存储单元的地址进行存取(地址存取方式)
- 存储体存放二进制信息,经过地址译码找到所选的单元
- 数据寄存器 MDR用于暂存要从存储器中读写信息
- 时序控制信号
- MAR 用于寻址,对应着存储单元的个数,MAR十位,可以对应1024个存储单元 2^10
- MAR 长度与PC相等
- MDR与存储字长相等,一般为字节
- 他们虽然是存储器(寄存器)但也在CPU中
- cache 也在CPU中
- 运算器
- ALU 算术逻辑单元为核心
- 累加器 ACC
- 乘商寄存器 MQ
- 操作数寄存器 X
- 变址寄存器 IX
- 基址寄存器 BR
- 程序状态寄存器 PSW
- 判溢出 进位 借位 为负
- ALU 算术逻辑单元为核心
- 控制器(指挥中心)
- 程序计数器 PC (存放下一条指令的地址)
- 指令寄存器 IR (存放当前的指令)(内容来自的MDR)
- 控制单元 CU
- 指令中的操作码送到CU
- 地址码送到MAR以便取操作数 (已经2次访存了)
- 一次取指令
- 再取操作数(不过也要看寻址方式)
- CPU和主存之间通过一组总线相连,MAR地址会送到地址线,指向读写的主存单元;控制线中有读写信号线,指出操作的是读还是写;根据是读还是写来控制MDR中的数据是送到数据线上还是将数据线上的东西读到
- I/O设备
计算机软件
- 系统软件
- 保证计算机高效、和正确运行的基础软件
- OS
- DBMS
- 网络软件系统
- 标准库程序
- 保证计算机高效、和正确运行的基础软件
- 应用软件
- 不举例了
- 系统软件
三个级别的语言
- 机器语言
- 二进制代码语言,计算机唯一可以直接识别并且执行的语言
- 汇编语言
- 用英文单词或其缩写代替二进制的指令代码,转换成机器语言程序后才能在计算机的硬件上执行
- 高级语言
- C++ Go 方便设计人员写出解决问题的程序
- 机器语言
翻译程序有三类:对应汇编器、解释器、编译器 ⭐️
- 汇编程序:将汇编语言翻译成机器语言的程序
- 解释程序:将源程序中的语言栈执行顺序逐条翻译成机器指令并立即执行
- 编译程序:将高级语言编译成汇编语言or机器语言程序
软硬件逻辑等价
计算机系统的工作原理
- “ 存储程序”工作方式
- 执行程序前将数据和指令送入主存
- 根据PC取指令,指令译码,PC+“1”,取操作数,执行,送结果
- 周而复始
- 从源程序到可执行文件 ⭐️
- 编写的C语言程序被转换成一系列第几机器指令
- 指令按照可执行目标文件的格式打包,二进制存放磁盘
- 预处理:hello.c 写好 通过预处理器(cpp)将.h文件插入程序文件 变成hello.i
- 编译阶段:hello.i 通过编译器对预处理后的源程序进行编译,生成汇编语言源程序hello.s
- 汇编阶段:hello.s 被汇编器翻译成机器语言指令,并打包成可重定位目标文件的hello.o(二进制文件)
- 链接阶段:helle.o被链接器和标准库函数所在的目标模块合并,成为可执行文件hello并保存磁盘
- 程序执行过程的描述
- 指令执行过程的描述
- 取指令
- PC -> MAR -> M -> MDR -> IR
- PC内容送到MAR,MAR中内容直接送地址线,同时控制器将读写信号写送到读写信号线,主存根据线上的地址和读信号,从指定的存储单元读出指令,送到数据线,MDR从数据线收到指令信息,送到IR
- 简介:根据PC取指令到IR
- 分析指令
- OP(IR) -> CU(指令中的操作码送到CU)
- 根据IR中指令的操作码生成控制信号,送到CU
- 简介:指令译码并送出控制信号
- 执行指令
- Ad(IR) -> MAR -> M -> MDR -> ACC(指令中的地址码)
- 将IR中的地址码送到MAR,MAR中的内容送到地址线,同时控制器将读信号送到读写信号线,从主存中读出操作数,通过数据线送到MDR,再送到ACC
- 该执行的执行完,别忘(PC)+1 -> PC
- 取指令
- “ 存储程序”工作方式
课后习题
- 冯诺依曼的基本工作方式:控制流驱动方式
- 冯诺依曼特点:按地址访问并顺序指令指令
- CPU不包含指令译码器,指令译码器一般属于主存
- MAR位数:指令中的地址码长度,存储容量等
- MDR位数:存储字长
- 解释程序需要一遍翻译一遍运行,比较慢
- 汇编语言是用助记符来编写的
- 相联存储器,是一种不根据地址而是根据存储内容来进行存取的存储器,可以实现快速地查找快表。****既可以按照地址寻址也可以按照内容寻址(通常是某些字段),为了与传统寄存器作区别,称为按内容寻址的存储器。(硬件并发查找)
- 区别指令和数据:指令周期的不同阶段
计算机的性能指标
计算机的主要性能指标
- 字长
- 计算机进行一次定点数运算能处理的二进制位数
- 字长越长,精度越高,8B整数倍
- 数据通路带宽
- 数据总线一次能斌行传送数据的位数
- 与数据总线的宽度可能不同
- 主存容量
- MAR的位数反映了存储单元的个数
- 也反映了可寻址范围的最大值
- 运算速度
- 吞吐量和响应时间
- 吞吐量:系统在单位时间内处理请求的数量
- 响应时间:用户向计算机发起请求,计算机多久响应,等待时间
- 主频和CPU时钟周期
- 主频:衡量速度的重要参数,HZ为单位,3K赫兹代表每秒3000次
- 主频就是CPU时钟频率
- CPU时钟周期:1/主频,每个指令至少1个时钟周期
- 主频:衡量速度的重要参数,HZ为单位,3K赫兹代表每秒3000次
- CPI :执行一条指令所需要的时钟周期数
- CPU执行时间 :CPU时钟周期数量/主频=(指令条数xCPI)/主频
- MIPS:每秒执行多少百万条指令
- 更多指标
- MFLOPS:每秒多少百万次浮点数运算 10^6
- GFLOPS:每秒执行多少十亿次浮点数运算 10^9
- TFLOPS:每秒执行多少万亿次浮点数运算 10^12
- PFLOPS:10^15
- EFLOPS:10^18
- ZFLOPS;10^21
- 基准程序
- 用于进行性能评价的一组程序
- 吞吐量和响应时间
- 字长
几个专业术语
- 系列机:指令系统相同,型号不同
- 兼容:软硬件的通用性
- 可移植性:软件进行很少的修改可以运行在另一个系列计算机的可能性
- 固件:将程序固化在ROM中存成的部件称为古剑,有软件特性的硬件,快于软件,灵活于硬件,软硬件结合的产物,目前操作系统已经实现了部分固化,软件永恒存储于ROM中。
课后习题
- 寄存器由触发器构成
- 存储字长、指令字长、机器字长的讨论 ⭐️
- 存储字长:一个存储单元存储一串二进制代码的位数
- 指令字长:机器指令中二进制代码的总位数,指令字长取决于从操作码的长度、操作数地址的长度和操作数地址的个数。不同的指令的字长是不同的
- 机器字长:计算机进行一次整数运算所能处理的二进制数据的位数
- 机器字长也是用于整数运算的数据通路的宽度
- 一定与机器字长相同的是
- ALU 通用寄存器
- 举个例子,如果主存容量4GB,一个字是32位(4B),按字寻址,那么存储字长就是32B,指令字长中的地址码就是30位(4GB/4B=2^30个)
- 对用户透明(看不见):⭐️
- 指令寄存器
- IR、MAR、MDR等CPU内部工作寄存器
- 对用户不透明(看得见):
- 程序寄存器、状态寄存器、通用寄存器(汇编程序员可见)
- CPU 的CPI与时钟频率无关 废话 一个是程序的特点 一个是CPU特点
- 高性能计算机的主要技术是并行技术
- 决定计算机精度的主要指标是字长
- 操作系统命令 不等于 指令
综合应用题:
- 指出位数 信息通路
- 求CPI MIPS速率 和程序执行时间
- CPI一般是数学期望
- MIPS就是时钟频率/CPI (MIPS:每秒执行多少百万条指令)
- 时钟频率就是每秒包含的CPU时钟数量
- 程序执行时间一般是CPI x I(总共指令数)x 一个CPU时钟的长度
- 求CPU时钟周期、求平均指令周期、求平均执行速度MIPS
- 主频高的CPU不一定比主频低的CPU快,CPU流水线其他的指标也应该纳入考虑。
本章节的二轮学习透彻了很多,很多第一轮没有搞懂的知识也一点点熟悉了起来
C2 数据的表示和运算
数值和编码
- 原码、反码、补码、移码
- 原 0不唯一
- +1010 00001010
- -1010 10001010
- 补 0唯一
- +1010 00001010
- -1010 10000110
- 反 0不唯一
- 移 0唯一
- 直接移动
- 原 0不唯一
- 原码、反码、补码、移码
运算方法和电路
- 异或门(一个圆圈一个加号)
- 不一样就1 一样就0
- 异或门(一个圆圈一个加号)
PSW的标志 ⭐️
- 溢出标志OF 1溢出
- 符号标志SF 1负
- 零标志ZF 0为1
- 借or进位标志CF 借进1
移动位置补的规则
- 负补 左0右1
定点数加减法
- 补就正常的补
定点数乘除法(伏笔)
习题:
- 32:负补码 补位置 添加1
- 33:溢出的判断用十进制简单
- 34:大端是符合我们人类的方式
- 边界对齐:起始地址/自身长度(字节)整除
- 35:我会
- 36:负补 左0右1(双符号位判断:01上溢 10下溢出)
- 37:真值一眼
- 38:补码变成无符号数
- 39:小端存储
- 40:真值
- 41:小端+补码
- 42:**逻辑左右移 都补0 **
- **补码算数移动,符号不移动,右移动补符号位,左边0 **
- 43:借位 溢出
- 44:数值转换(类型)
- 45:边界对齐+小端
08-2020、02-2011(伏笔)
浮点数的表示
- 数符S
- 阶码E(不能全1or全0)
- 尾数M
- 1 8 23 32位单精度
- 1 11 52 64位双精度
加减:(需要再看一下视频的)
- 对阶:小向大看齐
- 尾数求和
- 规格化
- 舍入
- 溢出判断
课后习题:
- 23 浮点数相加减
C3 存储系统
3.1 存储器概述
作用分类
- 主存储器(可以和辅助存储器和Cache交换数据)
- 辅助存储器(暂时不用的程序和数据)
- 高速缓冲存储器(主存CPU之间,存放常用的指令和数据)
存储介质分类
- 磁表面存储器
- 磁芯存储器
- 半导体存储器
- 光盘存储器
存取方式分类⭐️
- 随机存储器RAM:随机存起,时间和位置无关
- 静态RAM
- 动态RAM
- 只读存储器ROM
- 只能随机读出而不能写入
- 串行访问存储器
- 顺序存取存储器/直接存取存储器
- DAM 主存存取存储器
- SAM 顺序存取存储器
- 随机存储器RAM:随机存起,时间和位置无关
可保存
- 易失性存储器
- 非易失性存储器
- 破坏性读出(需要再生操作)or非破坏性读出
性能指标
- 存储容量=存储字数x字长
- 单位成本
- 存储速度:数据传输率=数据宽度/存储周期
- 存取时间Ta(启动存储器到完成操作的时间)
- 读出时间和写入时间
- 存取周期Tm(连续两次独立访问存储器的操作之间需要最小时间间隔)
- 主存带宽Bm
- 存取时间Ta(启动存储器到完成操作的时间)
- 对于任何一种存储器,读写以后需要一段时间回复内部状态
- 破坏性存储周期比存取时间打的多,因为读出需要再生
多层次存储系统
- Cache 主存 硬件and速度趋近于Cache
- 主存 辅存 OS+硬件and速度趋近于主存
- 逐渐形成了虚拟存储系统,编程可用地址空间远大于主存
- 上层是下层副本
课后习题:
- 相联存储器是按照内容制定方式和地址指定方式相结合
3.2 主存储器
易失⭐️
- 主存:DRAM
- 栅极电容
- 信息会自动消失,需要刷新 2ms
- 集中刷新:死时间
- 分散刷新:降速
- 异步刷新:死时间
- 破坏性读出,需要再生
- 行列地址分两次送(减少选通线数量)
- 现在常用SDRAM
- Cache:SRAM
- 双稳态触发器,MOS
- 非破
- 快
- 行列地址同时送
- 主存:DRAM
非易(断电不G)⭐️
- ROM 只读
- MROM
- PROM
- EPROM
- 可擦除可编程
- EEPROM
- UVEPROM
- 闪存(U盘)(基于EEPROM)
- 快速可擦除重写
- SSD
- ROM 只读
SRAM与DRAM
- P88
BIOS芯片(ROM、里面有自举装入程序)+内存条 就是主存
- 逻辑上主存由RAM和ROM组成,统一编址
双端口RAM
- 同时读/写不同
- 可同时读同
- 不能同时读or写同
多体并行存储器⭐️
- 可以理解为多体并行
- 体号+体内地址
- 高/低位交叉编址的多体存储器
- T=4r
- 高 1 8 16 24(需要5T读5个)(单纯扩容)
- 低 1 2 3 4 (T+(n-1)r)好!! n无穷趋近r(双通道)
- 实际应用的情况下需要连续访问
- 存取流水线
- 存取周期为T,存取时间为r
- 交叉模块数应该m=>T/r
- 体号判断存储体
- 根据x%m
- 体块独立
单体多字
- 会读多余的信息
- 灵活性差
- 速度不会慢很多
课后习题:
- 行列通选线、读写控制线
- 电源线 接地线 DRAM地址引脚服用激素后
- 半导体一次完整刷新过程需要占用一个存储周期(读出又存回)
- 刷新放大集成在RAM
- RAM和ROM都可以随机存取(只读概念没有被保留 可以电擦除等方式写入)
3.3 主存储器与CPU的连接
连接原理
- 数据总线宽度=存储字长
- CPU包含MARMDR
- 通过数据总线 地址总线 控制线和主存沟通
- 地址线A
- 数据线D
- 片选CS (注意高低点平 有可能CE)
- 读写WEorWR(加了一 低写高读)write enable
容量扩展 ⭐️
- 容量=字x位
- 利用译码片选法(而不是线选,因为更多地址,地址连续)
- 位扩展(数据总线传送能力得以发挥)
- 8Kx1位 8个 (8K个单元)
- 8Kx8位
- 每次是都选中的
- 字扩展(更好利用CPU寻址能力)
- 需要译码器来片选
- 字位扩展
- CPU先往地址线送电流,稳定了再使能译码器,然后片选
习题:
- 位扩展不影响地址的计算
- 字位扩展题 体号+体内地址
- MAR位数直接决定了主存空间的大小
- 但是主存空间大小不能反应位数
3.4 外部存储器
- 磁盘存储器(控制器标准 ATA SATA)
- 容量大、价格低
- 重复使用
- 长期保存不丢失、脱机 存放
- 非破坏性读出
- 组成
- 磁头数
- 柱面数
- 扇区数 (以扇区为单位读写)
- 性能指标
- 格式化<非格式化容量
- 记录密度
- 道密度
- 位密度:单位长度二进制代码位数,越内磁道密度越大
- 面密度为乘积
- 存取时间
- 寻道+旋转(半圈)+传输
- 如何指明
- 磁盘地址:驱动器号、柱面号、盘面号、扇区号
- 磁盘阵列
- 逻辑相邻物理不同方便读取
- RAID0:无冗余无校验
- RAID1:镜像磁盘阵列
- RAID2:海明码
- RAID3:位交叉奇偶
- RAID4:块交叉奇偶
- RAID5:无独立校验奇偶
- SSD
- 基于闪存技术
- 扇区/块为读取最小单位
- 读快随机写很慢
- 读写性能高于磁盘
- 以页为单位读写 相当于磁盘的一个块(扇区)
- 以块为单位擦除
- SSD的一个块相当于一个磁道
- 闪存翻译层负责翻译逻辑块号找到对应页(映射)
- 容易磨损(引入磨损均衡技术)
- 课后习题:
- 访盘时间=控制器延迟+平均寻道+平均旋转(半圈)+传输⭐️
- 扇区中包含数据、地址和校验等信息
- RAID 考了一次
3.5 高速缓冲存储器Cache ⭐️
局部性原理
Cache基本工作原理
计算命中率
计算平均访问时间
主存存储空间分块,主存和Cache以块为单位进行数据交换
主存的块也被称为一个页/页面/页框
cache中的块也称为行
问题
- 如何区分Cache和主存数据块的对应关系(映射方法)
- Cache满了怎么办(替换算法)
- CPU改了Cache 主存如何一致性?(Cache写策略)
cache和主存的映射方法(都叫块号 方便)
- 每个Cache加一个标记、用标记记录对应的主存块号
- 用有效位来决定有效与否
- 全相联映射(主存快可以放在Cache任意位置)
- 命中率高,查找标记慢
- 直接映射(Cache快号=主存快号%cache总快数)
- 速度最快,只比较一个,但是cache存储空间利用不充分
- 组相连映射(组号=主存块号%分组数)
- 折中 综合好
- 先要对内存分块:主存块号+块内地址
- 然后看映射方法:每一组里有几个数据,对应标记位置有几位
替换算法
- 全相联:cache满了才替换
- 直接映射:直接替换
- 组相连:组满了替换
- RAND随机算法
- FIFO先进先出算法
- LRU近期最少使用(OS中 LRU 最近最久未使用置换算法)一样 ⭐️
- 计算机的实现使用计数器,Cache满了以后替换计数器最大的
- 命中时所命中的清0 比他低的计数器+1(计数器值低)
- 未命中有空闲,新装的为0,其他非空闲加1
- 未命中无空闲,最大的被淘汰,新为0,其他+1
- 硬件实现需要冗余信息
- 频繁访问的值大于cache行的数量,很容易抖动
- LFU最不经常使用
- 计数器替换计数器值最小的(一样就FIFO 或者行号小的滚蛋)
- 新的块计数器0 每访问一次就1
- 经常被访问 未来不一定用得到 实际不好
- 抖动:刚换出又被访问
cache写策略(保持一致性)
- 写命中
- 写回法
- CPU对Cache写命中,只修改Cache内容,不立即写入主存
- 换出写回、需要脏位(数据不一致)
- 全写法
- CPU对Cache写命中,cache和主存一起写
- 使用写缓冲(write buffer SRAM FIFO 写SRAM很快 控制电路写回内存)
- 可能缓冲饱和发生阻塞
- 写回法
- 写不命中
- 写分配法
- 先把内存快调入cache,然后配合写回法
- 非写分配法(配合全写法)
- 直接写主存
- 写分配法
- 多级别cache L1 L2 L3
- 写命中
习题:(伏笔啊伏笔)07 09
- 时间局部性:一条指令一旦执行,接下来可能再执行
- 空间局部性:一个存储单元背访问,他附近的很多单元也很快被访问
3.6 虚拟存储器
一点回忆
- cache和主存用块交换数据
- 一个进程在逻辑上被分为若干个大小相等的页面,每个页面可以离散放入不同的主存块
- 通过页表找到在内存中的位置
- 快表SRAM 相联存储器 可以通过内容
- 主存DRAM
- 快表有页表项副本
- cache中有主存块副本
虚拟存储器的基本概念
- 给予了好像更大的内存空间
页式虚拟存储器
段式虚拟存储器
段页式虚拟存储器
虚拟存储器与Cache的比较
课后习题:
- cache是主存的副本
- TLB是页表的副本
- 是否已经调入主存
- 找寻一个东西,先从TLB找映射
- 再从page找映射
- 取数、处理
- 再在cache找是否有
- 再在主存里找
- TLB 页表 cache 主存(命令组合访存过程 有虚拟地址的情况下) ⭐️(10)
主存中包含的东西
- 地址译码器(务必记住不是包含在CPU)
指令
- 是计算机运行的最小功能单位
- 操作码:干什么
- 地址码:干谁
- 最后一条指令的操作码是停机,地址码没啥吊用
指令(机器指令 所有指令的集合称为指令系统、指令集)
- 根据地址码数目不同分类
- 0地址指令:OP
- 不需要操作数、关中断、停机
- 堆栈计算机,两个操作数隐含在栈顶和次栈顶,结果压栈
- 1地址指令:OP+A1
- 只要一个操作数(+-1、取反、求补)
- 需要两个操作数,一个隐含某个寄存器、比如ACC、
- 2地址指令:OP+A1+A2(操作+目的+源)
- 用于需要2个操作数的算术运算、逻辑运算等
- 3地址指令:OP+A1+A2+A3
- 需要两个操作数的算数运算、逻辑运算等
- 4地址指令:OP+A1+A2+A3+A4(加的是下址)
- PC改为A4
- PS:取指令访存、取数访存、存数访存
- 位数越长,地址码数量越多,寻址能力越差(能力看一个个的位数)
- 0地址指令:OP
- 根据指令长度分类 ⭐️⭐️
- 要点
- 指令字长:指令总长度(可能会变)
- 机器字长:一次整数运算能处理的二进制数据的位数
- 存储字长:一个存储单元中二进制代码位(MDR)
- 定长指令字结构:所有指令长度相等
- 变长指令字结构:各种指令长度不等
- 要点
- 根据操作码长度不同分类
- 定长操作码:译码电路简单,灵活性差
- 可变长操作码 :相反
- 定长指令字结构+可变长操作码:扩展操作码指令格式⭐️
- 根据操作类型分类
- 数据传送LOAD
- 算术逻辑操作
- 算数、逻辑
- 移位操作:算术移位、逻辑移位、循环移位
- 转移操作JMP、JZ、CALL、RETURN、TRAP
- 输入输出操作
- 根据地址码数目不同分类
扩展操作码指令格式
- 不允许短是长的前缀
- 操作码不能重复
- 频率更高,操作码越短最好
- 4_1_2
C4 指令系统
4.1 指令格式
- 指令
- 是计算机运行的最小功能单位
- 操作码:干什么
- 地址码:干谁
- 最后一条指令的操作码是停机,地址码没啥吊用
- 指令(机器指令 所有指令的集合称为指令系统、指令集)
- 根据地址码数目不同分类
- 0地址指令:OP
- 不需要操作数、关中断、停机
- 堆栈计算机,两个操作数隐含在栈顶和次栈顶,结果压栈
- 1地址指令:OP+A1
- 只要一个操作数(+-1、取反、求补)
- 需要两个操作数,一个隐含某个寄存器、比如ACC、
- 2地址指令:OP+A1+A2(操作+目的+源)
- 用于需要2个操作数的算术运算、逻辑运算等
- 3地址指令:OP+A1+A2+A3
- 需要两个操作数的算数运算、逻辑运算等
- 4地址指令:OP+A1+A2+A3+A4(加的是下址)
- PC改为A4
- PS:取指令访存、取数访存、存数访存
- 位数越长,地址码数量越多,寻址能力越差(能力看一个个的位数)
- 0地址指令:OP
- 根据指令长度分类 ⭐️⭐️
- 要点
- 指令字长:指令总长度(可能会变)
- 机器字长:一次整数运算能处理的二进制数据的位数
- 存储字长:一个存储单元中二进制代码位(MDR)
- 定长指令字结构:所有指令长度相等
- 变长指令字结构:各种指令长度不等
- 要点
- 根据操作码长度不同分类
- 定长操作码:译码电路简单,灵活性差
- 可变长操作码 :相反
- 定长指令字结构+可变长操作码:扩展操作码指令格式⭐️
- 根据操作类型分类
- 数据传送LOAD
- 算术逻辑操作
- 算数、逻辑
- 移位操作:算术移位、逻辑移位、循环移位
- 转移操作JMP、JZ、CALL、RETURN、TRAP
- 输入输出操作
- 根据地址码数目不同分类
- 扩展操作码指令格式
- 不允许短是长的前缀
- 操作码不能重复
- 频率更高,操作码越短最好
- 4_1_2
4.2 指令的寻址方式⭐️(如何确定下一条指令的存放地址)
- 计算机的工作过程
- PC程序计数器+“1”(这个1由编址方式,一个指令字长决定)
- 指令寻址是为了找到下一跳将执行指令的地址
- 始终由程序计数器PC给出下一条指令的地址⭐️
- CPU先读入指令的第一个字来判断几地址指令,来确定指令占几个字节
- 接着修改CPU的值
- (PC)+ n -> PC(顺序寻址)n为本条指令长度
- 每次读一个字 都需要一次访存(伏笔)
- 如果指令三个字,取指令都要三次?(伏笔)
- 跳跃寻址
- 转移指令给出地址,放到PC
- PC先自动+1 然后无条件转移7
- 指令寻址:顺序or跳跃
- 常见的数据寻址方式 ⭐️(确定本条指令的地址码指明的真实地址)
- 在地址码(形式地址)之前需要有一个字段标志寻址特征
- 求出操作时的真实地址称为有效地址(EA)
- 直接寻址:
- 指令字中的形式地址A就是EA
- 取指令1次访存,执行指令1次访存
- 操作数地址不易修改、灵活性差
- 寻址范围受地址长度限制
- 立即寻址
- 显式写在指令中(立即数)
- 特征是#
- 立即数的范围收到位数限制
- 间接寻址:(一次)
- 形式地址中存放的地址是EA
- 取指令1次访存,执行指令2次访存
- EA=(A)
- 二次间址EA=((A)):方便编程,互相调用
- 可以扩大寻址范围,范围受存储字长限制
- 便于编制程序,但多次访存,效率低
- 寄存器寻址:
- 地址码指向了某个寄存器的编号
- 寄存器里存放了操作数
- 1次访存
- 指令字短、执行快但贵
- 寄存器间接寻址:
- 寄存器里放的东西是EA
- EA=(Ri)
- 比一般间接寻址更快
- 2次访存
- 隐含寻址:
- 指令中隐含操作数的地址
- 指明了一个操作数的地址、另一个可能在ACC里
- 利于缩短字长、需要增加存储操作数或者隐含地址的硬件
- 偏移寻址 区别在于偏移的起点不一样 ⭐️ 这些在执行期间都1次访存捏
- 基址寻址(程序的起始存放地址作为起点)
- EA=(BR)+A
- BR是基址寄存器、就是OS中的重定位寄存器
- BR可以由通用寄存器代替
- 指明寄存器的位数要看有几个寄存器
- 便于整个程序程序浮动、方便多道程序并发执行
- 基址寄存器的值放在PCB,面向OS,由操作系统或者管理程序决定
- 程序员看不见基址寄存器捏
- 程序员可用汇编语言直接操作通用寄存器(如果没被定为基址寄存器)
- 变址寻址(程序员自己决定哪里作为起点)
- EA=(IX)+A
- IX是变址寄存器,可能是专门,可能是通用
- IX面向用户,基址寄存器中的由OS管理
- 适合循环程序
- A作为基地址
- (IX)作为偏移量
- (IX)作为指针不断变大,偏移量是会改动的
- 相对寻址(以PC所指的地址作为起点)
- EA=(PC)+A
- (PC)基地址
- A作为偏移量,补码表示,可正可负
- 可以前后偏移,方便转移指令、程序内部浮动
- A是相对于下一条指令地址的位移量
- 挪动一个循环的位置
- 分开程序与数据段,这样段内相对位置一定不变
- 基址寻址(程序的起始存放地址作为起点)
- 堆栈寻址
- 操作数放在堆栈中,隐含使用堆栈指针SP作为操作数地址
- SP:Stack Pointer
- 放在寄存器里
- 寄存器堆栈(硬堆栈)(快、贵、不用访存)
- R0 R1 R2 R3
- 顶为0 底为3
- 因此弹出后要(SP)+1 -> SP
- 主存划分堆栈(软堆栈)(偏移、实际)
4.3 程序的机器级代码表示
先PASS(伏笔)
4.4 CISC和RISC的基本概念
- 指令系统
指令格式:如何用二进制代码表示指令
指令寻址方式:
- 给出下一条指令的地址
- 给出要操作的对象的地址
CISC&RISC:两种设计方向
- CISC complex
- x86,一条指令一个复杂功能
- 采用存储程序的设计思想,一个比较通用的电路配合存储部件完成指令
- RISC reduced
- arm,一条指令一个基本动作,复杂功能由基本功能组成
- 功耗更低,一条指令一个电路,电路相对简单
- 并行、流水线简单
- 运算类数字一定来自于寄存器
- CISC complex
对比表P195
- CISC复杂庞大
- CISC字长不固定
- CISC访存指令不限制 RISC只有Load/Store
- CISC不同指令的执行时间、使用频率差距大
- 通用寄存器CISC少!!!
- 目标代码CISC很难优化
- CISC微程序、RISC组合逻辑
- CISC可以通过一定的方式实现指令流水线
- RISC必须实现!!!!
- 间址结束 MAR存放操作数的地址
C5 中央处理器
- 本章节问题:CU如何控制的呢?
5.1 CPU功能与基本结构
CPU (5_1视频图很重要!!!!)⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️
- (程序员是否可见;可见(不透明)不可见(透明))
- 运算器(数据加工)
- 算术逻辑单元(ALU)
- 暂存寄存器
- 累加寄存器(ACC)可见
- 通用寄存器组(堆栈指针等)可见
- (与ALU有专用数据通路,可多路选择器控制)
- 或者三态门控制,避免一直向ALU传送数据
- 专用结构复杂,硬件量大
- 单总线的话也可以完成:结构简单容易时间,但冲突多
- R0+R1,一起送总线会冲突
- 暂存寄存器:暂存从主存读来的数据(放通用会破坏原有内容)
- 程序状态字寄存器(PSW) (也叫标志寄存器)可见
- 乘商寄存器(MQ)
- 移位器
- 控制器 (控制协调计算机部件执行程序的指令序列、取、分析、执行)
- 注意区别CPU内部总线和外部数据总线
- 控制单元(CU):控制单元,分析指令,给出控制信号
- 指令译码器(ID):对操作码字段译码,向控制器提供特定操作信号
- 指令的操作码作为指令译码器的输入
- 对应输出端被选通,决定接下来是什么微操作
- 时序系统:产生各种时序信号
- 微操作信号发生器:根据IR和PSW以及时序信号来形成控制信号
- 那些PCout PCin 就是他发出的
- 指令译码器(ID):对操作码字段译码,向控制器提供特定操作信号
- 指令寄存器(IR):当前执行的那条指令
- 程序计数器(PC):下一条指令在主存中的存放地址 可见
- 存储器地址寄存器(MAR):存放要访问的主存单元的地址
- 存储器数据寄存器(MDR):存放向主存写入 / 从主存读出的信息
- MDRin MDRout(从CPU内部数据总线接受)
- MDRinE MDRoutE(从CPU外部数据总线接受)
重要过程 ⭐️这一行一行都是微操作啊!对应着inout的控制信号
- 取指周期:把PC对应的地址从M中找出来放到IR(取指后PC自动+1)
- (PC)-> MAR(本环节后CU会向控制总线发出读信号,传到MM)
- M(MAR)-> MDR
- (MDR)-> IR(此时MDR和IR是一样的,复制一份)
- 分析指令:指令的操作码送到CU,CU分析指令
- OP(IR)-> CU
- 间址周期
- AD(IR) -> MAR 或者AD(MDR)-> MAR
- (本环节后CU会向控制总线发出读信号,传到MM)
- M(MAR)-> MDR(得到了有效地址)
- 执行周期
- 分开讨论
- 中断周期(MAR发送地址给内存)
- 暂停当前任务取完成其他任务
- 为了恢复当前任务,需要保存断点(SP-1,然后放入)
- 也是倒过来的,从上往下放PC的值
- 本质上就是把断点保存在某个存储单元
- 保存断点,送中断向量,处理中断请求
- 取指周期:把PC对应的地址从M中找出来放到IR(取指后PC自动+1)
5.2 指令周期的数据流
- 指令周期:CPU从主存中取出并执行一条指令所需要的全部时间⭐️
- 一个指令周期包含多个CPU周期(机器周期)
- 机器周期
- 定长:一个机器周期内节拍数相同
- 不定长:不同
- 机器周期
- 一个CPU周期包含很多时钟周期(节拍、T周期、CPU时钟周期)
- 主频 3.0GHz 1s3.0G个节拍
- 取指周期
- 取指令
- 译码(超快)
- 执行周期
- 举例子
- 空指令:整个指令周期就是取址周期
- 加法指令:第一个周期取,第二个周期执行,可能长度不同
- 乘法指令:取+执行,执行肯定比加法长
- 间接寻址:取指周期+间址周期+执行周期
- 带中断周期的指令:取周期+间周期+执行周期+中断周期
- 四个触发器来确定处于什么周期
- 取 ER=1,为了取
- 间 IND=1,为了有效地址
- 执 EX=1,为了取操作数
- 断 INT=1,为了保存程序断点(伏笔)
- 都有访存目的不同
- 一个指令周期包含多个CPU周期(机器周期)
- 指令执行方案
- 单指令周期
- 所有指令相同执行时间
- 指令之间串行
- 指令周期取决于最长的那条指令
- 导致本来短的也变长,效率变差
- 多指令周期
- 不同类型指令不同的步骤,指令之间串行
- 可以用不同的时钟周期来完成不同指令的执行过程
- 需要更复杂硬件设计
- 流水线方案
- 每一个时钟周期启动一条指令
- 多条指令同时
- 单指令周期
5.3 数据通路的功能(ALU需要配合暂存器)终于整明白了!!!!
CPU内部单总线结构
- 视频5_3_1 ⭐️
- 举例ADD (R0) R1
- ((R0))+(R1)->(R0)写回R0指向的存储单元
- ADD 目的 源 放回R0
- 需要一次间接寻址
CPU多总线结构
CPU专用数据通路
- 从连接到CPU内部总线的xxin xxout
- 变成C0 C1 C2等等
CPU的功能
- 指令控制
- 操作控制
- 时间控制
- 数据加工
- 中断处理 (鼠标)
指令周期问题
- 指令周期:cpu从主存取出并执行一条指令的全部过程
- 指令周期由若干机器周期组成,机器周期又叫CPU周期
- 一个机器周期又包含很多时钟周期,节拍,CPU时钟周期
- 时钟周期是CPU操作的最基本单位
5.4 控制器的功能和工作原理
回顾
- 一个节拍内可以并行完成多个相容微操作
- 同一个微操作可能在同指令的不同阶段使用
- 为了简化设计选择定长机器周期,以可能出现的最大节拍数为准(访存所需的为参考)
如何确定当前节拍应该发出哪些微命令?
- 指令操作码:译码器
- 目前机器周期:FE IND EX INT(集成在CU内)
- 节拍信号:节拍发生器确定当前第几个节拍 t1t2t3..循环
- 机器状态条件:PSW ACC I/O 主存
如何实现微命令对应的微操作?
- 对应的控制信号接上对应的节拍发生器,机器周期,与门!!
- 逻辑表达式决定了电路设计
- 最后的结果就是,某一条(如M(MAR)-> MDR)需要的与门是如何建立的
- 在FE IND EX三个阶段的T1节拍 都要用,再配合机器状态条件
控制单元CU的实现
- 硬布线:RISC:指令很多,很复杂,扩充指令很难
- 纯硬件实现
- 让微操作对应的控制信号有效、选通 ⭐️
- 设计步骤
- 分析每个阶段微操作序列(确定哪些指令在什么阶段,在什么条件下会用)
- 选择CPU控制方式(定长?不定?)
- 安排微操作时序(如何用三个节拍完成全部微操作?)
- 微操作顺序不能随意修改
- 对象不同尽量一个节拍
- 短的尽量一个节拍,允许先后
- 电路设计
- 微程序:CISC(考频更高)
软硬件相集合
程序(简单来说,程序的一条条指令就是一个个微程序,微程序再对应自己微指令)
- 指令是对程序步骤的描述,微程序是对指令执行的描述
- 指令是对微指令功能的封装 - 指令1:微程序1
- 微指令11
- 微命令111:完成微操作1xxx
- 微命令112:完成微操作2xxx
- 微指令12
- 微指令11
- 指令是对程序步骤的描述,微程序是对指令执行的描述
CU中包含(工作流程就看书P231)
- CM 控制存储器:存放指令对应的微程序,可用只读存储器ROM构成,非易失
- 地址访问,指令1的微程序,指令2的微程序
- CMAR,别名uPC,微地址寄存器,接受微地址形成部件送来的微地址
- 为在CM中读取微指令做准备
- 其实是PC和MAR的一个结合体
- 地址译码(器)
- 把地址码转化为存储单元的控制信号
- MAR中的地址需要通过地址译码器才能选中主存中的一个单元
- 对比:那么同样CMAR中的下地址想要选中CM中的单元也需要地址译码
- CMDR,别名uIR
- 用于存放从CM中取出的微指令,与微指令字长相等
- 下地址再给顺序逻辑
- 操作控制部分直接传出CU给到CPU内部和系统总线的控制信号
- 微指令基本格式:
- 操作控制 循序控制 两个字段 不同bit位
- 操作控制 当前微指令完成哪些微操作
- 顺序控制 指明下一条微指令的地址
- 操作控制 循序控制 两个字段 不同bit位
- 微地址形成部件
- 产生初始微地址以保证微地址的连续执行(又原来程序指令的操作码给出)
- 顺序逻辑
- 标志、CLK
- CM 控制存储器:存放指令对应的微程序,可用只读存储器ROM构成,非易失
所有指令的取址周期、间址周期、中断周期对应的微指令序列一样,可共享
- CM中取址周期、间址周期、中断周期就一份
- 对应不同的执行周期的微程序不一样
补充:指令的地址码部分有一部分会用来解释寻址方法
- 寻址特征也会送给顺序逻辑 判断是否需要跳过
- 硬布线:RISC:指令很多,很复杂,扩充指令很难
微指令的设计
- 微命令微操作一一对应,一个微命令对应着一个输出线
- 微命令可以并行,因此一条微指令可以包含多个微命令
- 格式(首先要知道微命令是否相容互斥)
- 水平型微指令(一条微指令可以定义多个可以并行的微命令)
- 格式:操作控制、顺序控制
- 微程序短,执行速度快
- 微指令长,编写烦
- 垂直型微指令(一条微指令1定义一个微命令,由微操作码规定具体功能)
- 微操作码、目的地址、源地址
- 微程序长,执行慢
- 微指令短,简单编写
- 混合型 微指令
- 都不长,很综合
- 水平型微指令(一条微指令可以定义多个可以并行的微命令)
微指令编码(控制)方式:如何对控制字段进行编码
- 目标:保证速度的情况下尽量缩短微指令字长
- 水平型微指令
- 直接编码方式:每一位代表一个微操作命令
- 控存容量变大
- 字段直接编码方式:(每一个编码就是(PC)-> MAR 这种了 这就是微操作)⭐️
- 微指令控制字段分段
- 一个段内互斥
- 不同段相容
- 信息位不能太多,否则译码线路复杂,时间增加
- 留状态000 表示不操作
- 稍微比直接编码慢一点
- 字段间接编码方式
- 一个字段的微命令可能需要另一个字段的微命令来解释
- 也叫隐式编码
- 缩短字长,但并行控制降低
- 直接编码方式:每一位代表一个微操作命令
微指令地址的行程方式:地址字段编码问题 ⭐️
- 下地址字段直接指出,断定方式 需要几位的问题 32x4+2
- 根据机器指令的操作码形成,机器指令的操作码部分经过微地址形成部件形成
- 增量计数器法:(CMAR)+1 -> CMDR
- 分支转移需要指明转移方式和转移地址
- 通过测试网络:顺序逻辑来
- 由硬件直接产生微程序入口地址
- 第一条微指令地址,专门硬件产生
- 中断周期微程序首地址
微程序控制单元的设计
- 对比
- 硬布线是选通线的问题
- 微程序需要把指令操作码送给微地址形成部件
- 然后微地址形成部件指明这条指令的执行周期在微程序的起始地址
- 写出微操作序列
- 写出指令的微操作命令和节拍安排
- 确定微指令格式
- 编写微指令码点
- 对比
微程序设计分类
- 动态微程序设计
- 通过改变微指令和微程序来改变机器指令,采用EPROM
- 静态微程序设计
- 微程序无需改变 使用ROM (CM)
- 动态微程序设计
毫微程序设计
- 深层套娃
5.5 异常和中断机制
5.6 指令流水线
指令执行过程:
- 取指:根据PC访问主存,取出一条送到IR
- 分析:对指令操作码译码,根据地址字段找到EA,取出操作数
- 执行:根据操作码,完成功能,写结果到指定位置
执行方式
- 顺序执行方式:控制简单,硬件代价小
- 速度较慢,处理机只有一条在执行,利用率低
- 引入流水线
- 一次重叠方式:需要硬件较大开销,控制过程更复杂,各部件利用率高
- 二次重叠方式:
- 更多阶段,不同阶段硬件独立,增加并发度
- 五个阶段比较常见捏
- 二次重叠方式:
- 一次重叠方式:需要硬件较大开销,控制过程更复杂,各部件利用率高
- 顺序执行方式:控制简单,硬件代价小
图 (P248)
- 指令执行过程图
- 列是指令序列,行是时间
- 时空图
- 列不同的阶段,行是时间
- 指令执行过程图
流水线的性能指标
- 吞吐率:任务数n,处理完成n个任务的时间为Tk
- 吞吐率=n/Tk(单位时间完成任务数量)
- Tk=(k+n-1)t
- 装入时间:第一条指令从开始到结束
- 排空时间:最后一条指令从开始到结束
- 一般取t为一个时钟周期
- 加速比:
- 完成同样一批任务不是用流水线所用时间和使用所用时间只比
- 最大加速比就是k(一个指令被分的阶段数)
- 效率:流水线设备利用率
- 忙碌时间/全部时间(面积)
- 最高效率1
- 吞吐率:任务数n,处理完成n个任务的时间为Tk
5.7 多处理机的基本概念
间址结束 MAR存放操作数的地址
空指令NOP:1个机器周期,只需要取指令然后分析指令
加法指令ADD:2个机器周期,有可能不等
乘法指令MLT:2个,但是不同指令执行周期可能不等
具有间址寻址的指令:3个、取地址周期、间址周期、执行周期
指令与微指令,程序与微程序
- 指令是对程序执行步骤的描述
- 微指令是对指令执行步骤的描述
- 程序是由指令序列构成
- 微程序下:每一种指令对应一个微程序一个微程序要执行很多微指令,微指令是由很多微操作构成的
经典五段式指令流水线 5_6_2(MIPS架构 是第一个RISC ARM是其延伸)⭐️
- 有些指令可能会跳过某些阶段,虽然不需要,但也逃不掉捏
- 每个阶段耗时一样,最长考齐,100ns,为了等待,需要一个缓冲寄存器(锁存器)
- (1)IF(控制器内部触发器)Instruction (指令) Fetch
- 根据PC 从指令cache中找到指令放到IF阶段的锁存器
- (2)ID Decode
- 译码+取数(从通用寄存器中) 放到锁存器(Imm放立即数)
- (3)EX execute
- 取出操作数,执行,找到EA
- (4)M memory(访存)
- 根据地址从数据cache中找到到数据
- (5)Writeback(写回)
- 写回主存or锁存器or某个通用寄存器
- 分析:
- 指令数据两个cache模块,14阶段并行
经典的五类指令(Rs Rd)
- 运算类指令
- ADD Rs Rd :(Rs)+(Rd)-> Rd
- ADD #996,Rd :#996+(Rd)-> Rd
- SHL Rd:(Rd)<<<2 -> Rd(左移)
- 无访存,但得等,M为空段
- LOAD指令
- LOAD Rd,996(Rs):(996+(Rs))-> Rd
- LOAD Rd,mem:(mem)-> Rd
- STORE指令
- STORE Rs,996(Rd):Rs ->(996+(Rd))
- STORE Rs,mem:Rs ->(mem)
- 条件转移指令
- beq Rs,Rt,#偏移量 比较Rs和Rt内数字 一样就转移
- bne Rs,Rt,#偏移量 不一样就转移
- (Rs)(Rt)
- 判断成功(PC)+指令字长+(偏移量x指令字长)-> PC
- 否则(PC)+指令字长-> PC
- 无条件转移指令
- jmp #偏移量:(PC)+指令字长+(偏移量x指令字长)-> PC
- WrPC耗时比EX短(今早的发现PC的值,越早避免控制冲突),EX阶段直接改
- 问问题要回答相关(数据相关or顺序问题):
- 下一个的IF段必须在前一个的ID段后才能开始,否则覆盖IF段锁存器的内容
- 运算类指令
影响指令流水线的因素 ⭐️
- 结构相关(资源冲突)
- 可以让后面的暂停
- 可以资源重复配置(data 指令cache)
- 数据相关(数据冲突)
- 同步问题
- 硬件阻塞or软件插入“NOP”空指令
- 数据旁路技术
- 编译优化,编译器自动调整指令顺序来解决数据相关
- 控制相关(控制冲突)
- 转移指令或者其他改变PC的值,跳转导致断流,会控制冲突(中断也会)
- 解决方法:
- 转移指令分支预测:简单预测、动态预测
- 欲取转移成功和不成功的两个控制流方向上的目标指令
- 加快和提前形成条件码(提前形成进位类似)
- 提高转移方向猜准率
- 结构相关(资源冲突)
流水线的分类
- 部件功能、处理机级、处理机间
- 部件功能级流水线
- 某个节点比如EX再分段
- 分段后并行
- 浮点数加法:求阶差、对阶、尾数想家、规格化
- 处理机级流水线
- 指令流水线:指令分成多个子过程
- 处理机间流水线
- 宏流水,一个处理机完成某一个任务,不同的CPU不同的工作
- 每个处理机完成一个任务后把结果存放在下一个处理器所共享的存储器
- 部件功能级流水线
- 单功能流水线和多功能流水线
- 单功能流水线:专门功能、浮点数加法
- 多功能流水线:不同的功能,指令流水线就是
- 静态流水线和动态流水线(各段之间的连接方式)
- 静态:各段只能按同一种功能的连接方式工作
- 动态:某些段某种运算,另些段另一种运算
- 线性流水线和非线性流水线
- 线性,输入输出只能一次,无反馈电路
- 非线形流水线,需要反馈电路来某些功能数次执行,递归运算
- 部件功能、处理机级、处理机间
流水线的多发技术
- 超标量技术
- 每个时钟周期可以并发执行多条独立指令
- 要配置多个功能部件
- 不能调整指令的执行顺序
- 超流水线技术
- 一个时钟周期内再分段
- 一个时钟周期内一个功能部件使用多次
- 超长指令字
- 由编译程序挖掘出指令间的潜在并行性
- 多条可并行的指令组合成一条
- 具有多个操作码字段的超长指令字
- 超标量技术
5.7 多处理机的基本概念(选择)
SISD、SIMD、MIMD、向量处理机 ⭐️
- SISD(单指令单数据流)
- 一段时间内仅执行一条指令
- 指令序列只能并发,不能并行,每条指令只能处理一两个数据
- 一个处理器一个主存
- 采用指令流水线需要多个功能部件,用模块交叉存储
- 不是数据级并行
- SIMD
- 一个指令流同时对多个数据流进行处理
- 指令序列只能并发,不能并行,每条指令只能处理多个具有相同特征的数字
- 是数据级并行
- 一个处理器内有很多局部的存储器和多个ALU(执行单元)
- 一个CU, 一个主存
- 早起某些显卡(红色滤镜)
- 数组元素的重复处理
- 不同执行单元执行同一条指令,处理不同的数据
- MISD
- 同时执行多条指令,处理同一个数据的脑瘫不存在
- MIMD
- 多条指令分别处理多个不同的数据
- 各指令序列并行执行,分别处理多个不同的数据
- 线程级并行
- 可以分多处理机系统和多计算机系统
- 多处理机系统(共享存储的多处理机系统)
- 一个计算机,处理器之前可以访问同一个主存,物理地址共享
- 主存传递一台计算机多个处理器共享内存
- 多计算机系统
- 计算机之间只能通过消息传递来传递数据
- 多个计算机多个处理机多个存储器,物理地址独立
- 多处理机系统(共享存储的多处理机系统)
- 向量处理器
- 指令的操作对象是向量
- 多个处理单元,多组向量寄存器
- 主存应该采用多个端口同时读取的交叉多模块存储器
- 主存大小限制了阶梯规模
- SISD(单指令单数据流)
共享内存多处理器=多核心处理器
- 1、共享同一个主存,地址共享,LOAD STORE
- 2、一个处理器包含多个核、共享主存也共享最低级的Cache
支持硬件多线程(不支持就要不断切换寄存器和主存的值)⭐️
- 细粒度多线程
- 各个时钟周期轮流发射多个线程的指令
- 一个时钟周期切换一次进程
- 代价低
- 指令级并行
- 粗粒度多线程
- 连续几个时钟周期都发射统一线程的指令序列,流水线阻塞切换线程
- 阻塞切换进程
- 需要重载流水线代价高因为重载所以代价高
- 指令级并行
- 同时多线程(SMT)
- 一个时钟周期内同时发射多个线程的指令
- 不切换
- 无代价
- 指令级并行,线程级并行
- 细粒度多线程
C6 总线
6.1 总线概述
概述
- 早期为何要用:原本大多数采用分散链接方式,不容易随时增减外部设备
- 用了总线就可以方便链接
- 共享与分时
- 总线可以挂多个部件,每个部件之间较灰暗信息可以通过这组线路分时共享
- 分时就是同时只能有一个发送信息
- 总线的特性
- 机械特性:尺寸形状引脚
- 电气特性:传输方向和有效范围
- 功能特性:每根弦的弓嫩难过
- 时间特性:信号和时序关系
- 串并总线
- 串行总线(USB),一次一个bit数据,成本低,远距离可以,不易跳变
- 并行总线,总线的逻辑时序比较简单,电路容易,信号线多,远距成本高
- 总线功能分类
- 片内总线:是芯片内部的总线,是CPU内部寄存器之间,寄存器与ALU之间的连接线
- 系统总线:是计算机系统内功能部件相互连接的总线
- 数据总线(DB):传输数据信息,包括指令和操作数,机器字长,存储字长相关,双向,可以选一个保持一致
- 地址总线(AB):传输地址信息,与设备数量,位数与主存地址空间相关、设备数量相关,单向
- 控制总线(CB):传输控制信息,单根单向,总的双向
- 通信总线:用于计算机系统之间活着计算机系统与其他系统之间信息传输的总线
- 外部总线
- 数据通路表示表示数据流经的路径
- 总线是承载媒介,地址总线也可以是媒介
- 早期为何要用:原本大多数采用分散链接方式,不容易随时增减外部设备
系统总线的结构
- 单总线结构:一组系统总线,允许直接交换信息。(系统三根)
- 容易介入新设备,带宽低,争用,不支持并发(实则并行)
- 快速总线,慢速I/O,浪费性能
- 双总线结构:系统三根+I/O
- 用通道代替I/O与总线的直接相连,增加I/O总线
- 支持突发传送,传出一个地址,收到多个地址连续的数据
- 三总线结构 :系统三根+I/O+DMA总线
- DMA也是缓和速度矛盾(Direct Memory Access)直接内存访问
- 主存一整块传送给CPU
- 提高I/O设备性能
- 系统工作效率较低(三个总线只能一个工作
- 四总线结构:CPU
- 单总线结构:一组系统总线,允许直接交换信息。(系统三根)
字长⭐️
- 程序计数器(PC)取决于指令的地址,定位指令,4GB,字长32位=4B,PC:30位
- 通用寄存器(用于存放数据或者地址)位数和机器字长相等
- 指令寄存器(IR)的位数取决于指令字长
- 指令字长一般取字节 / 存储字长的整数倍,与机器字长无关
- 指令字长等于存储字长的情况下,取指周期等于机器周期
总线性能指标
- 总线的传输周期(总线周期)
- 一次总线操作所需的时间(申请、寻址、传输、结束,四个阶段)
- 由若干个总线时钟周期构成
- 传一次数据要多久
- 时钟周期
- 机器的时钟周期
- 关系魔幻:
- 大多数情况下,一个总线周期包含多个总线时钟周期
- 有的时候一个总线周期就是一个总线时钟周期
- 有时候一个总线时钟周期包含多个总线周期
- 有的总线,上升沿和下降沿都进行数据传输,一个周期,两次传送
- 工作频率
- 总线周期的倒数
- 一秒传送几次数据
- 总线时钟频率
- 时钟周期的倒数
- 3.0GHz
- 宽度(位宽)
- 数据总线的根数,并行传输数据位数
- 带宽(最高数据传输速率和有效数据传输速率不一样)
- 每秒可以传输多少信息
- 工作频率x总线宽度
- 复用
- 一种信号线不同时间传送不同的信息,较少的线,更多信息
- 节省空间成本
- 信号线数
- 地址总线,数据总线,控制总线根数总和
- 总线的传输周期(总线周期)
并不一定并行就比串快,因为带宽由频率和总线宽度同时决定
6.2 总线事务和定时
仲裁(争用问题)
- 总线是互斥共享的资源
- 获得总线控制权的设备
- 主设备:获得总线控制权的设备
- 从设备:被主设备访问的设备,只能响应从主设备发来的各种总线命令
- 竞争主线控制权,选择一个方式获得控制权就叫总线仲裁
- 总线控制器的判优,仲裁逻辑按照一定的优先登记顺序确定
- 集中仲裁方式
- 链式查询方式:(越近优先级越高,优先级固定)
- BS:总线允许
- BR:总线请求
- BS:总线忙(建立者位获得控制权的)
- 三根都属于控制总线,三根信号线
- BR提出,控制器通过BG发送高电平
- 找到想要的给控制权,然后发送总线忙表示已经占用了,撤销BG
- 使用完就撤销总线忙
- 坏一个就G
- 计数器定时查询方式:(需要计时器)
- 计数值通过设备地址线发向各个部件
- 空闲就不断通过计数器来赋予资格
- 计数器初值可以改变优先次序
- 循环技术很公平
- 需要更多的控制线,控制相对链式复杂一些
- 独立请求方式:(排队器)
- 每个设备和控制器都有一个BR和BG
- 用完撤销BS,释放BG,分配给下一个
- 响应快,灵活,控制线多
- 链式查询方式:(越近优先级越高,优先级固定)
- 分布仲裁方式(仲裁总线)
- 不要中央仲裁器,每个主模块都有自己的仲裁器和仲裁号,多个仲裁器争用总线
- 把自己的总裁号发到共享仲裁总线,每个仲裁器将得到的仲裁号与自己的进行比较
- 如果总裁总线上的优先级高,则总线请求不予响应,并撤销仲裁号
- 最后获胜的留着
操作和定时(占用总线的一对设备如何进行数据传输)
- 总线周期的四个阶段
- 申请分配阶段
- 传输请求 总线仲裁
- 寻址阶段:通过总线发出需要访问模块的地址以及命令
- 传输阶段:数据交换,单向双向
- 结束阶段:有关信息撤出总线
- 申请分配阶段
- 总线定时,控制四个阶段时间配合,是一个协议or规则
- 同步通信(同步定时):统一时钟
- 用于总线长度较短,所接部件的存取时间比较接近的
- 传送快,逻辑简单
- 强制性同步,不能及时进行有效性检验,可靠性差
- 异步通信(异步定时):
- 没有统一时钟,没有固定时间间隔,依靠互相制约的“握手”信号来实现定时控制
- 主设备提出交换请求,从设备回答
- 请求和回答信号的撤销是否互锁
- 不互锁方式
- 发送请求,不等回答,过段时间,自动撤销请求
- 收到请求,发出回答,过段时间,自动撤销回答
- 半互锁方式
- 等从回答才会撤销请求
- 回答的撤销就是自动啦
- 全互锁方式
- 主发出必须等回答才撤销
- 必须等主已经撤销才撤销回答
- 不互锁方式
- 总线周期长度可变,可以保证速度相差很大的部件
- 自动适应时间的配合
- 比同步复杂,速度比同步慢,因为需要等应答
- 同步通信(同步定时):统一时钟
- 总线周期的四个阶段
标准
C7 输入输出系统
7.1 I/O系统基本概述
7.2 I/O接口
7.3 I/O方式
- Post title:408-cop
- Post author:Picasun
- Create time:2023-02-15 16:05:26
- Post link:https://redefine.ohevan.com/2023/02/15/408-cop/
- Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.