计算机组成原理
第一章 计算机系统概论
1、非时间指标
机器字长
定义:机器一次能处理的二进制位数
- 由运算器、寄存器的位数决定;
- 一般与内部寄存器的位数相等;
- 字长决定数据表示范围与精度;
- 目前常见的有32位和64位字长。
总线宽度
定义:数据总线一次能并行传送的最大信息位数
主存容量与存储带宽
主存容量:是指一台计算机主存能存储的最大信息量。
存储带宽: 指单位时间内与主存交换的二进制信息量,单位Byte/s。 (影响存储带宽的指标包括数据位宽和数据传输速率)。
2、时间指标
主频 f
CPU工作的时钟频率,与CPU运算能力之间不是唯一的、直接关系;
时钟周期T = 1/f
计算机中最基本的、最小的时间单位。一个时钟周期CPU仅完成一个最基本的动作;(也称为CPU周期)
外频
系统总线的工作频率,CPU与主板之间同步运行的速度,标准外频66MHz、100MHz、133MHz、200MHz、400MHz
倍频
主频=外频×倍频 , Pentium 4 2.4G 主频 2400M = 133M (外频) × 18 (倍频)
调整倍频可以获得较高的主频,486后出现的技术,使得外设低频,CPU高频
==3、CPI==
(Clock cycles Per Instruction):执行一条指令 (平均) 需要的时钟周期数
CPI = 一段程序中所有指令的时钟周期数之和 / 指令条数 //统计
= 程序中各类指令的CPI × 程序中该类指令的比例 //加权
==4、MIPS==
(Million Instructions Per Second) :表示每秒钟执行指令的条数 (以百万条为单位)
5、CPU执行
第二章 计算机中的信息表示方式
1、进制转换
①十进制→二进制
整数部分:除2取余倒排,直到商为0 ;
小数部分:乘2取整顺排,直到小数位为0 ;
②二进制转到八进制 从小数点向左右三位一组
(10 011 100 . 01 )2
(10 011 100 . 010)2 = ( 234 . 2 )8
③二进制转十六进制 从小数点向左右四位一组
(1001 1100 . 01 )2
(1001 1100 . 0100)2 = ( 9C . 4 )16
小数部分不足位数要补零凑足,否则出错
2、原码
最高位为符号位,0:正,1:负,数值位不变
3、补码
真值为正数,补码等于原数据;真值为负数,增加一个模
机器零唯一,负数比正数多一个
4、移码
5、定点数的表示方法
定点表示:约定机器中所有数据的小数点位置是固定不变的。由于约定在固定的位置,小数点就不再使用记号“.”来表示。通常将数据表示成纯小数或纯整数。
C语言中的定点数
- 无符号整数
- unsigned char 、unsigned short、unsigned int
- 一般用于地址运算,编号表示,
- 指针是什么数据类型?
- 有符号整数
- char、short、int、long
- 采用补码表示
- 无符号整数最大值 > 相同位数符号整数最大值
- 8位无符号整数 最大是255(1111 1111)
- 8位有符号整数 最大为127(0111 1111)
6、浮点数的表示方法
由于基数在系统中是隐含约定的,不需要用代码表示,所以浮点数只需用一对定点数(阶码和尾数)表示,其中,数符表示数的正负,阶码表示小数点的位置,而尾数表示有效数字。
==规格化的浮点数==
为了提高运算的精度,需要充分地利用尾数的有效数位,通常采取规格化的浮点数形式,即规定尾数M的最高数位必须是一个有效值(1)。如果尾数不是规格化数,要用修改阶码同时尾数移位的方法把他变为规格化数.
==IEEE754标准==
注意:
- 阶码E采用移码表示,注意其偏移量是127而不是标准的128
- 尾数M为定点小数,小数点固定在M最左侧,且小数点左边还有一个隐藏的1,完整尾数形式为1.M
例题:
第三章 运算方法和运算部件
1、补码加减法的实现
单符号溢出检测方法
双符号(变形补码)溢出检测方法
“01”上溢,“10”下溢
2、==定点乘法运算==
无符号整数乘法运算
原码一位乘法运算
运算规则:
① 参加运算的操作数取其双符号数原码数值绝对值;
② 令乘数的最低位为判断位,若为“1”,加被乘数,若为“0”,不加被乘数(加0);
③ 累加后的部分积右移一位;
④ 重复n次②和③;
⑤ 符号位单独处理,同号为正,异号为负。
定点补码一位乘法
Booth乘法规则如下:
3、定点除法运算
恢复余数除法
- 如何判断是否够减
- 利用补码作减法,判断余数符号即可
- 余数为负数时,必须恢复余数
- 将余数加除数,恢复成原值
- 求下一位商,必须将余数左移一位,再与除数比较
- 手工运算将除数右移?
- 注意这里余数放大了,最后结果要缩小
- 比较,上商(恢复),余数移位,再比较,
- 直到商的位数足够
不恢复余数除法(加减交替法)
注意: 在定点小数除法运算时,为了防止溢出,要求被除数的绝对值小于除数的绝对值,即|X|<|Y|,且除数不能为0。另外,在原码加减交替法中,当最终余数为负数时,必须恢复一次余数,使之变为真余数,注意此时不需要再左移了。
4、==浮点运算==
结果规格化
结果规格化就是使运算结果成为规格化数。为了处理方便,可让尾数的符号位扩展为双符号位,当尾数运算结果不是11.0……或00.1……的形式时,应进行相应的规格化处理。
当尾数符号位为 01 或 10 时,运算结果上溢,需要向右规格化,且只需将尾数右移一位,同时将结果的阶码值加1。
当尾数运算结果为11.1……或00.0……时需要向左规格化,而且左移次数不固定,与运算结果的形式有关。向左规格化时尾数连同符号位一起左移,直到尾数部分出现11.0……或00.1……的形式为止。向左规格化时阶码做减法,左移多少位就减多少。
舍入
在尾数进行向右规格化操作时,尾数末尾的几位会因超出计算机字长而被丢掉,从而产生误差。这时,计算机可以按选定的方式进行舍入操作。常用的舍入方法如下。
末位恒置1法:只要因移位而丢失的位中有一位是1,就把运算结果的最低位置1,而不管最低位原来是0还是1。
0舍1入法:当丢失位数的最高位是1 时将尾数的末位加1,类似于十进制数的四舍五入。注意舍入操作可能会破坏规格化结果,所以舍入操作后还需要再次进行规格化处理。
溢出判断
由于浮点数中阶码的位数决定数的表示范围,因此对浮点运算而言,当阶码出现溢出时表示运算结果溢出,即当阶码的符号位为 01 和 10 时才表示运算结果溢出。
第四章 存储系统
1、常用概念
- 位是二进制数的最基本单位,也是存储器存储信息的最小单位。
- 一个二进制数由若干位组成,当这个二进制数作为一个整体存入或取出时,这个数称为存储字。
- 存放存储字或存储字节的主存空间称为存储单元或主存单元,大量存储单元的集合构成一个存储体,程序和数据都存放在存储体中,它是存储器的核心。
- 小端存储:字地址等于最低有效字节地址
- 大端存储:字地址等于最高有效字节地址
2、半导体存储器
随机存取存储器RAM
CPU可以对RAM单元的内容随机地读写访问。CPU对任何一个存储单元的读写时间是一样的,即存取时间是相同的。
SRAM
存储体(256×128×8)
通常把各个字的同一个字的同一位集成在一个芯片(32K×1)中,32K位排成256×128的矩阵。8个片子就可以构成32KB。
地址译码器
采用双译码的方式(减少选择线的数目)。
A0 ~ A7为行地址译码线
A8 ~ A14为列地址译码线
DRAM
动态存储器,是用金属氧化物半导体(MOS)的单个MOS管来存储一个二进制位(bit)信息的。信息被存储在MOS管T的源极的寄生电容CS中,例如,用CS中存储有电荷表示1,无电荷表示0。
==DRAM刷新==
刷新:定期补充电荷以避免电荷泄露引起的信息丢失,电容存在泄露电流
刷新周期: 存储器两次完整刷新之间的时间间隔
信息存储到泄漏之间必须完成刷新,称为最大刷新周期
按行刷新:存储体采用双译码结构,刷新地址计数器给出刷新行地址
刷新方式:集中式刷新、分散式刷新和异步式刷新
集中刷新方式
刷新周期:2ms,在数据丢失之前集中刷新所有行。存在死区,用在实时要求不高的场合
分散刷新方式
刷新周期:2ms,读写+刷新 各刷新周期分散安排在存取周期中
刷新次数 2ms/100ns=20000次 较浪费,用在低速系统中
异步刷新方式
刷新周期:2ms,各刷新周期分散安排在2ms内,每隔2ms/128=15.5微秒刷新一行,将128次刷新分散,最常用
动态 RAM 和静态 RAM 的比较
只读存储器ROM
ROM可以看作RAM的一种特殊方式,存储器的内容只能随机读出而不能写入。即使停电,所存储的内容也不会丢失。
1、掩模式只读存储器(ROM)
用二极管或晶体管作为元件,以元件的“有/无”来表示存储单元的信息。该信息由芯片制造商在制造时写入内容,以后只能读,不能再次写入。
2、可编程只读存储器(PROM)
一次性写入内容存储器,以熔丝的接通或断开来表示所存的信息为“1”或“0”,可由用户根据需要一次性写入内容,掉电后不会影响其存储内容
3、可擦可编程只读存储器(EPROM)
用紫外线擦除写入内容,在高压作用下注入电子;可多次编程
4、可电擦可编程只读存储器(E²PROM)
每个存储元采用两个晶体管,具有电擦除功能
3、==存储器与CPU连接==
位扩展法
只加大字长,而存储器的字数与存储器芯片字数一致,对片子没有选片要求
利用256K×1位的SRAM存储芯片组成256K×32位的存储器并于CPU连接
与 CPU 连接时,将 32 个存储芯片的地址线(18 根)、读写控制线各自并联,并分别与CPU 的地址线和读写控制线相连;同时将所有存储芯片的片选端均与CPU的MREQ#信号相连,只有这样才能保证 32 个芯片同时被选中;将 32 个存储芯片的数据线分别连到 CPU 的 32 位数据线上,具体连接如图 4.24 所示。
字扩展法
仅在字向扩充,而位数不变.需由片选信号来区分各片地址。
利用256K×8位的SRAM存储芯片组成2M×8位的存储器并于CPU相连
与 CPU 进行连接时,256K 的芯片对应 18 根地址线,CPU 访问 2M 的主存容量需要 21根地址线;可以将高 3 位地址 A20-18送入 3:8 译码器输入端,将 3:8 译码器的 8 个输出分别连接到8个SRAM芯片的片选信号 CS 端;将 CPU 内存请求信号 MREQ#连接到译码器使能端,只有进行存储访问时,译码器才能进行工作,否则译码器输出全0(假设高电平有效),所有存储芯片均不被选中,输出为高阻态。存储器字扩展的具体连接如图所示。
4、高速缓冲存储器cache
用途:设置在 CPU 和 主存储器之间,完成高速与 CPU 交换信息,尽量避免 CPU不必要地多次直接访问速度要慢一些的主存储器,从而提高计算机系统的运行效率。
实现:这是一个存储容量很小、但读写速度更快、以关联存储器方式运行、用静态存储器芯片(SRAM)实现的存储器。
要求:有足够高的命中率,既当 CPU需用主存中的数据时,多数情况可以直接从Cache中得到,称二者之比为命中率。
①数据查找
相联存储器
相联存储器(Content Addressable Memory,CAM)是一种按内容进行访问的存储器,用于存放查找表,其内部存储的基本数据单元是键值对(Key,Value)。CAM 的输入不是地址,而是检索关键字 key,输出则是该关键字对应的 value 值。相联存储器的基本原理如图所示。
图中包括 4 个键值对,每行都有一个键值对,其中一个有效位用于表示当前键值对是否有
效(为1时有效,为 0 时无效);所有存储单元中的 key 字段同时与 CAM 输入的检索关键字进行并发比较,4 个存储单元共需要 4 个比较器,有效位为1 且比较结果相同则输出为 1。图中比较结果分别对应 L0~L3,这些比较结果将连接到对应三态门的控制端,当比较结果相符时,输出当前对应的 value 字段。L0~L3中只要有一个信号为 1 则表示查找成功,所以将L0~L3 进行逻辑或运算即可得到命中信号 hit。注意同—时刻L0~L3最多只能有一个信号为 1,否则会引起数据冲突。
②地址映射
全相联映射
定义:主存中的每一个数据块都可以放置到cache的任意一个数据块中,是一对多的映射关系。只有cache满时才需要进行数据块置换。
优点:cache利用率最高,冲突概率最低
缺点:比较电路复杂,查找成本较高,需要CAM提供快速的查找空能。
将地址分为两部分(块号和字),在内存块写入Cache时,同时写入块号标记;
CPU给出访问地址后,也将地址分为两部分(块号和字),比较电路将块号与Cache 表中的标记进行比较,相同表示命中,访问相应单元;如果没有命中访问内存,CPU 直接访问内存,并将被访问内存的相对应块写入Cache。
直接相连映射
定义:主存中的每一块只能被放置到Cache中唯一的一个位置。(循环分配)
优点:标志位较短,比较电路的成本低。
缺点:利用率低,命中率低,效率较低
==组相联映射==
定义:主存中的每一块可以被放置到Cache中唯一的一个组中的任何一个位置。
组相联映射将cache分成固定大小的组,每组有k行,称为k-路组相联;主存数据块首先采用直接相联映射的方式定位到cache中固定的组,然后采用全相联映射的方式映射到组内任何一个cache行
cache组号=主存块号 mod(cache组数)
不同映射方式主存地址划分
③替换策略
④写入策略
写回法
定义:只修改cache的内容而不立即写入主存,只有当此行被替换出cache时才将脏数据写回主存。
优点:可以显著减少写主存的次数
缺点:cache与主存中数据的不一致性,每个cache行必须配置一个修改位
写穿法
定义:同时对cache和主存中的同一数据块进行修改
优点:无需设置一个修改位以及相应的的判别逻辑,被换处的数据库可以直接丢弃
缺点:cache对CPU的写操作没有缓冲功能,降低了cache的功效
5、虚拟存储器
概念
定义:虚拟存储器是建立在主存与辅存物理结构基础之上,由附加硬件装置以及操作系统存储管理软件组成的一种存储体系
物理地址VA(Virtual Addresses):CPU地址引脚送出,用于访问主存的地址。
虚拟地址PA(Physical Addresses):编译程序生成的,是程序的逻辑地址,其地址空间的大小受到辅助存储器容量的限制。
MMU(Memory Management Unit):存放虚拟地址与物理地址的对应关系,并判断这个虚拟地址对应的内容是否已经在主存中。如果已经在主存中,则通过MMU将虚拟地址转换成物理地址,CPU直接访问主存单元;如果不在主存中,则把包含这个字的一页或一个程序段调入主存,并在MMU中填写相关的标记信息。
页表:页表常驻内存,每个进程都拥有独立的虚拟地址空间,每个进程都有一张完整的页表,页表属于进程控制信息
PTE(Page Table Entry):页表项(PPN)
PTEA(Page Table Entry Addresses):页表项地址
VPN(Virtual Page Number):虚拟页号
PPN(Physical Page Number):物理页号
VPO(Virtual Page Offset):虚拟页偏移
PPO(Physical Page Offset):物理页偏移
VPO 和 PPO 的位数决定了页面大小,因为物理页和虚拟页大小相同,所以 VPO 和PPO 的位数相同
VPN 和PPN 的位宽则分别取决于虚拟空间的容量和主存空间的容量。
虚拟地址与物理地址转换过程
结合cache的虚拟存储器访问流程
cache会缓存主存中经常访问的数据,因此页表的部分数据块也会作为常用的热数据调度到cache中。
==利用TLB加速虚拟存储器地址转换==
现代处理器都维护着一个转换旁路缓冲区( Translation Look-aside Buffer,TLB ),用于缓冲经常访问的页表项PTE。TLB本质上就是一个容量较小的cache,为提高查找速度,大多采用全相联或组相联方式,且采用随机替换算法
TLB离CPU更近,访问速度更快,所以通常将TLB表称为快表,而将主存中的页表称为慢表。
第五章 指令系统
1、指令系统设计
一条指令须明显或隐含包含的信息
操作码:指定操作类型
(操作码长度:固定/可变)
源操作数参照:一个或多个源操作数或所在的地址
(操作数来源:主(虚)存/寄存器/I/O端口/指令本身)
结果值参照:产生的结果存放何处(目的操作数)
(结果地址:主(虚)存/寄存器/I/O端口)
下一条指令地址:下条指令存放何处
(下条指令地址 :主(虚)存)
(正常情况隐含在PC中,改变顺序时由指令给出)
==寻址方式==
指令寻址方式:顺序寻址,跳跃寻址
==操作数寻址方式==
立即寻址:地址码字段是操作数本身
寄存器寻址:操作数在CPU的内部寄存器中
直接寻址:地址码字段直接给出操作数在内存的地址
间接寻址:D单元的内容是操作数地址, D是操作数地址的地址
寄存器间接寻址:D单元的内容是寄存器编号,以寄存器的内容为地址访问主存单元即可得到所需的操作数
相对寻址:指令地址码给出一个偏移量(带符号数),基准地址隐含由PC给出。
基址寻址:指令地址码给出一个偏移量,基准地址明显或隐含由基址寄存器B给出。
即:EA=(B)+A
变址寻址:指令地址码给出一个基准地址,而偏移量(无符号数)明显或隐含由变址寄存器I 给出。
即:EA=(I)+A
==例题==
==扩展(变长)操作码编码==
解:操作码按短到长进行扩展编码
二地址指令: (0000 ~ 1110)
一地址指令: 11110 (00000 ~ 11111); 11111 (00000 ~ 00001)
零地址指令: 11111 (00010 ~ 11111) (000000 ~ 111111)
故零地址指令最多有 30x2^6^=15x2^7^ 种
指令设计风格
复杂指令集计算机CISC (Complex Instruction Set Computer)
早期CISC设计风格的主要特点
(1) 指令系统复杂
变长操作码 / 变长指令字 / 指令多 / 寻址方式多 / 指令格式多
(2) 指令周期长
绝大多数指令需要多个时钟周期才能完成
(3) 各种指令都能访问存储器
除了专门的存储器读写指令外,运算指令也能访问存储器
(4) 采用微程序控制
(5) 有专用寄存器
(6) 难以进行编译优化来生成高效目标代码
精简指令集计算机RISC (Reduce Instruction Set Computer)
(1) 简化的指令系统
指令少 / 寻址方式少 / 指令格式少 / 指令长度一致
(2) 以RR方式工作
除Load/Store指令可访问存储器外,其余指令都只访问寄存器。
(3) 指令周期短
以流水线方式工作, 因而除Load/Store指令外,其他简单指令都只需一个或一个不到的时钟周期就可完成。
(4) 采用大量通用寄存器,以减少访存次数
(5) 采用组合逻辑电路控制,不用或少用微程序控制
(6) 采用优化的编译系统,力求有效地支持高级语言程序
2、程序的机器级表示
MIPS概述
数据类型
操作指令
第六章 中央处理器
1、中央处理器概述
操作控制器主要功能: 循环取指、执行、处理异常
将机器指令译码并生成执行部件所需的控制信号序列 ,控制信号按序送至各执行部件控点,引起逻辑门开闭,建立正确的数据通路,从而完成指令功能。
控制器分类
硬布线控制器 (时序逻辑型) (硬件实现)
微程序控制器 (存储程序型) (软件实现)
2、指令周期
时钟周期 = 节拍脉冲 = 震荡周期 能完成一次微操作
机器周期 = CPU周期 从主存读出一条指令的最短时间 可完成 复杂操作
指令周期:从主存取一条指令并执行指令的时间
定长指令周期: 传统三级时序系统
机器周期数固定,节拍数固定,按机器周期同步,mips单周期
变长指令周期: 现代时序系统
机器周期数可变,节拍数可变,按时钟周期同步,mips多周期
定长指令周期只是一种特例
3、数据通路及指令操作流程
数据通路——执行部件间传送信息的路径 (数据流)
通路的建立由控制信号控制,受时钟驱动 (控制流)
分类:
- 共享通路(总线)
- 主要部件都连接在公共总线上,各部件间通过总线进行数据传输
- 结构简单,实现容易,但并发性较差,需分时使用总线,效率低
- 专用通路
- 并发度高,性能佳,设计复杂,成本高
- 可以看作多总线结构
数据通路定义:数据通路是由操作元件和存储元件通过总线方式或分散方式连接而成的进行数据存储、处理、传送的路径。
==单总线结构MIPC CPU 典型指令==
4、时序与控制
==单总线结构CPU指令周期==
控制方式
- 同步控制
- 机器周期数、节拍数固定 3机器周期*4节拍
- 机器周期数固定,节拍数不固定 3机器周期,取指/计算/执行 4/2/3节拍
- 大多数指令机器周期固定 机器周期,节拍数按需分派
- 异步控制
- 无时钟,应答机制
- 联合控制
- 同步、异步相结合
时序发生器
循环产生周期电位、节拍电位,供控制器对信号进行时间调制
5、硬布线控制器
6、微程序控制器
- 控制信号序列像程序一样存储起来
- 控制信号序列分解为若干节拍
- 一个节拍的并发信号编成一条微指令
- 多个节拍对应多条微指令,形成一段微程序依序
- 执行微程序即可生成控制信号序列
- 指令取指执行 → 微程序执行 → 微指令执行 → 生成控制信号
- 软时序:依次执行微指令,时间信号有先后顺序
微程序\微指令\微命令\微操作的关系
一条微指令对应一个时钟周期
下条微指令地址的确定方式
怎样控制微程序的执行顺序?
- 通过在本条微指令中明显或隐含地指定下条微指令在控存中的地址来控制。
微指令地址的产生方法有两种:
- 增量(计数器)法:下条微指令地址隐含在微程序计数器μPC中。
- 断定(下址字段)法:在本条微指令中明显指定下条微指令地址。
选择下条要执行的微指令有以下四种情况:
- 取指微程序首址:每条指令执行前,CPU先执行取指微程序。
- 第一条微指令:每条指令取出后,必须转移到该指令对应的第一条微指令执行。
- 顺序执行时:微程序执行过程中顺序取出下条微指令执行。
- 分支执行时:在遇到按条件转移到不同微指令执行时,需要根据控制单元的输入来选择下条微指令。
eg.
微指令格式的设计
水平型微指令
特点:
- 并行操作能力强,效率高,执行时间短、灵活性强
- 微指令字较长,微程序短,控存容量大,性能佳
- 微操作码编码方式:
微操作码编码方式:
- 不译法(直接控制法)
- 字段直接编码(译)法
- 字段间接编码(译)法
垂直型微指令
特点:
- 字长短,微程序长,控存容量小,性能差
- 垂直型与指令相似,易于掌握
- 基本被淘汰
微操作码编码方式:
- 最小(最短、垂直)编码(译)法
7、异常与中断处理
- 内部异常
- 故障(Fault)
- 由指令执行引起的异常,如未定义指令、越权指令、段故障、缺页故障、存储保护违例、数据未对齐、除数为零、浮点溢出、整数溢出等。
- 可恢复的故障,指令需恢复执行,不可恢复故障,进程被终止
- 自陷( trap)
- 是一种事先安排的“异常”事件,通过在程序中显式的调用自陷指令触发自陷异常,用于在用户态下调用操作系统内核程序,如系统调用、条件陷阱指令。
- 终止(Abort)
- 随机出现的使得 CPU 无法继续执行的硬件故障,和具体指令无关。如机器校验错、总线错误、异常处理中再次异常的双错等,此时当前程序无法继续执行,只能终止执行,由异常服务处理程序来重启系统
- 故障(Fault)
- 外部中断
第七章 指令流水线
7.1 流水线概述
单周期完成n条指令需要 5nT
指令流水线完成n条指令的时间=完成第一条指令时间 5T+(n-1) * T=(n+4)T
7.2 流水线数据通路
7.3 流水线冲突与处理
==指令流水线的冲突、相关、冒险(hazard)==
- 结构冲突
- 争用主存:IF段取指令、ID段取操作数
- 争用ALU:多周期方案中计算PC、分支地址,运算指令
- 解决方案:增加部件消除
- 控制冲突
- 提前取出的指令作废,流水线清空
- 流水线发生中断
- 数据冲突
- 指令操作数依赖于前一条指令的执行结果 ADD $s1, $s2, $s3
- 引起流水线停顿直到数据写回 ADD $s4, $s1, $s3
控制冲突总结
- 指令跳转
- IF段重新取新的指令
- 清除误取指令
- IF/ID、ID/EX段给出同步清零信号
- 分支指令执行阶段?
- 越早执行,性能损失越小
- MIPS中通常为ID段执行,为了简化中断,重定向机制,可在EX段执行
- 分支延迟槽技术
- 配合ID段执行分支指令,彻底消除分支带来的流水性能损失
- 如何将有用的指令载入延迟槽比较关键
- X86中没有分支延迟槽,采用动态分支预测技术
数据相关处理机制
- 软件方法(编译器完成)
- 插入空指令
- 调整程序顺序,使相关性在流水线中消失
- 硬件方法
- 插入气泡(空操作)
- 向后段插入气泡(接口信号清零)
- 向前给出阻塞信号(流水线停顿)避免当前指令被新指令取代
- 数据重定向bypass(数据旁路)
- 将后端处理后的数据(还没来得及写回)重定向
- 数据在哪就从哪送到运算器
- 插入气泡(空操作)
7.4 流水线的异常与中断
7.5 指令集并行技术
- 超流水线(superpipelined)
- 技术主要通过增加流水线功能段数目,尽可能细化减少各段关键延迟,从而提高流水线主频的方式提升流水线性能,例如Pentium pro的流水线就多达14段
- 多发射 (multiple issue)
- 复制计算机内部功能部件的数量,使各流水功能段能同时处理多条指令,处理器一次可以发射多条指令进入流水线进行处理。引起更多的相关性,冲突冒险问题更难处理
- 静态多发射
- 冲突冒险全部交给编译器静态解决
- 动态多发射
- 由硬件动态处理多发射流水线运行过程中出现的各种冲突冒险
- 也称为超标量 (superscalar)技术
第八章 互连及输入输出组织
1、总线及系统传输机制
总线性能指标
总线频率:反映总线工作的速率(f),通常单位是MHz
总线宽度:数据总线的位数(w),单位是b(位)
是微型计算机的一个重要指标,通常与处理器的字长相一致
总线传输速率:总线上可传输的数据总量(BW),单位是MB/S
- 总线传输速率=(总线宽度÷8位)×总线频率
- BW=(w÷8)×f
2、总线传输机制
总线传输过程
- 总线申请: (总线仲裁)
- 需要使用总线的主部件提出请求,总线控制器确定将下一个总线使用权分配给谁
- 地址阶段: (总线寻址)
- 主设备通过总线发出从部件的存储器地址或I/O端口地址及相关命令,启动从设备
- 数据阶段: (数据传输)
- 结束阶段:
- 主部件撤消总线请求等有关信息,让出总线,以便总线控制器重新分配总线使用权
总线事务
- 总线事务:总线上主从设备之间的一次信息交换过程
- 一个总线周期中发生的一系列活动: 请求阶段、寻址阶段、传输阶段、结束阶段
- 典型事务:存储器读,存储器写,I/O读,I/O写,中断响应,DMA响应
- 突发(猝发)传送事务(Burst Mode 成组传送)
- 多个数据阶段,传输过程不释放总线
==总线的仲裁==
总线仲裁:对总线的使用进行合理的分配和管理.
- 部件要使用总线进行通信时,要向控制部件发请求信号
- 控制部件按各部件的优先级来决定谁使用总线
根据总线控制部件的位置,仲裁方式分两类
- 集中式总线仲裁
- 链式查询方式
- 计数器定时查询方式
- 独立请求方式
- 分布式总线仲裁
- 集中式总线仲裁
链式查询方式
计数器定时查询方式
独立请求方式
链式查询方式 | 计数器定时查询 | 独立请求方式 | |
---|---|---|---|
控制线 | BS、BR、BG 共3根 | BS、BR、log2n共 2+log2n | n组(BR、BG)共2n根 |
响应速度 | 慢 | 慢 | 快 |
优先级 | 优先级固定 | 可作适当变化 | 可作灵活的变化 |
故障敏感度 | 非常敏感 | 不敏感 | 不敏感 |
扩展方式 | 容易 | 难 | 容易 |
3、I/O设备与主机进行数据交换的三种基本方式
- 程序直接控制方式(最简单的I/O方式)
- 无条件传送:对简单外设定时(同步)进行数据传送
- 条件传送:Polling (轮询,查询): OS主动查询,也称为程序查询方式
- I/O设备(包括I/O接口)将自己的状态放到一个状态寄存器中
- OS阶段性地查询状态寄存器中的特定状态,以决定下一步动作
- I/O Interrupt (中断I/O方式): 几乎所有系统都支持的中断I/O方式
- 若一个I/O设备需要CPU干预,它就通过中断请求通知CPU
- CPU中止当前程序的执行,调出OS(中断处理程序)来执行
- 处理结束后,再返回到被中止的程序继续执行
- OS是被动调出的,也称为中断驱动I/O方式
- Direct Memory Access (DMA方式): 磁盘等高速外设特有的I/O方式
- 磁盘等高速外设成批地直接和主存进行数据交换
- 需要专门的DMA控制器控制总线,完成数据传送
- 当外设准备好数据后,向DMA控制器发DMA请求信号,DMA控制器再向CPU发总线请求,CPU让出总线后,由DMA控制器控制总线进行传输,无需CPU干涉
中断I/O方式
当外设准备好时,便向CPU发中断请求,CPU响应后,中止现行程序的执行,转入一个“中断服务程序”进行输入/出操作,实现主机和外设接口之间的数据传送,并启动外设工作。 “中断服务程序”执行完后,返回原被中止的程序断点处继续执行。此时,外设和CPU并行工作。
同时中断请求的处理方法
划分优先级的一般规律
- 硬件故障中断属于最高级,其次是程序错误中断
- 非屏蔽中断优于可屏蔽中断
- DMA请求优先于I/O设备传送的中断请求
- 高速设备优于低速设备
- 输入设备的中断优于输出设备
- 实时设备优先于普通设备
多重中断的概念
多重中断和中断处理优先权的动态分配
多重中断的概念:
在一个中断处理(即执行中断服务程序)过程中,若又有新的中断请求发生,而新中断优先级高于正在执行的中断,则应立即中止正在执行的中断服务程序,转去处理新的中断。这种情况为多重中断,也称中断嵌套。
中断优先级的概念:
- 中断响应优先级—-由查询程序或硬联排队线路决定的优先权,反映多个中断同时请求时选择哪个响应。
- 中断处理优先级—-由各自的中断屏蔽字来动态设定,反映本中断与其它中断间的关系。
中断屏蔽字
DMA方式
DMA数据传送方式
由于DMA接口和CPU共享主存,所以可能出现两者争用主存的现象,为使两者协调使用主存,DMA通常采用以下三种方式进行数据传送。
- CPU停止法(成组传送)
DMA传输时,CPU脱离总线,停止访问主存,直到DMA传送一块数据结束。
- 周期挪用(窃取)法(单字传送)
DMA传输时,CPU让出一个总线事务周期,由DMA控制总线来访问主存,传送完一个数据后立即释放总线。
- 交替分时访问法
每个存储周期分成两个时间片,一个给CPU,一个给DMA,这样在每个存储周期内,CPU和DMA都可访问存储器。