Skip to content

计算机组成原理

第一章 计算机系统概述

冯诺依曼机的特点

冯诺依曼机的特点
① 采用“存储程序”的工作方式。
② 计算机由运算器、存储器、控制器、输入输出设备五大部件组成,以运算器为核心。(现代计算机改以存储器为核心)
③ 指令和数据以同等地位存储在存储器中。
④ 指令和数据均以二进制形式表示。
⑤ 指令由操作码和地址码组成,操作码指出操作的类型,地址码指出操作数的地址。
⑥ 程序和功能都是通过中央处理器执行指令实现的。(“程序控制”思想)

计算机的功能部件

  1. 存储器是指主存和辅存。
  2. 一个编址的对应一个存储单元,存储单元中存储的叫存储字,每一个bit叫存储元件。
  3. 运算器的核心是ALU算术逻辑单元。

其常见寄存器有:累加器ACC、乘商寄存器MQ、操作数寄存器X、变址寄存器IX、基址寄存器BR。

  1. 控制器由程序计数器PC、指令寄存器IR和控制单元CU组成。
  2. 存储器地址寄存器MAR、存储器数据寄存器MDR。

一个功能既可以由硬件实现、也可以由软件实现,这一等价性称为软硬件逻辑功能等价性

三种翻译程序

将语言与语言进行转换的软件叫做翻译程序。

三种翻译程序内容
解释程序(解释器)将高级语言按序逐条翻译成机器语言并立即执行。
编译程序(编译器)将高级语言编译成汇编语言或机器语言
汇编程序(汇编器)将汇编语言汇编成机器语言。

三种级别的语言

  1. 机器语言,是计算机唯一可以直接识别和执行的语言。
  2. 汇编语言,汇编语言和机器语言一一对应。(汇编相当于机器语言的英语助记)
  3. 高级语言。

三种常见字长

三种字长内容
机器字长指CPU一次整数运算所能处理的位数,也叫CPU字长、计算机字长,简称字长。机器字长 = CPU总线宽度 = 运算器ALU位数 = 通用寄存器位数
存储字长指存储器中一个存储单元的位数。按字节编址,则存储字长为8。
指令字长指计算机中一条指令的长度。长度为机器字长的指令叫单字长指令,还有半字长指令、双字长指令。
三种字长都必须是字节的整数倍。

计算机性能指标

性能指标内容含义
时钟周期一个时钟周期占多少秒CPU脉冲信号宽度,计算机中最小的时间单位
CPU主频一秒有多少个时钟周期CPU时钟周期的频率,时钟周期的倒数
CPI一个指令需要多少个时钟周期和IPC互为倒数
IPS一秒能执行多少条指令CPU执行指令的频率,和SPI互为倒数
FLOPS一秒能执行多少次浮点运算

第二章 数据的表示和运算

定点数的机器数转换

无符号数没有原反补移,原反补移只针对有符号数。

机器数转换规则
移码转真值移码(解读成无符号真值)= 实际真值 + 偏置值。偏置值一般为2n-1
补码转移码补码符号位取反得移码。
补码转真值符号位赋负位权-2i,数值位赋正位权,参与运算。

定点数的表示范围

定点数定点整数定点小数二进制表示
n位)无符号02n1012n00001111
n+1位)原码(2n1)2n1(12n)12n11110111
n+1位)补码2n2n1112n10000111
补码规则
补码全0为0,全1为-1。
补码符号位为0,数值位全1,表示最大整数2n-1
补码符号位为1,数值位全0,表示最小整数-2n
补码的符号扩展:高位用符号位填充。

补码最大最小值

  • 负值补码最小,符号位为1,数值位有1往后放。1|0000011
  • 负值补码最大,符号位为1,数值位有1往前放。1|1100000
  • 正值补码最小,符号位为0,数值位有1往后放。0|0000011
  • 正值补码最大,符号位为0,数值位有1往前放。0|1100000

补码符号位取反就是移码,上述规则只要取反符号位就适用于移码。

补码比较大小

  1. 首先看符号位,正数一定比负数大。
  2. 其次看数值位,数值位大的就大,数值位小的就小。FFFDH > FFDFH

定点数的格式转换

定点数的格式转换
1. 有符号数存取要经历原反补转换。
2. 不同长度的类型赋值需要扩展和截断,有符号数扩展补符号位,无符号数扩展补0。

定点数的加减法

补码运算规则
加法两数补码直接相加。
减法两数补码相减,减去一个数相当于加上这个数的补数。
补数补码所有位取反,再+1。一个数+它的补数=2n

补码的符号位可以参与运算,所以加减运算只使用补码。

定点数的溢出判断

加法器标志
CF (Carry Flag) 进位标志无符号数运算是否溢出,CF = Cin ⊕ Cout
OF (Overflow Flag) 溢出标志有符号数运算是否溢出,OF = Cn ⊕ Cn-1
ZF (Zero Flag) 为零标志运算结果是否为0,为零ZF=1。
SF (Sign Flag) 符号标志输出运算结果符号位,为负SF=1。
加法器标志含义
CoutCn表示最高位进位,Cn-1表示次高位进位。
CF仅对无符号运算有意义,OF仅对有符号运算有意义。

双符号位溢出判断

双符号位法仅针对补码运算,复制一位符号位,若运算结果两符号位相异则溢出,相同不溢出。

定点数的移位乘除法

移位规则溢出损失精度
逻辑移位左移:高位移出,低位补0,右移:高位补0,低位移出1被移出1被移出
算术移位左移:高位移出,低位补0,右移:高位补符号位,低位移出符号位变化1被移出

算术移位用于有符号数,因为有符号数专注算术运算。

一般浮点数

一般浮点数的格式
一般浮点数的规格化
尾数的最高位必须是有效位。原码为1有效,补码须与符号位相异有效。

IEEE754浮点数

IEEE754浮点数的格式
• 阶码使用移码表示,偏置值为2n-1-1。8位阶码偏置值127,11位阶码偏置值1023。阶码不能为全0或全1。
• 尾数用原码表示,采用1.Y的形式,只存储Y的内容。

若阶码全0或全1,应用以下规则。

情况情况1情况2情况3情况4
阶码00255255
尾数0非00非0
结果0非规范数 ±0.Y×2126NaN

浮点数的表示范围

阶码无符号数范围是1~254,偏置值127,故阶码真值范围是-126~127。

非规格化数距0也有范围,绝对值最小是0.000123×2126=1.0×2149

浮点数的精度问题

什么样的小数能用浮点数表示?
𝟏. 只有能写成 ±A2n 形式的十进制小数才能转成二进制小数,因此浮点数只能表示这样的小数。
𝟐. 浮点数尾数精度有限,尾数不得多于规定位数。
浮点数完整表示整数的精度范围?
浮点数可以表示整数,减小阶码,将尾数小数点后移至末尾,所得就是整数。但若超出尾数范围,再减小阶码就无法完整表示,只是乘2。
• 单精度浮点数完整表示整数的精度范围:±1.1123×223=±11124=±(2241)
• 单精度浮点数能表示的最大整数:±1.1123×2127=±11124000104
阶数差距过大,“大数吃小数”现象
对单精度浮点数而言,两数阶码之差大于等于25时,小数的尾数在对阶时会直接变0,导致小数对运算无影响,二者加减结果等于大数。

浮点数的加减法

步骤内容示例
对阶小阶向大阶对齐,小阶增大,尾数右移1.2×103=0.012×105
尾数运算阶码相同,尾数可直接加减
尾数规格化尾数写成1.Y的形式,阶码顺势调整0.012×105=1.2×103
尾数舍入处理多余位>0.5进位,<0.5舍去,=0.5向偶数舍入1.10|101≈1.11 (101=0.625)
溢出判断规格化尾数,检查阶码是否超出范围

尾数舍入处理

如下四个例子,假设后三位待舍入,将多余位赋小数位权。

  • 1.10|1011.11:因为 101=0.625>0.5,所以 101 舍入并进位。
  • 1.10|0111.10:因为 011=0.375<0.5,所以 011 舍去不进位。
  • 1.10|1001.10:因为 100=0.5,所以 100 向偶数舍入,若保留位为偶数 (末位为0),则舍去。
  • 1.01|1001.10:因为 100=0.5,所以 100 向偶数舍入,若保留位为奇数 (末位为1),则进位。

浮点数的溢出判断

溢出规则
尾数右规、舍入可能造成阶码上溢,尾数左规可能造成阶码下溢。
尾数溢出可通过调整阶码解决,阶码溢出才是真的溢出。
下溢直接置零,上溢触发操作系统异常。

大小端存储

存储方式规则
小端存储低位字节放到低地址处,高位字节放到高地址处。
大端存储低位字节放到高地址处,高位字节放到低地址处。

边界对齐

对齐规则
双字数据(8个字节)的起始地址必须为8的倍数(地址末尾为000)
单字数据(4个字节)的起始地址必须为4的倍数(地址末尾为00)
半字数据(2个字节)的起始地址必须为2的倍数(地址末尾为0)

第三章 存储系统

存储器分类

三级存储系统

存储层次调度方式
Cache-主存层由硬件自动完成,对所有程序员透明。
主存-辅存层由硬件和操作系统共同完成,对应用程序员透明。

透明=看不见。

按存储介质分类

按存取方式分类

四种存取方式存取逻辑对应设备
顺序存取读取时必须按顺序逐个读取,无法跳过光盘、磁带、软盘
随机存取任意时刻可以访问任意位置RAM、ROM、Flash
直接存取选取信息所在区域,然后顺序访问机械硬盘 HDD
相联存取通过数据的内容进行存取Cache、TLB

存储器性能指标

存取周期 / 存取时间
• 存取周期:可以连续读写的最短时间间隔,可以理解为存储器准备数据的时间。
• 存取周期 = 存取时间 + 恢复时间
主存带宽
主存带宽Bm,也称数据传输速率,表示每秒从主存进出信息的最大数据量,单位字/秒、字节/秒。
注意单位换算:1KB=1024B,1s=1000ms。字节和秒换算尺度不统一,不能约掉。
存储容量
存储容量 = 存储单元数(可寻单元数)× 存储单元长度(存储字长)
地址位数和存储单元个数
n 位地址可寻址 2n 个存储单元
存储器参数
4M×8位 存储器:
4M=222 是存储单元个数,即需222个地址,SRAM是22根地址线,DRAM是11根地址线。
8位 是芯片的存储字长,即存储单元容量,等于数据线位数。
芯片存储字长物理上无法改变,所以使用该芯片的计算机,存储字长最少为8位,可以位扩展,但不可能位“减少”。

随机存储器 SRAM/DRAM

静态随机存储器 SRAM

SRAM特点
SRAM集成度低、速度快、价格高,故仅SRAM能用作Cache、TLB
数据线个数 = 数据位数 = 存储字长
地址线个数 = 地址位数
SRAM译码结构地址情况地址线、译码线个数
单译码结构n 位地址,2n 个存储单元n 根地址线,2n 根译码线
双译码结构n 位地址,2n 个存储单元n 根地址线,2·2n/2 根译码线

动态随机存储器 DRAM

DRAM特点内容
① 需要刷新,且按行刷新• 刷新时不可读写,称为死时间。
• 刷新一行,耗时一个存储周期。所有行都刷新一次,耗时一个刷新周期。
② 行列地址复用• 同一组地址引脚,先传行地址,再传列地址。
• 地址引脚数取行列数的最大值,一般行列地址线数相等。
③ 行缓冲区行缓冲区大小为一行数据大小。
同步动态存储器 SDRAMDRAM升级版,继承DRAM的特点,支持突发传输、流水线,连续读写快。
刷新方式策略优缺点
分散刷新存取周期之后进行一次刷新,刷新时间囊括进存取周期无死时间,存取周期翻倍
集中刷新刷新周期的后期集中刷新所有行死时间长
异步刷新刷新周期分成行数段,每一段最后进行一次刷新死时间短

SRAM和DRAM对比

特点破环性读出刷新送行列地址速度集成度成本主要用途
SRAM非破环性读出不需刷新同时送高速缓存
DRAM破环性读出需要刷新分两次送内存

存储芯片的扩展

扩展方式含义变化
位扩展多个芯片“并联”存储单元个数不变,存储单元位数 ×2
字扩展多个芯片“串联”存储单元个数 ×2,存储单元位数不变
字位同时扩展多个芯片“串并联”存储单元个数 ×2,存储单元位数 ×2

存储单元个数 和 地址位数 有关,存储单元位数 = 存储单元容量。

字扩展片选信号

位扩展不影响地址。字扩展2n个存储芯片,需高位增加n位片选地址。

以第2个芯片为例,首地址为01 0000 0000 0000 0000 = 10000H,末地址为1FFFFH

多模块存储器

存储芯片扩展成存储体,存储体组合成存储器。

多模块存储器内容
高位交叉编址
(连续交叉编址)
多个存储体“串联”,地址高位作“体号”,低位作“体内地址。缺点:数据传输不连续。
低位交叉编址
(轮流启动)
多个存储体“并联”,地址高位作“体内地址”,低位作“体号”。
最佳情况:
m ≥ T/r 时效率最高,体数 = 存储周期 / 数据传输时间。
• 连续存取n个体需要的时间 t = T+(n-1)r.
• 连续存取并传输n个体需要的时间 t = T+nr.
一个存储周期内存储器可以存取m个存储字,一个数据传输时间内存储器可以存取1个存储字。
优点:数据传输连续。
低位交叉编址
(同时启动)
每次存取数据只能访问“同一行”。如果数据跨行存储,就需要多个存储周期。
• 轮流启动:数据总线宽度 = MDR位数 = 存储字长。
• 同时启动:数据总线宽度 = MDR位数 = 存储字长 × 体数
高位交叉编址(连续交叉编址)
低位交叉编址(轮流启动)
低位交叉编址(同时启动)

只读存储器 ROM

名称特点
ROM(常规ROM)只能读不能写
PROM(一次可编程ROM)可以写一次,不能擦
EPROM(可擦除可编程ROM)紫外线擦除
EEPROM(电擦除可编程ROM)高电压擦除

闪存 Flash

  • U盘、固态硬盘。
  • 非易失性存储器,断电后可长期保存,支持电擦除和在线重写,读写性能不对称,读比写快得多。

机械硬盘 HDD

机械硬盘HDD,也叫温彻斯特硬盘,以磁性存储为主。

磁盘物理结构

磁盘组成作用
盘片存储数据
磁盘驱动器接收磁盘控制器的控制信号,驱动磁盘转动,在盘面上通过磁头读写。
磁盘控制器磁盘驱动器与主机的IO接口,接收CPU命令返回磁盘状态,向磁盘驱动器发控制信号。
数据作用
盘面数用于存储数据的单双面的数量
柱面数盘片上有多少条磁道
扇区数磁道上有多少个扇区

磁盘地址结构

若驱动器唯一则驱动器号可省略。

连续数据的存储,在同一个柱面,从上往下一个盘面一个盘面存。所以先柱面号,再盘面号,最后扇区号。

性能指标

性能指标内容
道密度
位密度
面密度
半径方向单位长度上的磁道数
磁道单位长度上的能记录的二进制位数
道密度 × 位密度
磁盘容量有格式化容量和非格式化容量,格式化容量比非格式化容量小
平均存取时间平均存取时间 = 平均寻道时间 + 旋转延迟时间 + 数据传输时间
① 寻道时间:直接给出
② 旋转延迟时间:磁盘转半圈的时间
③ 数据传输时间:磁头扫过数据块的时间(取决于数据区域占磁道之比)。若题目给出磁盘传输速率,用数据大小除以传输速率。
若题设给出其他延迟时间,需额外算上。

独立磁盘冗余阵列 RAID

RAID:将多个物理硬盘以不同的方式组合成一个逻辑硬盘的技术。

使用RAID的目的:提高硬盘的读写性能数据安全可靠性。提高可靠性只有两种方式:冗余和校验。

RAID技术特点
RAID0条带化存储,并联多个硬盘,类似交叉编址提高速度,无冗余,无校验
RAID1磁盘镜像技术,提供冗余,适合存储关键数据镜像存储,一半冗余,无校验
RAID2使用海明码校验冗余少,有校验,存储校验码
RAID3~6使用奇偶校验冗余少,有校验,存储校验码

冗余表褒义,代表数据安全。

固态硬盘 SSD

固态硬盘特点
半导体器件,由U盘发展而来。
相比常规磁盘,优势在于随机存取速度快。
写速度相对读速度较慢,但仍远高于机械硬盘。

固态内部结构

读写单位
页级读写:以页为单位读写。
块级擦除:以块为单位擦除。

写速度慢的原因是,改写一个块需要拷贝再改写到另一个页中。

磨损均衡技术

磨损均衡技术内容
动态磨损均衡写入时优先选择擦写次数较少的空闲块。
静态磨损均衡控制器定期扫描,将高磨损块的数据迁移至低磨损块中,高磨损块以读为主,低磨损块以写为主,以均衡整体寿命。
静态均衡算法比动态均衡算法更优秀。

高速缓存 Cache

Cache的基本原理

局部性原理
• 时间局部性:现在用的信息,未来还要用。
• 空间局部性:未来用的信息,在现在所用信息的附近。
CPU访问数据逻辑
𝟏. 首先去Cache中取数据,若命中,则算一次Cache存取。
𝟐. 若未命中,则将数据从主存调入Cache,再从Cache访问数据,算一次Cache存取+一次主存存取。
性能指标
• Cache的命中率 h=NcNc+Nm .
• 平均访问时间 = 命中率 × 访问Cache时间 + ( 1 - 命中率 ) × ( 访问Cache时间 + 访问主存时间 )
          = 访问Cache时间 + ( 1 - 命中率 ) × 访问主存时间

Cache的映射方式

映射方式内容
直接映射直接映射,主存块只能放到固定位置。
• 主存地址 = 主存块号 + 块内地址 = Tag + Cache块号 + 块内地址
计算步骤:
• 主存块号 = 主存地址 / 块大小
• Cache块号 = 主存块号 % Cache块数
块内地址位数取决于块大小,Cache块号位数取决于Cache块数,主存地址位数取决于主存大小。
全相联映射全相联映射,主存块可以放到任意位置。
• 主存地址 = 主存块号 + 块内地址 = Tag + 块内地址
组相联映射组相联映射,主存块只能放在固定组中,但组内可以放到任意位置。n路组相联表示一个组内有n个Cache块。
• 主存地址 = 主存块号 + 块内地址 = Tag + Cache组号 + 块内地址
计算步骤:
• Cache组数 = Cache块数 / Cache路数
• Cache组号 = 主存块号 % Cache组数
直接映射
全相联映射
组相联映射
三种映射方式地址划分

思路提示

由于映射位置是轮着来的,所以映射位置本质就是主存块号的“尾号”。不管是何种映射方式都是这样,所以“看尾号”很重要。

Cache的比较器

从Cache中获取数据,需要先找到对应位置,再比较保存的Tag信息与自身地址中的Tag是否相等,相等则命中。

映射方式比较器个数
全相联映射因为每块都能映射到所有的Cache行,因此只需设置n个比较器。
直接映射因为每块只能映射到唯一的Cache行,因此只需设置1个比较器。
r 路组相联映射因为每块只能映射到唯一的Cache组,需与r个Cache行比较,需设置r个比较器。
  • 每次获取仅消耗一次比较的时间,因为有多个比较器并行工作。
  • 比较器仅需对比Tag位,比较器位数就是Tag位数。

Cache块的替换算法

替换算法的目标是找到代价最小的块。只有全相联和组相联需考虑替换算法,直接映射替换位置唯一,无需替换算法。

替换算法策略替换位
RAND 随机替换随机找一个位置替换0
FIFO 先进先出谁先进来替换谁log2n
LRU 最近最久未使用 ★设置计数器,没使用就加1,替换计数最大者log2n
LFU 最不经常使用设置计数器,被使用就加1,替换计数最小者长度无限,无需考虑

FIFO、LRU替换位中的n指候选块总数,故组相联时n指路数,全相联时n指总块数。

LRU手算方法

向前找第n个最近最久未使用的,重复的不算。假设有4个Cache块,访问主存块的序列为

 1  2  3  2  4  1  2  5
  <---√4--1--3--2--1--↑

Cache的写策略

情况名称策略优缺点
写命中全写法又写Cache,又写存数据一致性,增加访存次数
写命中回写法只写Cache,不写存,换出时再写存数据不一致,减少访存次数
写不命中写分配法调入Cache,只写Cache数据不一致
写不命中非写分配法不调Cache,只写存数据一致性
全写法、回写法特点
• 全写法(直写法)可提供写缓冲队列,CPU同时写入Cache和缓冲区,缓冲区自行写入主存。
• 回写法需为每个Cache块设置修改位(脏位)。
各策略搭配情况
• 写分配法只能搭配回写法,非写分配法只能搭配全写法。
• 当题设说明采用回写法,就意味着写不命中时采用写分配法。

Cache的容量

Cache的行容量
Cache行 = 标记项 + 数据块 = 标记位Tag + 有效位1b + 脏位1b + 替换位log2n + 数据块
仅回写法需要设置脏位,随机替换算法无替换位。
Cache的总容量
Cache总容量 = Cache行数 × Cache一行容量

虚拟存储器

基本概念

常规存储器的缺点:

  1. 一次性:必须全部加载才能运行作业,当作业很大或有大量作业无法全部装入。
  2. 驻留性:作业执行完毕前,必须全部驻留内存。

虚拟存储器解决主存容量不够用的问题,存在于主存-辅存层,所以虚拟地址与物理地址的转换由操作系统负责。

内外存的数据交换以页为单位。虚拟存储器中称页,主存中称页框,页与页框的大小相同。

  • “基本分页”:基于常规存储器,将程序的所有页导入内存。
  • “请求分页”:基于虚拟存储器,只将访问的页导入内存。

一个进程拥有一个虚拟地址空间和一个页表,主存唯一存在。

CPU访存全过程

通过虚拟地址获取物理地址
𝟏. CPU给出虚拟地址,
𝟐. 先查快表,若命中,直接转换为物理地址。若未命中,
𝟑. 再查页表,若命中,更新快表并转换为物理地址。若未命中,触发缺页中断后更新页表和快表。
使用物理地址获取数据
𝟒. 访Cache,若命中,直接将数据取出来。若未命中,
𝟓. 访存,将数据送Cache,再从Cache中访问。

段式/段页式虚拟存储器

段式虚拟存储器
按段划分程序,段长不固定。
𝟏. 段表项中存储段长和基址。段号须小于段表长度、段内偏移量须小于段长。
𝟐. 段内偏移量 + 基址 = 数据的地址。
𝟑. 地址划分为 段号 + 段内地址。
段页式虚拟存储器
先分段再分页。先分成大小不等的段,段内再分成大小相等的页。
𝟏. 进程拥有一张段表,每个段拥有一张页表。
𝟐. 地址划分为 段号 + 页号 + 页内地址。

页表 Page

页表
页表记录虚拟页号到物理页号的映射。
页表项中不存虚拟页号,只存储物理页号,有效位和脏位是否存在看题设。
页表计算内容
页表项宽度页表项宽度 = 有效位 + 脏位 + 页框号
页表项个度页表项个度 = 进程页数,一个虚拟页对应一个页表项
页表大小页表大小 = 页表项宽度 × 页表长度
物理地址页内地址不变,虚页号转换成页框号
地址转换的角色任务
硬件 MMU逻辑地址到物理地址的转换(先查TLB,未命中则查页表)
软件 操作系统页表/段表的建立、更新、缺页中断处理、权限检查及异常处理

快表 TLB

快表 TLB
快表TLB是相联存储器,地址转换先查TLB以保证速度。
快表使用虚拟块号映射物理块号,将虚拟地址分为Tag + TLB组号 + 页内地址。故快表项中存储Tag和实页号。

访存命中分析

情况TLBPageCache访内存次数和工作访外存次数和工作
1命中命中命中0次
2命中命中缺失1次,获取数据
3缺失命中命中1次,获取地址
4缺失命中缺失2次,获取地址和数据
5缺失缺失缺失2次,获取地址和数据1次,调入内存
  1. 快表中的数据是从页表中复制的,故TLB命中,Page一定命中
  2. 缓存中的数据是从内存中复制的,故Cache命中,Page一定命中

第四章 指令系统

指令的概念

概念解释
指令系统所有机器指令的集合。
指令集体系结构ISA指令系统的设计规范。ISA是软硬件之间的接口,对上是机器语言和汇编语言的基础,对下是硬件的使用者。
微体系结构/微架构具体硬件的设计规范。软件感知不到。
结构层级规定内容
指令集体系结构ISA指令格式,寄存器,寻址方式,虚拟内存、地址翻译机制,中断异常处理机制
微体系结构控制信号,时钟周期,流水线,数据通路,Cache,ALU、译码器,TLB

指令集体系结构ISA指明指令的具体设计,微体系结构指定硬件的实现方法。

指令的格式

指令一般包含三大内容:操作码、形式地址A和寻址方式位。

指令内容作用
操作码操作类型的编号。
形式地址A可能是操作数本身,或是操作数所在寄存器编号或主存地址。数量可能有0到4个。
寻址方式位寻址方式的编号。(寻址方式位可有可无)
零地址指令
零地址指令只有操作码。两种可能:
① 无需操作数的指令:空操作指令、停机指令、关中断指令。
② 隐含操作数的指令:参与运算的两个操作数被放在栈顶和次栈顶,因此指令中无需指明地址。
如果说零地址指令一定不需要操作数,是错误的。
一地址指令
一地址指令的操作数称为目的操作数。两种可能:
① 只有目的操作数的单操作数指令:OP(A1)→A1,如++、--、取反等。
② 隐含约定目的地址的双操作数指令:(ACC)OP(A1)→ACC,A1和ACC的运算结果写回ACC。
二地址指令
二地址指令的操作数分别为目的操作数和源操作数,指令含义:(A1)OP(A2)→A1。
一般算术/逻辑运算指令需使用两个操作数,给出目的操作数和源操作数的地址,目的操作数地址还用于写回结果。
二地址指令的访存次数为4次,取指令一次、取操作数两次、存结果一次。
三地址指令
三地址指令的操作数分别为源操作数1、源操作数2、目的操作数,指令含义:(A1)OP(A2)→A3。
三地址指令的访存次数为4次,取指令一次、取操作数两次、存结果一次。
四地址指令
四地址指令的操作数分别为源操作数1、源操作数2、目的操作数、下条指令地址。
指令含义:(A1)OP(A2)→A3。

操作码扩展

以16位指令为例,操作码可以从4位扩展到8位、再到12位、再到16位。

操作码扩展内容
4 位操作码使用00001110共15种,1111保留作8位操作码的起始4位。
8 位操作码使用1111 00001111 1110共15种,1111 1111保留。
12位操作码使用1111 1111 00001111 1111 1110共15种,1111 1111 1111保留。
16位操作码使用1111 1111 1111 00001111 1111 1111 1111共16种,此时无需保留。

上述例子是只保留一种情况,也可以保留两种。

指令的寻址方式

取指周期

  1. 将PC中下条指令地址放到MAR中,(PC)→MAR
  2. 根据MAR中的指令地址访存获得指令放到MDR中,M(MAR)→MDR
  3. 将MDR中的指令放到IR中,(MDR)→IR
  4. PC指针自增形成下条指令地址,(PC)+1→PC
顺序寻址
程序计数器PC + “指令所占存储单元数”,自动形成下条指令的地址。
取指周期末,PC自动自增以指向下条指令,相当于PC时刻保存当前所执行指令的下条指令地址
跳跃寻址
跳跃寻址有两种地址给出方式:
𝟏. 绝对地址:直接就是转移目标地址,A→PC(A无符号数)
𝟐. 相对地址:指出当前PC值到转移目标地址的偏移量,(PC)+A→PC(A可正可负,补码表示

转移指令在指令执行阶段才进行跳跃寻址,此时PC早已在取指周期自增“1”,执行周期再将“PC+A”,故偏移量本质是相对下条指令地址的偏移量。

数据的寻址方式

寻址方式具体内容
隐含寻址操作数地址无需直接指出,隐含在ACC或栈帧中,具体据指令类型而定。
立即寻址操作数即数据本身,无需访存时间最短,但立即数的范围被限制。
直接寻址操作数即数据的有效地址EA,需访存一次。
间接寻址操作数是数据的间接地址,需访存两次。n次间接寻址需访存n+1次。
寄存器寻址操作数是寄存器编号,寄存器中存储数据本身。无需访存,地址码短,寄存器有限。
寄存器间接寻址操作数是寄存器编号,寄存器中存储数据的有效地址
相对(偏移)寻址指令的跳跃寻址,算作一种数据寻址方式,EA=(PC)+A。适用于转移指令。
三种偏移寻址的偏移量A均可正可负、使用补码表示
基址(偏移)寻址用基址寄存器BR或通用寄存器保存基址,指令的形式地址保存偏移量。
基址固定、偏移量可变,二者结合为有效地址,EA=(BR)+A。适用于多道程序设计。
变址(偏移)寻址用变址寄存器IX或通用寄存器保存变址,指令的形式地址保存偏移量。
变址可变、偏移量固定,二者结合为有效地址,EA=(IX)+A。用户可更改,适用于循环、数组遍历。
堆栈寻址用寄存器或内存的一块区域模拟堆栈,寄存器堆栈称硬堆栈,内存堆栈称软堆栈。堆栈读写位置由堆栈指针SP指出,故一般堆栈寻址的指令隐含操作数。
多次间接寻址的地址空间可用标志位标识,间接地址为1,真实地址为0。
基址变址寻址若采用通用寄存器,须在指令中指明寄存器编号。

复杂精简指令集 CISC/RISC

复杂指令系统CISC
1. 指令系统复杂,指令数目200条以上。
2. 指令长度不固定,格式多,寻址方式多指令访存性不受限制。指令间使用频度差距大。
3. 各种指令执行时间相差很大,大多数指令需多个时钟周期才能完成。
4. 控制器采用微程序控制,难以通过优化编译生成高效的目标代码程序。
精简指令系统RISC
1. 指令数量少,格式少,都为等长指令寻址方式相对少,适合流水线操作。
2. 仅LOAD/STORE指令可访存,LOAD指令读存储器,STORE指令写存储器。
3. 寄存器多,大大减少访存操作。
4. 控制器采用硬布线控制。
对比复杂指令集 CISC精简指令集 RISC
指令数目一般大于200条一般小于200条
指令字长不固定固定
指令功能功能强好功能简单
可访存指令不加限制只有LOAD/STORE指令
各种指令执行时间相差较大绝大多数能在一个周期内完成
各种指令使用频率相差很大比较均衡
通用寄存器数量较少较多
控制方式绝大多数为微程序控制器绝大多数为硬布线控制器
兼容性
编译优化不利于编译优化有利于编译优化
指令流水线可以通过一定方式实现必须实现

程序的机器级表示

常用汇编指令

数据转移指令含义
move eax, ebx / move byte ptr [var], 5将ebx内容写入eax / 将5写存地址var字长byte
push eax / push [var]将eax内容压栈 / 将地址var的内容压栈,栈帧数据默认4B
pop eax / pop [var]弹栈放入eax / 弹栈放入地址var处
算术运算指令含义
add d, s / sub d, sd加s、d减s,结果存入d
mul d, s / imul d, s / imul m, d, sd无符号乘s,结果存入d / d有符号乘s,结果存入m
div s / idiv s除数为s,被除数为edx:eax的64位组合
二进制运算指令含义
neg d / inc d / dec dd取反、d自增、d自减
shl d, s / shr d, sd逻辑左移s位,d逻辑右移s位
逻辑运算指令含义
and d, s / or d, s / not dd和s逐位与,d和s逐位或,d逐位取反,结果放入d
xor d, sd逐位异或,结果放入d
控制流指令含义
cmp eax, 10执行减法,不存结果,仅更新标志位,以供转移指令使用
test eax, 10执行按位与,不存结果,仅更新标志位,以供转移指令使用
无条件转移指令含义
jmp 128跳转到128地址位置
jmp [128]跳转到主存188地址中所保存的位置
jmp .L1跳转到.L1标记位置
call / retcall跳转到函数入口,ret返回call指令的下一条指令
条件转移指令含义
je / jnejump if equal / if not equal
jz / jnejump if zero / if not zero
jg / jgejump if greater / if greater or equal
jl / jlejump if less / if less or equal

选择结构的机器级表示

asm
int  f1(int n){
  1     00401000   55             push ebp
     ...       ...            ...
     if(n>1)
  11    00401018   83 7D 08 01    cmp dword ptr [ebp+8], 1
  12    0040101C   7E 17          jle f1+35h (00401035)
     return n*f1(n-1);
  13    0040101E   8B 45 08       mov eax, dword ptr [ebp+8]
  14    00401021   83 E8 01       sub eax, 1
  15    00401024   50             push eax
  16    00401025   E8 D6 FF FF FF call f1 (00401000)
     ...       ...            ...
  19    00401030   0F AF C1       imul eax, ecx
  20    00401033   EB 05          jmp f1+3Ah (0040103a)
     else return 1;
  21    00401035   B8 01 00 00 00 mov eax, 1
}
     ...       ...            ...
  26    00401040   3B EC          cmp ebp, esp
     ...       ...            ...
  30    0040104A   C3             ret

循环结构的机器级表示

asm
for(i=0; i<24; i++)
1   00401072  C7 45 F8 00 00 00 00              mov [ebp-8], 0
2   00401079  EB 09                             jmp 00401084h
3   0040107B  8B 55 F8                          mov eax, [ebp-8]
    ...       ...                               ...
7   00401088  7D 32                             jge 004010bch
    for(j=0; j<64; j++)
8   0040108A  C7 45 FC 00 00 00 00              mov [ebp-4], 0
    ...       ...                               ...
        a[i][j]=10;
    ...       ...                               ...
19  004010AE  C7 84 82 00 20 42 00 0A 00 00 00  mov [ecx+edx*4+00422000h], 0Ah
20  ...       ...                               ...

过程调用的机器级表示

asm
    int add(int x, int y){
        return x+y;
    }
    int caller(){
        int temp1=125;
        int temp2=80;
        int sum=add(templ,temp2);
        return sum;
    }
	caller:
        push ebp
        mov ebp, esp
        sub esp, 24
        mov [ebp-12], 125           # M[R[ebp]-12]←125,即temp1=125
        mov [ebp-8], 80             # M[R[ebp]-8]←80,即temp2=80
        mov eax, dword ptr [ebp-8]  # R[eax]←M[R[ebp]-8], 即R[eax]=temp2
        mov [esp+4],eax             # M[R[esp]+4]←R[eax],即temp2入栈
        mov eax, dword ptr [ebp-12] # R[eax]←M[R[ebp]-12],即R[eax]=temp1
        mov [esp], eax              # M[R[esp]]←R[eax],即temp1入栈
        call add                    # 调用add,将返回值保存在eax中
        mov [ebp-4], eax            # M[R[ebp]-4]←R[eax],即add返回值送sum
        mov eax, dword ptr [ebp-4]  # R[eax]←M[R[ebp]-4],即sum作为返回值
        leave
        ret

第五章 中央处理器

CPU的功能和结构

CPU功能有:指挥指令周期的过程、处理异常和中断、时序控制。

CPU的组成

部件功能


算术逻辑单元ALU执行算术和逻辑运算的核心部件,运算结果和状态标志写入寄存器。
程序状态字PSW标志寄存器FR,保存ALU运算的状态信息,用于条件判断与转移控制。
通用寄存器组GPRs可编程供用户程序使用,多用于暂存数据,减少主存访问提升效率。


控制单元CUCPU指挥中心,负责指令译码、生成微操作控制信号,协调CPU部件。
地址寄存器MAR存放当前要访问的主存地址。
数据寄存器MDR暂存从主存读出的数据或将要写入主存的数据。
指令寄存器IR存放从存储器取出的指令。IR的位数等于指令的位数。
程序计数器PC取指周期结束后,存放CPU下一条指令的地址。

PC的位数问题

PC的位数问题
一般情况下,PC位数 = 地址位数 = MAR位数。
PC的位若指令按指令字长边界对齐,即指令存放时按指令字长编址。按字编址4GB4B=230,指令地址仅需30位。

可见或透明的寄存器

可见或透明的寄存器
可见或透明是针对用户程序而言,
程序可使用的寄存器,有PC、GRPs、PSW以及基址变址堆栈寄存器。
程序不可见的寄存器,有IR、MAR、MDR等一系列内核功能所用寄存器。

指令周期的数据流向

概念内容
指令周期CPU取出并执行指令的全部过程。
指令周期是灵活的,有的指令只有取指周期,有的只有取指周期和执行周期,不同指令的执行周期不一定相等。
机器周期指令周期的每个阶段称为一个机器周期。(区别于CPU时钟周期)

取指周期

根据PC中的指令地址,从主存中取出指令代码存放在IR中。

  1. 取指操作无需操作码,由控制器自动进行。
  2. 当指令定长时,所有指令的取指都相同。
  3. 取指周期必定访问存储器。
数据流向机器指令描述
PC 1 MAR 2 地址总线 3 主存PC→MAR将PC中的指令地址放入MAR
CU发出读命令 4 控制总线 5 主存M(MAR)→MDR拿MAR指令地址访存,将指令放到MDR中
主存 6 数据总线 7 MDR 8 IR(MDR)→IR将MDR中的指令放到IR中
CU发出控制信号 9 PC加1(PC)+“1”→PCPC自动指向下一条指令的地址

间址周期

访存取出操作数的有效地址EA,而非操作数本身。

数据流向机器指令描述
Op(IR) 0 CUOp(IR)→CU将操作码提供给CU,以进行译码
Ad(IR) 1 MAR 2 地址总线 3 主存Ad(IR)→MAR取出指令中的形式地址A,放入MAR中
CU发出读命令 4 控制总线 5 主存读出主存中的有效地址EA
主存 6 数据总线 7 MDRM(MAR)→MDR将有效地址EA放入MDR中

执行周期

执行周期
通过有效地址EA取出操作数,并根据指令的操作码,进行运算并产生结果。
执行周期的特点
𝟏. 取操作数未必需要访存,取决于数据的寻址方式
𝟐. 不同指令的执行不同,因此没有统一的数据流向

各周期访存对比

周期是否访存访存工作
取指周期一定访存访存取指令
间址周期一定访存访存取操作数的有效地址EA
执行周期不一定访存取决于数据寻址方式

数据通路的概念

数据通路的定义

数据通路的定义
数据在功能部件之间传送的路径,包括功能部件本身,统称为数据通路。
• 数据流经的部件包括ALU、通用寄存器、状态寄存器、异常和中断处理逻辑。
• CPU由数据通路和控制部件两部分组成。控制部件会根据指令生成对数据通路的控制信号。
数据通路描述了信息从什么地方开始,中间经过哪个寄存器或多路开关,最后传送到哪个寄存器,这些都由控制信号决定。

数据通路的组成

数据通路由组合逻辑元件(操作元件)和时序逻辑元件(状态元件)组成。

数据通路组成内容特点
组合逻辑元件(操作元件)算术逻辑单元、译码器、多路选择器、三态门数据存不住
时序逻辑元件(状态元件)通用寄存器、程序计数器、状态/暂存/移位/锁存寄存器数据存的住

三态门、多路选择器的作用

  • 多路选择器(MUX)通过控制信号Select来确定哪个输入被输出。
  • 三态门视为一种控制开关,由控制信号EN决定信号线的通断,也就是所连寄存器与总线通断。

数据通路的结构

总线方式含义特点
单总线方式所有寄存器的输入输出端都接在一条公共通路上结构简单、容易冲突、性能较低
多总线方式所有寄存器的输入输出端都接到多条公共通路上效率较高
专用数据通路根据指令执行过程中的数据流向安排连接线路避免共享,性能更高,硬件量大

单总线结构

单总线框图描述

  • 虚线表示控制信号,实线表示数据流向。
  • 三态门 表示通过信号控制连接和断开, 表示并行传输4位二进制数据。
  • XXin XXout 表示XX部件的输入输出的控制信号,信号有效则表示数据会从该部件发出或进入。
  • ALU两个输入端:一个直接与总线相连,一个与暂存器相连。
  • ALU两个输出端:一个与暂存器相连,一个与标志寄存器FR/程序状态字寄存器PSW相连。
  • 单总线结构同时仅能有一个部件发数据,但可有多个部件接收数据。
  • 单总线结构无法实现单周期CPU。

数据从一个部件流入另一个部件的时间为一个时钟周期,单总线光取指周期就需要多个时钟周期,所以一个时钟周期不可能完成指令。

取指间址的信号序列

取指周期 数据流信号序列间址周期 数据流信号序列
T0(PC)→MARPCout=1 MARin=1T0op(IR)→CUIRout=1 CUin=1
T1M(MAR)→MDRRead=1 MDRin=1T1ad(IR)→MARIRout=1 MARin=1
T2(MDR)→IRMDRout=1 IRin=1T2M(MAR)→MDRMARout=1 MDRin=1
T3(PC)+“1”→PCPCout=1 PCin=1

单周期和多周期CPU

CPU分类CPI内容
单周期CPU平均CPI = 1每条指令都在一个时钟周期内完成,时钟周期由耗时最长的指令决定。单周期CPU使用单周期数据通路。
多周期CPU平均CPI > 1不同指令所分配时钟周期数不同,时钟周期由最复杂的指令阶段决定。多周期CPU使用多周期数据通路。

时钟周期的概念

时钟周期是计算机内最小时间单位,

  • 控制器以时钟周期为单位产生控制信号。即一个时钟周期内,控制信号不变。
  • 而发出一次控制信号,只会控制对应部件运行一次。即一个时钟周期内,每个部件最多使用一次。
单周期数据通路的特点
• 对于单周期CPU而言,一次指令执行过程中,控制信号不会发生改变,每个部件只会使用一次。
• 对于多周期CPU而言,一次指令执行过程中,控制信号多次发生改变,每个部件可以使用多次。
单周期数据通路,程序计数器PC无须写使能控制信号。
单周期CPU每个时钟周期自动取指,故无需额外PC控制信号。
单周期数据通路,一个时钟周期内无法发生状态元件到状态元件的数据转移。因此无需设置寄存器IR。
单周期数据通路,指令和数据需分离存储,一个存储器在一个时钟周期内,只能响应一个地址请求。

控制器的概念

控制器是CPU的指挥中心,主要功能有:

控制器的功能内容
取指从主存取指,并指出下条指令的地址。
译码对指令译码,并产生控制信号。
控制指挥CPU、主存、IO设备间的数据流动。

控制器的输入输出

控制器内容
输入端𝟏. 指令操作码或操作码的译码结果
𝟐. 运算器的反馈信息/运算标志。反馈信息又叫条件码、标志位,来自PSW/FR寄存器。
𝟑. 时钟脉冲/时序信号
输出端输出控制信号给各部件

控制器的分类

根据控制信号产生方式的不同,分为硬布线控制器和微程序控制器,二者控制单元CU实现不同。

对比微程序控制器硬布线控制器
组成软件+硬件(硬件结构+微程序固件)硬件(组合电路+时序电路)
速度
指令集CISCRISC
扩充性容易困难

微程序控制器

微程序控制的概念

  • 微程序设计思想是将机器指令编写成一个微程序,微程序由微指令组成。
  • 微指令存储在控制存储器CM中,微指令的寻址方式和机器指令类似。x86平台多采用微程序技术。

控制存储器CM是一块ROM芯片,能按地址进行随机存取。

概念含义对应关系
微命令控制器发出的控制信号,如(PC)→MAR一条微指令 ⇔ 多个微命令
微操作执行部件收到微命令所做的操作,如PCout MARin一个微操作 ⇔ 一套微命令
一条机器指令 ⇔ 一个微程序 ⇔ 若干微指令 ⇔ 若干多个微指令

控制存储器和主存的区别

  • 主存储器用于存放程序和数据,在CPU外部,用ROM和RAM实现。
  • 控制存储器用于存放微程序,在CPU内部,用ROM实现。
  • 存放指令的主存储器单元的地址称为地址。
  • 存放微指令的控制存储器单元的地址称为微地址。
  • 程序是指令的集合,以实现特定功能。
  • 微程序是微指令的集合,以实现机器指令。

微程序控制器的组成

组成部件介绍
微地址形成部件根据指令操作码生成对应微程序的入口地址,依据当前微指令的顺序控制字段及状态条件,产生后续微地址。
微指令地址寄存器μPC接收微地址形成部件提供的微地址,作为CM的读地址。
控制存储器CS/CM微程序控制器的核心部件,用于存放所有机器指令对应的微程序。
微指令寄存器μIR暂存从CM中读出的微指令,并将其操作控制字段和顺序控制字段分别送至执行单元和微地址形成部件。

微程序控制器的工作过程

① 执行取指令公共操作
将取指微程序的入口地址(通常为0号地址)送入μPC,再从CM中读取首条取指微指令并送入μIR。完成取指微程序后,从主存中取出的机器指令即被存入指令寄存器IR中。
② 生成当前指令的微程序入口地址
根据IR中机器指令的操作码,通过微地址形成部件产生对应微程序的起始微地址,并送入μPC。
③ 顺序执行微程序
在CM中逐条读取微指令,送入μIR并执行,直至该微程序执行完毕。
④ 循环重新取指
当前指令的微程序执行结束后,控制器自动转移到取指微程序的入口,重新开始处理下一条机器指令。

微指令地址的生成方式

地址生成方式
微程序入口地址一条机器指令从主存取出并送入IR后,微地址形成部件通过其操作码,生成对应微程序的首条微指令地址,并送入μPC。
顺序执行增量方式:由μPC+1自动生成下条微地址。
断定方式:微指令的下地址字段中指出下一条微指令地址。
条件分支(转移)增量方式:修改μPC。
断定方式:微指令的下地址字段指定的转移目标地址。

微指令的格式和编码方式

微指令的内容
操作控制字段也称微操作码字段,表示各种控制信号。
顺序控制字段也称微地址码字段,表示下条微指令的地址。
微周期是指从控制存储器中取出并执行一条微指令所需的全部时间,通常为一个时钟周期。
微指令的编码方式
编码方式内容
直接编码微命令字段相当于位图,每一位代表一个微命令。
无需译码,简单直观,速度快,并行性好,但字长过长。
字段直接编码微命令字段分成若干小字段,每个字段独立编码。互斥性微命令编进同一字段,相容性微命令编进不同字段。
缩短字长,但削弱并行性。
字段间接编码一个字段的某些微命令需由另一个字段中的某些微命令来解释,又称隐式编码。
进一步缩短字长,进一步削弱并行性。

字段直接编码的具体编码方法

直接编码方式本质就是位图,该位置1表示有效,置0表示无效。

字段直接编码方式用字段编码,比如三位划作一个字段,该字段可表示23-1个微命令,留出一种以表示空

  • 互斥性微命令:同一个时钟周期内,不能同时出现的微命令,需划分到一个字段
  • 相容性微命令:同一个时钟周期内,可以同时出现的微命令,需划分到不同字段
微指令的格式
水平型微指令
从编码方式看,直接编码、字段直接编码和字段间接编码都属于水平型微指令。一条水平型微指令能定义多种微命令。
• 优点:微程序短,并行能力强,执行速度快
• 缺点:微指令长,编写微程序较麻烦
垂直型微指令
垂直型微指令类似机器指令,在微指令中设置微操作码字段,由其指定微指令的功能。一条垂直型微指令通常只能定义一种微命令。
• 优点:微指令短、简单、规整,便于编写微程序
• 缺点:微程序长,执行速度慢,工作效率低
对比水平型微指令垂直型微指令
并行性、效率、灵活性
执行时间
微指令字长
微程序长度

异常和中断机制

异常和中断的概念

概念内容
异常(内中断)指令执行过程中,检测到CPU内部的,和正在执行的指令有关的事件。
中断(外中断)指令执行结束后,检测到外设触发的,与当前执行的指令无关的事件。
异常内容
故障指令执行过程中被检测到的,处理完毕后,返回原指令位置重新执行,若无法处理,直接终止。
自陷指令执行完毕后主动触发的,处理完毕后,返回原指令的下条指令继续执行。又叫陷阱或陷入。
终止指令执行过程中发生严重的硬件故障,导致程序无法运行,因此终止。
中断内容
时钟中断系统时钟硬件,周期性发出的中断,以便系统进行任务切换。

外设中断外部设备(如键盘、硬盘、打印机等)发出的处理请求。
可屏蔽中断通过可屏蔽中断线INTR发出的中断请求,可在中断控制器中设置屏蔽字。

不可屏蔽中断通过不可屏蔽中断线NMI发出的中断请求,如紧急硬件故障,电源掉电等。

异常或中断的检测时机

  • 异常是在指令执行周期发生、检测和处理的。
  • CPU在每条指令执行周期结束时,发送中断查询信号,以检测是否有中断请求。若有中断请求,就进入中断周期,若无中断请求,就没有中断周期。

所有异常和中断都是由硬件检测的。

类型产生原因是否返回
异常(内中断)故障可恢复的错误可能返回到当前指令
自陷主动的偏离总是返回下一条指令
终止不可恢复的错误不会返回
中断(外中断)外设中断/时钟中断总是返回下一条指令

浮点数溢出是否是故障?

  • 浮点数上溢:机器停止运算,进行溢出中断处理。
  • 浮点数下溢:IEEE 754规定直接将尾数置0,可以继续运算,无需中断处理。

异常和中断的响应流程

中断的响应流程含义
𝟏. 中断判优若存在多个中断请求,通过中断判优逻辑响应一个中断源。
中断判优仅用于外中断,外中断比异常多一个中断判优。
𝟐. 中断响应的条件• 有中断请求
• CPU允许中断(异常和不可屏蔽中断不受关中断限制)
• 指令执行完毕(异常立即响应无需等到指令执行结束)
𝟑. 中断隐指令• 关中断
• 保存断点PC和程序状态PSW
• 送中断向量
这三步由硬件完成且不可打断。

异常和中断的处理流程

中断响应和执行中断服务程序统称为中断处理,流程如下:

流程处理步骤解释硬软件执行
中断
响应
1. 关中断
2. 保存断点
3. 中断服务程序寻址
中断响应必须先关中断
保存PC和PSW内容以能够返回
根据中断类型号找中断向量,执行服务程序
中断隐指令
(硬件)完成
中断
处理
4. 保存现场和屏蔽字
5. 开中断
6. 执行中断服务程序
7. 关中断
8. 恢复现场和屏蔽字
9. 开中断、中断返回
发生进程切换,需要保存进程上下文
多重中断,执行中断服务程序前,需要开中断
-
恢复进程上下文前需要关中断
恢复进程上下文
中断返回前需要开中断
中断服务程序
(软件)完成

中断向量和中断向量表

中断服务程序的首地址称中断向量,中断向量存放在中断向量表中,每个中断向量对应一个中断类型号。

中断向量在中断向量表的下标即中断类型号,中断向量的所在内存地址即中断向量地址。

  • 中断向量是中断服务程序的首地址
  • 中断向量地址是中断服务程序的首地址的地址

多重中断和中断屏蔽

在执行中断程序的过程中,若转去处理优先级更高中断请求,为多重中断/中断嵌套。

两种优先级含义
中断处理
优先级
每个中断源都有自己的中断屏蔽字,执行其中断程序时会将其放入中断屏蔽字寄存器中,代表此时的中断处理优先级。
中断执行中屏蔽寄存器才会生效,一般会屏蔽自身同等级以及更低优先级的中断。处理优先级决定了中断是否会被屏蔽。
中断响应
优先级
中断响应优先级由硬件排队电路(或程序逐个查询优先级)决定,不可动态改变。响应优先级决定了多个未屏蔽中断优先处理谁。
此时新中断请求,会先经处理优先级过滤,再按响应优先级进行判优。

指令流水线

指令流水线的概念

将一个指令分成五个阶段,每个阶段使用不同部件,这样同一时刻可执行多个指令的不同阶段,这就是流水线技术。

流水段内容
取指 (IF)从指令存储器或Cache中取指令。
译码/读寄存器 (ID)控制器对指令进行译码,同时从寄存器中取操作数。
执行/计算地址 (EX)执行运算操作或计算地址。
访存 (MEM)对存储器进行读写操作。
写回 (WB)将指令执行结果写回寄存器。

指令流水段的时长

  • 一个时段T就是一个CPU时钟周期,因此时钟周期必须为五个阶段的最长耗时。
  • 从5T开始,每隔一个时钟周期就有一条指令流出流水线,做到平均CPI为1。

流水线的逻辑结构

  • 因各阶段耗时不同,故需设置寄存器暂存本段的结果和控制信号,以便在下个周期提供给下个流水段。
  • 统一的CLK时钟信号即作用在功能部件上,也作用在流水段寄存器上。
  • 单周期和流水线CPU的取指和译码阶段自动完成,不需要控制信号的参与,但多周期CPU需要。

流水线的指令要求

  1. 长度一致:指令长度尽量一致,利于简化取指和译码操作。
  2. 格式规整:指令格式尽量规整。
  3. 访存受限:仅Load/Store指令可访存。
  4. 内存对齐:数据在存储器中对齐存放。

流水线的性能指标

任务耗时
• 5段指令采用流水线执行n条指令的耗时:5T+(n-1)T
• 5段指令不用流水线执行n条指令的耗时:5nT
• k段指令采用流水线执行n条指令的耗时:kT+(n-1)T
• k段指令不用流水线执行n条指令的耗时:knT
k段指令采用流水线,前kT只能完成一条指令,后面每个T都能完成一条指令,故总耗时是 (k + n- 1)T
吞吐率
单位时间内流水线所完成的任务量,即任务量 / 所耗时间。
TP=nTk=n(k+n1)Δt
n是任务数量,k是流水段数,Δt是时钟周期。n充分大时,TPmax=1/Δt 。
加速比
相同任务量下,不用流水线和使用流水线的耗时之比。
S=T0Tk=knΔt(k+n1)Δt=knk+n1
n充分大时,Smax=k 。

流水线冒险和处理

不同类型的指令在各流水段中的操作

  • 运算型指令:EX阶段执行运算,MEM阶段空操作,WB阶段写回
  • 访存型指令:EX阶段计算地址,MEM阶段访存,WB阶段将结果写入寄存器
  • 控制型指令:EX阶段计算地址,MEM阶段送PC,WB阶段空操作
结构冒险(资源冲突)
不同指令在同一时刻争用同一部件而形成冲突,如取指IF和访存MEM可能会冲突。
解决方法
𝟏. 插入空操作指令 (nop) 或硬件阻塞 (stall)
延迟执行相关指令,将后续指令暂停若干时钟周期,直至前条指令的结果可被安全读取。有软件插入空操作指令 (nop) 和硬件插入气泡 (stall) 两种方法。
𝟐. 程序和数据的缓存分离
控制冒险(控制冲突)
当遇到改变指令执行顺序的情况,例如转移指令、返回指令、异常和中断时,执行时会改变PC值从而造成断流。
转移指令在MEM阶段会判断转移条件是否满足,若转移条件满足,此时下方所有已执行的流水段全部作废。
解决方法
以上图为例,若转移条件满足,目标指令需延迟到转移指令的MEM阶段之后执行,若转移条件不满足,则没有浪费继续执行。
𝟏. 插入空操作指令 (nop) 或硬件阻塞 (stall)
𝟐. 进行分支预测,尽早生成转移目标地址
    分支预测分为静态预测和动态预测,动态预测是根据转移的历史情况调整预测策略,有较高准确率。
数据冒险(数据相关)
下条指令的所用数据是上条指令的执行结果,下条指令使用时结果还没有写入。
解决方法
𝟏. 插入空操作指令 (nop) 或硬件阻塞 (stall) 𝟐. 使用旁路转发
设置转发通路,不等前条指令把结果写回寄存器,下条指令也不从寄存器读,直接将EX阶段数据转发到ALU的输入端,相当于EX到EX。
Load-use数据冒险
Load-use是数据冒险中的特殊情况,下条指令的所用数据是上条指令的访存结果。
解决方法
Load-use冒险光靠旁路转发不能解决,必须延迟一个周期,再旁路转发。

高级流水线

高级流水线内容
超标量流水线能够在一个时钟周期内同时执行多条指令,需配备多套部件。CPI>1
超流水线将流水段进一步划分,时钟周期减小主频提升。CPI = 1
超长指令字将多条可并行的指令合并成一条具有多个操作码的超长指令。需配备多个执行部件。

多处理器

计算架构的概念

计算架构含义特点
单指令流单数据流 SISD一个控制器一套计算器只能串行执行指令
单指令流多数据流 SIMD一个控制器多套计算器可对大量数据作相同处理(向量处理器)
多指令流单数据流 MISD多个控制器一套计算器没必要存在
多指令流多数据流 MIMD多个控制器多套计算器可对大量数据作不同处理(多核处理器)

多处理器的概念

多指令流多数据流 MIMD 又可分为多核处理器、多处理器系统、多计算机系统。

MIMD含义
多核处理器一个CPU中有多个处理器核心
多处理器系统一个计算机中有多个处理器,多个CPU共享一个内存 (SMP)
统一内存访问 (UMA):所有处理器共享唯一的集中式内存
非统一内存访问 (NUMA):主存划分成多个区域分配给不同CPU并以总线互连
多计算机系统一个系统中有多个计算机

硬件多线程

硬件多线程必须为线程提供单独的通用寄存器组、程序计数器等,线程切换只需激活寄存器不必访存,大大减少了线程切换的开销。

实现方式含义
细粒度多线程多个线程之间轮流交叉执行指令
粗粒度多线程连续若干时钟周期执行同一线程的指令,阻塞时切换线程且需清空流水线
同时多线程SMT单个时钟周期内同时执行多个线程的多条指令,实现了指令级并行和线程级并行,如超线程技术在一个核心中维护两套线程状态部件,但共享执行资源。

第六章 总线

总线分类

总线种类介绍
片内总线CPU芯片内部的总线
系统总线连接CPU、主存、IO接口的总线
IO总线连接主机与各类IO控制器的总线

系统总线

系统总线功能
数据总线传输数据、指令和中断类型号等,支持双向传输,数据总线位数反映一次传送的数据宽度。
地址总线传输主存地址或IO端口地址,仅支持单向传输,地址总线位数反映空间地址位数。
控制总线传输各种命令、反馈和定时信号,信号包括时钟、复位、总线请求/允许、中断请求/回答、存储器读写、IO读写、传输确认等。

总线的性能指标

性能指标含义
总线时钟周期总线有自己的时钟周期
总线时钟频率总线时钟周期的倒数
总线传输周期完成一次总线事务的时间
总线工作频率每秒完成总线事务的次数
总线宽度总线中数据线的条数,即并行传输的数据位数
总线带宽最大数据传输速率,总线带宽=总线宽度×总线工作频率
总线复用不同信息可在同一条线上传输,若没有单独地址线,地址就得通过数据线传送,即地址/数据线复用
总线寻址能力地址线位数决定地址空间量,即寻址能力。16根地址线可寻址216个单元

总线事务

主从设备之间的一次完整信息交换,称为一个总线事务。包含三个阶段:

事务阶段内容
地址传送阶段主设备将目标地址和操作类型(读/写)通过总线传送给从设备
从设备响应(数据准备)阶段从设备根据地址准备数据(该阶段耗时若未提及可忽略)
数据传送阶段完成实际数据在总线上的传输
传送方式内容
非突发传送主从设备之间一般只能传输一个总线宽度的数据
突发传送寻址阶段发的是首地址,传输阶段传送多个连续单元的数据
传送方式内容
串行传输串行同步:双方时钟严格一致,效率高,但复杂成本高。仅添加首尾定界标记。
串行异步:双方使用独立时钟,无须严格同步。格式:起始位+数据位+校验位+停止位
并行传输多条线同时传输,短距离延迟低吞吐高。信号串扰和时序偏移,限制工作频率的提升

总线定时

总线定时方式内容
独占式从发起请求到传送结束,总线全程被该事务占用
分离式将总线事务分解为请求和应答两个子过程,避免准备时段的占用
独占式内容
同步采用统一的时钟来协调双方的定时。一个总线周期可以进行一次数据传送。
速度快、逻辑简单,不能及时校验,适用于总线长度短、设备速度接近的系统。
异步无统一时钟,无固定间隔,依靠握手信号实现定时。
总线周期和长度可变、能及时校验更可靠,稍复杂且速度慢,适合速度差距大的系统。
半同步增设一条Wait响应信号线,Wait信号有效则存在数据。
控制简单、可靠性高,时钟频率不能太高、速度不快,适合速度不高的简单系统。

异步定时又分以下三类:

异步定时内容
不互锁请求信号自动撤销
半互锁请求信号必须等收到回答信号才可撤销,回答信号自动撤销
全互锁请求信号必须等收到回答信号才可撤销,回答信号必须等请求信号撤销之后撤销

第七章 输入输出系统

IO接口

IO接口/控制器:主机和外设的交界面,实现二者的信息交换,本质是程序和硬件的结合。具体功能有:信号转换、数据暂存、地址译码、控制设备、暂存设备状态等。

IO端口:接口电路设置的若干寄存器,用来缓冲数据、设定控制、保存状态等,这些寄存器可以被CPU直接访问。

IO接口在主机侧通过IO总线(系统总线)与CPU、内存相连。数据线有三种功能:

  1. 发命令:发送命令字到IO控制寄存器
  2. 读状态:从状态寄存器中读取状态字
  3. 读写数据:从数据缓冲寄存器发送或读取数据
端口作用具体内容
数据端口 / 数据缓冲寄存器读写数据用来暂存与CPU之间传送的数据
状态端口 / 状态寄存器读状态用来记录接口或设备的状态信息
控制端口 / 控制寄存器发命令用来保存CPU对外设的控制命令

状态和控制寄存器在方向上相反,时间上错开,因此可合二为一。

IO接口和系统总线的连接

线路传输内容
数据线数据本身、状态信息/状态字、控制信息/控制字、命令/命令字、中断类型号
地址线IO端口地址
控制线读写控制信号、中断请求信号、中断响应信号、仲裁信号、握手信号

IO端口的编址

IO端口须进行编址以能够被CPU访问,存在两种编址方式,独立编址和统一编址。

编址方式含义
独立编址IO端口的地址空间与主存地址空间是两个独立的地址空间。
优点:IO端口数少,只需少量地址线,译码简单,寻址速度快
缺点:需专用IO指令,增加了指令系统的复杂性。
统一编址主存地址空间分出一部分给IO端口进行编址,IO端口和主存单元在同一地址空间。
优点:CPU访IO端口和访存一致,无需专门IO指令,简化指令系统设计。
缺点:IO端口占用了一部分地址空间,导致减少了内存地址的可用范围。

IO方式

程序查询方式

CPU发命令后,外设准备数据,CPU持续查询IO状态(踏步等待),IO就绪后传送数据。

流程内容
发命今发送命令字到IO控制寄存器,向设备发送命令
读状态从状态寄存器读取状态字,获得设备的状态信息
读写数据从数据缓冲寄存器读写数据,完成数据交换
数据传输的两个阶段内容
过程1:外设准备数据外设将数据送到IO接口的数据缓冲寄存器中(取决于外设数据传输速率)
过程2:CPU传输数据将数据从数据端口传输到CPU(取决于指令执行的时间)

程序中断方式

CPU发命令后,外设准备数据,CPU调度其他进程,IO就绪通过中断程序传输数据。

程序中断的工作流程内容
中断请求外部设备向CPU发起中断请求
中断响应判优通过中断判优逻辑(一般由硬件实现)决定响应哪个中断请求
中断响应中断响应被称为中断隐指令:关中断、保存断点PC和PSW内容、送中断向量
中断处理中断响应+执行中断服务程序叫中断处理

DMA方式

DMA方式在外设与内存之间开辟了一条“直接数据通路”,信息传送不再经过CPU。

DMA控制器

使用DMA传输的设备,都接在DMA控制器上,DMA控制器负责数据交换的全过程。

寄存器功能
AR主存地址寄存器存放将要读写的主存单元地址
WC传送长度计数器记录已写入字的个数
BR数据缓冲寄存器存放将要读写的数据字
DMA整体流程
整体流程内容
预处理CPU完成准备工作
数据传输由DMA控制器完成(硬件控制),数据传输过程无需CPU参与
后处理DMA控制器发出中断请求,CPU执行中断做后处理
DMA传输过程

DMA是将一个数据块交换到主存,具体将块以字为单位进行传输。

  1. 首先CPU进行预处理,设置AR/WC/BR初始值。
  2. 当字准备好时,设备向DMA控制器发起DMA请求,DMA控制器设置AR/WC/BR内容。
  3. DMA控制器向CPU发起总线请求,CPU响应此请求,DMA控制器将字传输到主存。
  4. AR自增,WC自增。
  5. WC溢出时,发送“溢出信号”到中断机构,中断机构发起中断,请求CPU进行后处理。

CPU每隔一个总线周期,对DMA请求检测和响应一次。

DMA访问主存

DMA不经过CPU直接访问主存,若和CPU发生访问冲突,有如下三种策略:

策略解释
停止CPU访存DMA要访存时向CPU发送停止信号,CPU放弃系统总线的使用权,
整批数据传输完毕后,将总线控制器交给CPU
DMA与CPU交替访存若CPU工作周期比主存存取周期长很多,采用交替访存
周期挪用a. CPU不在访存,挪用若干个主存存取周期给IO设备
b. CPU正在访存,等待CPU机器周期结束,CPU将总线占有权让出
c. 二者同时访存,CPU暂时放弃总线占有权,因IO访存优先于CPU访存
此时DMA使用分离式总线定时,传送一个字后立即释放总线。

IO方式的比较

IO方式CPU和外设的工作情况
程序查询方式CPU和外设完全串行工作
程序中断方式CPU和外设并行,程序和传输串行
DMA方式CPU和外设并行,程序和传输并行
对比中断方式DMA方式
数据传输CPU控制数据传输,每次传一个字DMA控制数据传输,每次传一个块
中断请求发送中断请求传送数据DMA发送后处理中断请求
CPU参与率高,需要参与数据传输低,无需参与数据传输
适用场景低速小数据设备高速大容量设备
优先级DMA > 中断