原文链接:408-theory-Principles of Computer Composition
计算机系统概述
发展历程
硬件
- 电子管 1946—1957 几千次到几万次每秒
- 晶体管 1958—1964 几万次到几十万
- 中小规模集成电路 1965—1971
- 超大规模集成电路 1972年至今
软件
. 微型计算机的发展是以微处理器的技术为标志的
. 输入输出设备统称外部设备
. 运算器和控制器组成CPU,CPU和存储器组成主机
层次结构
系统组成
对某一功能来说,若其既可以用软件实现,又可以用硬件实现,称在逻辑功能上是等价的
硬件
冯诺依曼机特性:
- 采用“存储程序”的工作方式
- 硬件系统由运算器、存储器、控制器、输入设备和输出设备组成
- 指令和数据同等地位,可被区分
- 指令、数据由二进制代码组成,指令包括操作码和地址码
5个部件:
运算器
ALU(算术逻辑计算单元):ACC(累加寄存器),MQ(乘商),X(操作数),IX(变址),BR(基址),PSW(程序状态)
实现算术运算(加、减、乘、除)和逻辑运算(与、或、非、异或、比较、移位)
控制器
PC(程序计数器) IR(指令寄存器) CU(控制单元)
由程序计数器(PC)、指令寄存器(IR)和控制单元(CU)组成,控制各部件运行
存储器
MAR(地址寄存器) MDR(数据寄存器) 存储体:大量存储单元组成
分为主存储器(又称内存储器)和辅助存储器(又称外存储器),CPU可直接访问主存。
按地址存取方式工作。
输入设备
键盘、鼠标、扫描仪、摄像机等
输出设备
显示器、打印机
软件
系统软件和应用软件
系统软件:保证计算机系统高效、正确运行的基础软件。
包括操作系统(OS)、数据库管理系统(DBMS)、语言处理程序、分布式软件
系统、网络软件系统、标准库程序、服务性程序。
应用软件:为解决某个应用领域中的各类问题而编制的程序
计算机语言
机器语言:
又称二进制代码语言,是计算机唯一可以直接识别和执行的语言
汇编语言
用英文单词或其缩写代替二进制的指令代码,简化记忆。
使用汇编语言编辑的程序-汇编>机器语言
高级语言
用于开发应用
高级语言程序-编译>汇编语言-汇编>机器语言
. 汇编器:进行汇编操作
. 编译器:编译操作
. 解释器:按行读取,一行语句直接翻译机器指令。如python使用解释器,而c使用编译器
软硬件逻辑功能的等价性
逻辑功能的等价性:某一功能来说,既可以由硬件实现,又可以由软件实现
计算机系统层次结构
计算机可分为5层:
- 微程序机器(微指令系统):硬件直接执行微指令
- 传统机器:由微程序解释机器指令系统
- 操作系统机器:由操作系统程序实现(由机器指令和广义指令组成的)
- 汇编语言机器:由汇编程序支持和执行
- 高级语言机器:由高级语言编译程序支持和执行
. 3-5为虚拟机器,只有1-2层为裸机
. 低层为高层提供支持
计算机系统的工作原理
存储程序方式
取指-译码-取操作数-执行-写回结果
编译流程
源程序文本.c-预处理器预处理(cpp)>处理后程序文本.i-ccl编译(as)>汇编程序文本.s-汇编>可执行二进制程序.o-ld链接>可执行文件
程序执行过程
指令执行过程
取指令-译码-执行
. 位bit:一个二进制数1bit
. 字节byte:8位一个字节,1B=8bit
. 字word:2个字节一个字
. 双字:2个字
. 字长:字包含的位数,有的机器字的位数不同,如8,16
. 机器字长:计算机能直接处理的二进制数据的位数
. 指令字长:计算机能直接处理的二进制数据的位数
. 存储字长:一个存储单元存储二进制代码的位数
性能指标
字长
计算机进行一次整数运算能处理的位数
数据通路带宽
数据总线一次所能并行传送信息的位数
主存容量
主存储器所能存储信息的最大容量
运算速度
- 吞吐量:单位时间内处理请求的数量
- 响应时间:系统对用户发出请求响应所需时间
- CPU时钟周期:执行一个动作时间
- 主频:时钟周期倒数,单位时间执行动作数
- CPI:一条指令所需的时钟周期数,CPI是一个程序所有指令执行的平均周期数
- CPU执行时间=CPU时钟周期数/主频=(指令条数*CPI)/主频
- MIPS:每秒百万条指令数 /10^6
- MFLOPS:每秒执行百万次浮点运算次数 /10^6
- GFLOPS /10^9
- TFLOPS /10^12
- P 15
- E 18
- Z 21
基准程序
评价性能的应用程序
完整的计算机系统应包括硬件和软件系统
冯•诺依曼机基本工作方式是控制流驱动方式
CPU内置地址寄存器
数据库管理系统是系统程序,但数据库系统不是
数据的表示和运算
r进制数
$K_nK_{n-1}…K_0K_{-1}…K{-m}=\sum_{i=-m}^{n}K_i*r^i$
转换
2—>8:3位转1位(整数高位小数低位补0)
$(1111000010.01101)_2=(1702.32)_8$
2—>16:4位转1位(整数高位小数低位补0)
$(1111000010.01101)_2=(3C2.68)_16$
r->10:位权法
$K_nK_{n-1}…K_0K_{-1}…K{-m}=\sum_{i=-m}^{n}K_i*r^i$
10->r:整数部分:除基取余法小数部分:乘基取整法
原反补移码
定义
假设数值n位,机器字长n+1位,则一个整数表示范围:$[1-2^n,2^n-1]$,共$2^{n+1}-1$个整数
假设数值n位,机器字长n+1位,则一个小数表示范围:$[1-2^{-n},2^{-n}-1]$,共$2^{n+1}-1$个小数
- 原码
整数:
$x_原=0,x \quad x\in[0,2^n-1]$
$x_原=2^n-x \quad x\in(-2^n,0]$
小数:
$x_原=x \quad x\in[0,1)$
$x_原=1-x \quad x\in(-1,0)$
- 补码
整数:
$x_补=0,x \quad x\in[0,2^n)$
$x_补=2^{n+1}+x \quad x\in[-2^n,0)$
小数:
$x_补=x \quad x\in[0,1)$
$x_补=2+x \quad x\in[-1,0)$
补码的-0表示的是最小数$-2^n$
两符号位补码
00正 11负
反码
负数:原码符号位不变,其余取反。补码-1
移码
n+1位的数值n位,
$x_移=2^n+x \quad x\in[-2^n,2^n)$
范围
n+1位机器码,n位数值,各数值范围
最大 | 最小 | 个数 | 最大表示(n=3) | 最小表示 | |
---|---|---|---|---|---|
原码 | $2^n-1$ | $1-2^n$ | 2^{n+1}-1 | 0 111 | 1 111 |
反码 | $2^n-1$ | $1-2^n$ | 2^{n+1}-1 | 0 111 | 1 000 |
补码 | $2^n-1$ | $-2^n$ | 2^{n+1} | 0 111 | 1 000 |
移码 | $2^n-1$ | $-2^n$ | 2^{n+1} | 1 111 | 0 000 |
原码和反码范围一致,补码和移码范围一致
相互转换
当真值为正时,原反补相同,补码符号位取反为移码
当真值为负时,原码前补1,原码符号位不变,其余取反得反码,反码+1为补码,补码符号位取反为移码
溢出问题
我们已知各码范围,当x可以表示,-x可能会溢出,如x为-128,满足n=8的机器字长存储范围,-x=128,超出了补码和移码的表示范围,会溢出
运算器
组成
- 一位全加器
- 串行进位加法器
- 并行进位加法器:当位数过多使用分组,组内并行,组间串行
- 带标志加法器
- 算术逻辑单元:通过操作实现算数逻辑运算
移位
- 逻辑移位:缺位补0
- 算数移位:正数移位补0,负数移位:原码补0,反码补1,补码左移补0,右移补1
- 循环移位
定点运算
补码加减运算
- 加法:$A_补+B_补$
- 减法:$A_补+(-B)_补$
- 符号直接参与运算,保留n位字长,结果仍为补码
溢出判断:
1.一位符号位:两同符号运算结果与原符号不同
2.两位符号位:00结果正,11结果负,01正溢,10负溢
3. 一位符号+进位:进位与符号位相同,未溢出,不同溢出。
原码加减运算
- 加法;同号相加,异号数值大减数值小,符号取数值大的
- 减法:除数取负号的原码按加法运算
乘法
- 原码一位乘
- 原码两位乘
- 补码一位乘:使用乘数补码后两位比较:00,11右移,01加x补,10加-|x|补
除法
- 恢复余数除法
- 不恢复余数除法
数据存储方式
大端存储
低地址放高位数据
小端存储
低地址放低位数据
网络存储
大端字节序
浮点运算
格式
浮点数由数符s,阶码E,尾数表示M。$N=(-1)^sMR^E$
IEEE754标准:
单精度浮点数:分别占1,8,23位,双精度1,11,52位。
阶码为移码,尾数为规格化原码表示
以32位单精度浮点数为例,8位移码范围为[0,255],其中0(-inf)和255(inf)保留,E=x移-127 (2^7-1),范围变成[-126,127]尾数移动
$N=(-1)^sMR^E$中,当尾数左移,等价于M*2.此时E-1,即阶码-1,右移 阶码+1
规格化尾数:
为了增加尾数精度,尾数默认为1.M,其中M可以利用全部的尾数位。使精度增加。但当在计算时,尾数为0.0XX时或11.1XX时需要进行左右移实现规格化尾数,满足$N=(-1)^s1.MR^E$
浮点数表示范围
浮点数范围是对称的,以754的单精度为例,我们规定当阶码为0时,N=0,阶码为255时为inf,正数范围:$[2^{-23}*2^{-126},(1-2^{-23})*2^{126}]$,负数范围相反,包括0。
运算
对阶
两个浮点数运算,不同阶让低阶通过尾数右移位达到同阶
尾数求和
两个尾数进行定点求和,求和的尾数需要规格化。
舍入
尾数求和后由于右移导致位数增多,解决:
- 0舍1入:低位最高位为1,尾数末位+1,否则不变
- 恒1:尾数末尾恒为1
- 截断:直接丢弃
溢出判断
在规格化的左归时,阶码-1后为0溢出,右归阶码+1超过最大值溢出
C语言类型转换
C语言不同类型数据运算会自动向高精度转换。
非标准浮点数格式
在一些题目中会出现尾数或阶数用补码表示。
存储系统
概述
分类
功能:主存 辅存 高速缓存
介质:磁表面 磁芯 半导体 光存储
方式:
- 随机存储器RAM:访问地址随机访问
- 直接存储器(磁盘,硬盘,CDROM光盘):使用块索引,块内顺序查找
- 顺序存储器SRAM
- 项链存储器:实现cache与内存匹配的一种存储器,通过内容指定和地址指定寻址
易失性存储器 非易失性存储器 破坏非破坏性读出
性能指标
- 存储容量:字数*字长
- 单位成本:总成本/总容量
- 存储速度:存取时间(启动一次存储器操作到完成该操作所经历的时间),存储周期(连续两次独立访问存储器操作(读或写操作)之间所需的最小时间间隔),主存带宽(每秒从主存进出信息的最大数量)
存储层次
寄存器-cache-主存-磁盘-IO磁带光盘
主存储器
SRAM
介质:六晶体管MOS
特点:存取速度快 但集成度低 功耗较大 价格昂贵 非破坏性读出
功能:用于cache
结构
- 地址线分行列两次查找确定地址,RAS低电平行选,CAS低电平列选
- 控制信号CS低电平有效
- WE低电平写操作,高电平读操作
- 对于RAM的片式结构,如64648,行列为64*64,每个存储字长即8,地址信号会读出指定位置的8个片上的相同位置信号组成一个字节。
周期
读周期
- 地址先有效
- CS低电平有效
- WE高电平
- 读出数据
写周期
- 数据先有效
- 地址有效
- CS低电平有效
- WE低电平
- 写入数据
DRAM
介质:栅极电容
特点:容易集成 位价低 容量大和功耗低 破坏性读出
功能:用于主存
刷新:由于DRAM的电容只能维持1-2ms,需要定时刷新
- 集中刷新:利用一段固定的时间全部逐行刷新,该时间为死时间,不可存取
- 分散刷新:一个工作周期中一半存取一半刷新,消除死区,增大了存取周期,降低性能
- 异步刷新:刷新最大间隔/行数得出每行刷新时间,通过电路实现刷新。
结构
- 地址线分行列确定地址
- 控制信号CS低电平有效
- WE低电平写操作,高电平读操作
周期
读周期
- WE高电平,在CAS有效前稳定,此时为读操作
- 行地址先送入,RAS有效,维持tRAS时间
- 送入列地址,CAS滞后RAS一段时间后有效,维持tCAS时间
- 最后读出数据
- RAS两次低电平间隔为tRC读周期
写周期
- WE低电平,在CAS有效前稳定,此时为写操作
- 数据总线上要写入的数据应该在CAS有效前保持稳定
- 行地址先送入,RAS有效,维持tRAS时间
- 送入列地址,CAS滞后RAS一段时间后有效,维持tCAS时间
- RAS两次低电平间隔为tWC写周期
只读存储器ROM
特点:数据不易失,结构简单
名称 | 特点 |
---|---|
MROM掩模式只读存储器 | 可靠性高,集成度高,价格便宜;缺点是灵活性差 |
PROM一次可编程只读存储器 | 允许用户利用专门的设备(编程器)写入自己的程序,一旦写入,内容就无法改变 |
EPROM可擦除可编程只读存储器 | 可以由用户利用编程器写入信息,而且可以对其内容进行多次改写,编程次数有限,且写入时间过长 |
Flash存储器 | 长期保存信息,又能在线进行快速擦除与重写,价格便宜、集 |
成度高,电可擦速度快 | |
SSD固态硬盘 | 基于闪存,读写速度快、低功耗的特性,缺点是价格较高 |
- 单体多字存储器
- 多体并行存储器:高位交叉编址 低位交叉编址
某计算机主存按字节编址,由4个64Mx8位的DRAM芯片采用交叉编址方式构成,并与宽度为32位的存储器总线相连,主存每次最多读写32位数据。若double型变量x的主存地址为04001AH,则读取x需要的存储周期数是:
3,每次读取4个字节,即该计算机读取一个数据首地址必然是4的倍数(由于存储器的硬件连线是固定的),如0-3,4-7。采用交叉编制每个存储体对应的体号正好与数据的4个字节对应。因此一次数据必须是从体0到体3,该数据从体2开始,也得从体0开始读。
存储器与CPU连接
容量扩展
位扩展
n个m位的存储芯片,位扩展为n*m宽的数据总线字扩展
通过片选信号将多个芯片连接,实现存储容量扩展,即可存储字增大,实现字扩展。n个芯片需要logn个信号。字位同时扩展
将位扩展的多个模块再字扩展
存储器片选
- 线选法
反onehot编码,每个信号一个芯片,同时只能一个信号为0,选择该芯片 - 译码片选法
对片选信号译码后选择信号
连接
- 选择存储芯片
- 地址线连接
- 数据线连接
- 控制线连接
- 片选线连接
MAR的位数应该要满足整个地址空间,而不应该按当前存储器容量设计。即当可扩展的8G内存的最大16GB存储器其若按4字存储地址空间应该为2G,MAR32位
外部存储器
磁盘
组成 原理 性能指标 RAID磁盘阵列SSD固态硬盘
闪存芯片与闪存翻译层组成
高速缓冲存储器cache
程序访问的局部性原理
时间局部性: 该地址会在近期再次访问
空间局部性: 该地址相邻部分会近期再次访问
执行流程
- 通常由SRAM构成
- 过程:cpu请求-cache命中,返回数据-未命中从主存中读取-将数据返回cpu和cache-cache直接存储或替换
- 使用命中率评价cache,命中率越高越好
- 详细过程(以408.20.44题为例): 初始cache为空 -> 查找00010003H,tag(20)+组号(6)+块内(6) -> 组号为0,cache查找0对应行0-7 -> 有效位为0,缺失,从内存找到主存块 -> 将主存块随机加载到行,有效位1,设置tag和LRU. 查找00010003H -> tag命中返回对应块内数据 -> 没有tag命中,加载主存块,通过LRU算法替换行
映射
直接映射
标记+行号+块内地址主存地址m位,即2^m块,cache地址c位,2^c行,标记t位=m-c。
其中一个块中存放多个字,需要块内地址找到对应字实际主存中对应的地址即标记+块内地址
冲突概率最高,空间利用率最低
全相联映射
标记+块内地址
直接m位让每行标记所有块
冲突概率低,空间利用率高,命中率也高,标记速度慢,成本高
组相联映射
标记+组号+块内地址
将cache分q组,则原来标记t变为t-q,每个组之间直接映射,组内全相联映射。
先找到组号,再比较所有标记,命中则块内查找。
实际上直接映射就是组号为行数
cache替换
除随机替换其它需要替换位
- 随机RAND
- 先进先出FIFO
- 最近最久未使用LRU
cache写
回写法需要修改位
- 全写法:同时写cache主存
- 回写法:只写cache,当被换出时写回主存
- 写分配法:写命令时cache未命中,加载到cache再写
- 非写分配法:只写主存
cache改进
数指cache分离,多级cache,缓冲队列
特殊位
- 有效位:cache对应行是否使用
- 写回法:1位脏位表示是否修改过
- LRU位:组相联时,2^n路组相联有n位
虚拟存储器
概念
将主存或辅存的地址空间统一编址,形成一个庞大的地址空间
虚拟存储器大小只与计算机本身地址空间相关
页式虚拟存储器
在虚拟存储器中,包括:
- CPU (执行过程中发出请求的逻辑地址)
- 地址寄存器(存放逻辑地址,使用虚拟存储器的计算机,逻辑地址空间可以超过实际内存大小。例如逻辑地址寄存器32位,地址空间大小2^32=4G,而实际地址空间可以小于该空间)
- TLB 本身为cache,使用虚拟存储器总共需要访问两次内存:先访问内存中的页表,找到对应逻辑地址的物理地址(虚页号转页框号),为了提升速度,引入TLB,TLB中项包括:逻辑页号、有效位、物理页号(页框),查找时先查找TLB,TLB命中直接找到物理地址,减少一次查找页表时间。未命中时再查找页表
- 多级页表 页表本身存放在内存中,系统会指定一页大小,例如4KB,页表项包括:逻辑页号,物理页号,修改位(脏位)、有效位、访问位(换页时考虑),其中逻辑页号是逻辑地址位数-页内地址位数,物理页号是受物理地址位数限制的,为实际物理地址位数-页内地址位数。若指定页表项大小,可以确定一个页表多少页表项。在多级页表中第一级页表为页目录,每个页表项即为一个页表。可以理解为一个逻辑地址的逻辑页号从高位开始被每个页表确定k位,最终确定物理页号。
- 多级cache cache可分为数据部分和标记部分。数据部分受一块数据大小和行数确定,而标记部分不同映射方式有所不同。一般标记部分包括:标记+有效+脏位+算法位。标记位数由不同映射计算出。最终cache大小是两个部分总大小。cache在计算机内有多级,例如ALU、core、内存多级cache
- 内存 当cache未命中时会访问内存对应块,并将cache对应行换出,如果是写回法且脏位1将换出的写回内存。
- 磁盘 当内存无法加载全部数据时会仅加载部分数据到内存,该部分主要由操作系统实现。
段式虚拟存储器
操作系统使用段式存储管理,并与页式类似的查找流程
段页式虚拟存储器
程序分段,不同段分页
虚拟存储器与Cache比较
- 相同之处
- 最终目标都是为了提高系统性能,两者都有容量、速度、价格的梯度。
- 都把数据划分为小信息块,并作为基本的传递单位,虚存系统的信息块更大。
- 都有地址的映射、替换算法、更新策略等问题。
- 依据程序的局部性原理应用“快速缓存的思想”,将活跃的数据放在相对高速的部件中。
- 不同之处
- Cache主要解决系统速度,而虚拟存储器却是为了解决主存容量。
- Cache全由硬件实现,是硬件存储器,对所有程序员透明;而虚拟存储器由OS和硬件共同实现,是逻辑上的存储器,对系统程序员不透明,但对应用程序员透明。
- 对于不命中性能影响,因为CPU的速度约为Cache的10倍,主存的速度为硬盘的100倍以上,因此虚拟存储器系统不命中时对系统性能影响更大。
- CPU与Cache和主存都建立了直接访问的通路,而辅存与CPU没有直接通路。也就是说在Cache不命中时主存能和CPU直接通信,同时将数据调入Cache;而虚拟存储器系统不命中时,只能先由硬盘调入主存,而不能直接和CPU通信
本章存储器主要包括 存储器的结构,工作原理,内存管理
重点在于考察完整的存储器运行过程掌握。对操作系统的虚拟存储器+硬件的cache内存映射管理出题。
要能够依据地址空间与映射方式和cache大小分析出CPU发出地址的组成。
CPU发出逻辑地址交付操作系统,在虚拟存储器中一般通过页虚拟存储器计算物理地址,再发给存储器,存储器去查找cache或内存。
指令系统
概念
指令集体系结构(ISA)
ISA指定:指令格式 数据类型及格式 操作数的存放方式 程序可访问的寄存器个数 位数和编号 存储空间的大小和编址方式 寻址方式 指令执行过程的控制方式
格式
- 零地址指令
- 一地址指令
- 二地址指令
- 三地址指令
- 四地址指令
操作码
- 定长操作码
- 扩展操作码
指令类型
- 数据传送
- 算数逻辑运算
- 移位
- 转移
- 输入输出
寻址方式
指令寻址
顺序寻址:由PC+1得到下一指令地址
跳跃寻址:由跳跃指令给出下一指令地址,跳跃本质仍是修改PC从PC转入下一指令
数据寻址
数据寻址方式较多
A表示寄存器,(A)表示A中的内容
EA表示真是地址
若指令为:OP+#+A形式地址
隐含寻址:简化地址格式
使用累加器ACC中存放的码作为操作数地址
EA=(ACC)优点是有利于缩短指令字长;缺点是需增加存储操作数或隐含地址的硬件
立即寻址:快速
指令的地址字段A为操作数
优点是指令在执行阶段不访问主存,指令执行时间最短;缺点是A的位数限制了立即数的范围
直接寻址:简单
EA=A指令中地址字段A即对应数据的地址
优点是简单,缺点是A的位数决定了该指令操作数的寻址范围,操作数的地址不易修改间接寻址:扩大寻址范围
EA=(A),即A中存放的是存放操作数地址的地址,当然也可以使用多次间址,即EA=((A))优点是可扩大寻址范围,缺点是指令在执行阶段要多次访存
寄存器寻址:减少地址位数
EA=Ri,指令中给出的是操作数所在的寄存器编号
优点是指令在执行阶段不访问主存,执行速度快,指令短。缺点为价格贵,数量有限
寄存器间接寻址:扩大寻址范围
EA=(Ri),寄存器存放操作数地址
与一般间接寻址相比速度更快,但需要访问主存
相对寻址:程序内地址重定向方便,适应多道程序设计
EA=(PC)+A 操作数地址为指令当前地址的偏移A
优点是操作数的地址不是固定的,且与指令地址总是相差一个固定值,相对寻址广泛应用于转移指令
408.19.45题,相对寻址的偏移量计算:目的地址是PC+偏移量,则偏移量=目的地址-PC,PC是当前指令的末尾和下一个指令的起始地址,因为PC是指向下一地址的
基址寻址:实现固定范围内寻址
EA = (BR)+A,将PC换为BR基址寄存器,基址寄存器既可采用专用寄存器,又可采用通用寄存器
可以增加标识位选择通用寄存器
优点是可扩大寻址范围,因此有利于多道程序设计,并可用于编制浮动程序,但偏移量的位数较短
变址寻址:数组访问
EA = (IX)+A
由用户控制变址寄存器值,A作为相对地址
优点是可扩大寻址范围,修改寄存器特别适合编制循环程序,IX的位数足以表示整个存储空间,主要用于处理数组问题。
堆栈寻址:隐含地址
将一块区域设置栈结构管理,使用寄存器为硬堆栈,内存为软堆栈
操作数地址使用堆栈指针进行确定
堆栈寄存器空时指针指向高地址,堆栈指针先入再-1,先+1再出
机器码
汇编
通用寄存器
汇编指令最核心的就是CPU中寄存器的管理,每个寄存器32位(4B),其中部分寄存器可以分为两个16位寄存器,其中16位可以分为两个8位.
寄存器 | 名称 | 大小 | 功能 |
EAX(可分多个) | 累加寄存器 | 4B | 存放计算和中间数据 |
AX | EAX的低16位 | 2B | 16位寄存器 |
AH | AX高8位 | 1B | 8位寄存器 |
AL | AX低8位 | 1B | 8位寄存器 |
EBX(可分多个) | 基址寄存器 | 4B | 存放指令寻址的基地址 |
ECX(可分多个) | 计数寄存器 | 4B | 存放下一指令地址位置(当前指令地址+当前指令大小) |
EDX(可分多个) | 数据寄存器 | 4B | 存放数据 |
ESI | 变址寄存器 | 4B | |
EDI | 变址寄存器 | 4B | |
EBP | 堆栈基指针 | 4B | 堆栈栈底 |
ESP | 堆栈顶指针 | 4B | 堆栈栈顶 |
汇编格式
AT&T和intel两种汇编格式
格式 | 方向 | 标志 | 示例 | 含义 |
AT&T | -> | 标志为寄存器前面带%,寄存器内容使用() | mov %eax, -8(%ebp) | R[eax]->M[R[ebp]-8] |
intel | <- | 寄存器内容使用[] | mov eax,[ebp-8] | R[eax]->M[R[ebp]-8] |
汇编指令
- 数据传送
mov 数据移动/ / (不能在 之间使用)
push 入堆栈/ /
pop 出栈/ / - 算数逻辑运算
add sub加减
inc dec自增减
imul idiv符号乘除
not and or xor逻辑运算
neg取负
shl shr逻辑移位 - 控制流指令
jmp 转移
jcondition条件转移:如jg jl je jne jge jle jz
cmp 比较
test 按位比较
call ret 函数调用返回
jmp call ret都是无条件转移指令
程序的汇编执行流程
机器语言
调用
选择
循环
CISC RISC
CISC:Complex instruction set computer复杂指令系统计算机
RISC: Reduced instruction set computercomputer精简指令系统计算机
比较 | CISC | RISC |
---|---|---|
系统 | 复杂,庞大 | 简单,精简 |
指令数目 | 一般大于200条 | 一般小于100条 |
指令字长 | 不固定 | 固定 |
可访存指令 | 不加限制 | 只有Load/Store指令 |
各种指令执行时间 | 相差较大 | 绝大多数在一个周期内完成 |
指令使用频度 | 相差很大 | 都比较常用 |
通用寄存器数量 | 较少 | 多 |
目标代码 | 难以优化 | 优化高效 |
控制方式 | 大多数微程序控制 | 大多数组合逻辑控制 |
指令流水线 | 可以通过一定方式实现 | 必然实现 |
中央处理器
功能 结构
结构
运算器:完成对数据的加工
- ALU算数逻辑单元:算数逻辑运算
- 暂存寄存器:暂存主存中的数据
- 累加寄存器:暂存ALU结果
- 通用寄存器组:存放各种信息
- PSW程序状态字寄存器:包括 OF溢出 SF符号 ZF0 CF进位
- 移位器:对数据移位
- 计数器:控制运算步数
控制器:控制各部件执行指令序列
- IR指令寄存器:存放当前执行指令
- 指令译码器:对指令的操作数部分译码
- PC程序计数器:存放下一条指令地址,会自增(每次取指令会使PC+1)
- MAR存储器地址寄存器:存放访问主存单元地址
- MDR存储器数据寄存器:存放访问主存单元数据
- 时序系统:产生时序信号
- 微操信号发生器:产生控制信号
透明寄存器:对用户透明
IR MAR MDR
功能
- 指令控制
- 操作控制
- 时间控制
- 数据加工
- 中断处理
指令执行
指令周期
T周期
CPU 完成一个操作的最小周期
机器周期(CPU周期)
CPU完成一个完整操作步骤的时间,如取指,执行
在处理器中,控制器获取指令,执行对应指令的微程序,微程序由多个微命令序列组成,每个微命令对应微操作即时钟周期,完成由多个微操作组成的一个完整操作的时间为机器周期,整个指令执行完成为指令周期。
指令周期
CPU完成该指令所需的机器周期数
关系
T周期组成机器周期,机器周期组成指令周期
组成
- 取值周期:FE fetch
- 间址周期:IND Interval period
- 执行周期:EX execute
- 中断周期:INT interrupt
数据流
取值周期
发出地址,读命令,返回地址到MDR
间址周期
将拿到的数据再作为地址发出,读命令,返回地址到MDR
执行周期
发出地址数据,读命令,返回地址到MDR,放入寄存器中
中断周期
CU控制单元堆栈指针cp-1,从指令中取出地址,将程序断点写入,
并修改PC为中断程序入口地址
指令执行
- 单指令周期
所有指令使用相同时间 - 多指令周期
不同指令分配不同时钟周期 - 指令流水线
保证在每个时钟周期执行一条指令
CPU依据指令周期的不同阶段判断是指令还是数据
数据通路
为各部件传输数据的线路,每个部件有in out两个信号表示数据出入
结构
CPU内部单总线
所有寄存器直接连接
CPU内部多总线
寄存器连接到多个总线,允许同时传输多个数据专用数据通路
传输
- 寄存器之间
PC传入MAR - 主存与CPU之间
- 算数逻辑运算
单总线条件下一个指令周期只能传输一个数据,对于需要多个输入数据的单元需要使用寄存器实现数据分周期输入输出。
控制器
结构
- 部件包括:运算器 控制器 输入输出内存 数据地址控制总线
- 连接:控制器通过控制总线控制设备,各设备通过数据总线实现数据传输
功能
- 取指并指出下一指令地址
- 指令译码产生控制信号
- 控制各部件
硬布线控制器 (组合逻辑控制器)
通过逻辑电路直接输入指令、时钟信号、标志所有的信号,输出每个设备的控制信号
简化设计,将操作码译码和节拍发生器从CU分离
CU输入:
- 指令译码产生的指令信号
- 时序系统产生的机器周期信号和节拍信号
- 执行单元的反馈信息(标志信号)
微操作
设备执行一次操作,一个机器周期可以执行多个微操作。如取值周期需要用多个微操作完成微操作命令
1.取指
2.间址
3.执行
* 非访存
* 访存
* 转移CPU控制方式
- 同步:统一时钟控制信号,控制电路简单,缺点是运行速度慢
- 异步:应答机制
- 联合:大部分采用同步控制、小部分采用异步控制
设计
- 列出微操作命令操作时间表
- 进行微操作信号综合
- 画出微操作命令的逻辑图
微程序控制器
概念
每个指令对应多个微操作组成一个微程序,使用控制存储器存放微程序,通过指令的操作码确定微程序
指令 微程序 微指令 微命令 微操作:指令对应一个微程序,一个微程序由多个微指令有序组成,一般一条微指令一个时钟周期,微指令由多个微命令组成,每个微命令对应一种微操作,每个命令之间存在同步互斥关系,如读写命令互斥,不能同时执行。
微程序是一个逻辑概念,微指令通过给出下一指令地址实现一个链式指令集就是一个微程序
控制存储器用ROM实现
组成
- 控制存储器:存放各指令对应的微程序
- 微指令寄存器CMDR(μIR):存放从CM中取出的微指令
- 微地址形成部件:产生初始微地址和后继微地址
- 微地址寄存器CMAR:接收微地址形成部件送来的微地址
执行
- 执行取微指令公共操作
- 获得指令微地址并取指顺序执行
- 执行完成后再次执行取指微程序
微指令编码
直接编码:每个微命令对应1位
简单、直观,执行速度快,操作并行性好,微指令字长过长
字段直接编码方式
互斥性微命令组合在同一字段,相容性微命令组合在不同字段,每个字段独立编码译码
段还要留出一个状态 ,表示本字段不发出任何微命令
字段间接编码方式
某些微命令需由另一个字段中的某些微命令来解释
微招令地址形成方式
- 断定方式:微指令的下地址字段指出
- 由操作码经过微地址形成部件形成
- 增量计数器
- 标志决定转移
- 测试网络
- 硬件产生
微招令格式
水平型微指令
操作码直接为每个部件的控制信号微程序短,执行速度快;缺点是微指令长,编写微程序较麻烦
垂直型微指令
对微指令操作编码,一种编码对应一种操作,导致完成指令需求的操作数增加,使微程序过长
微指令短、简单、规整,便于编写微程序;缺点是微程序长,执行速度慢,工作效率低。混合型微指令
在垂直型的基础上增加一些不太复杂的并行操作
微程序控制单元
编写各条机器指令所对应的微程序
- 写出对应机器指令的微操作命令及节拍安排
- 确定微指令格式
- 编写微指令码点
动态微程序设计和毫微程序设计
- 动态微程序设计
微程序可更改,使用EPROM作为控制存储器 - 毫微程序设计
硬件不通过微程序执行,使用毫微程序直接控制硬件
比较 | 微程序 | 硬布线 |
---|---|---|
原理 | 微程序 | 组合逻辑 |
速度 | 慢 | 快 |
规整性 | 规整 | 不规整 |
应用 | CISC | RISC |
可扩充 | 可扩充修改 | 不可扩充修改 |
时许控制 | 简单 | 复杂,硬件需要根据时序设计 |
异常 中断
类别
异常
CPU内部产生
- Fault 故障 需要重新执行当前指令 结束前被检测到的异常事件 如除0 缺页
- trap 陷入 不需要重新执行当前指令 事先设置的 系统调用 程序调试通过trap实现
- abort 终止 硬件故障导致无法执行
中断
CPU外部产生的信号
- 可屏蔽中断 通过可屏蔽中断请求线INTR请求的中断 如IO请求
- 不可屏蔽中断 通过不可屏蔽中断请求线NMI请求中断 如硬件故障
响应
关中断
设置中断允许IF为0,表示关中断,中断过程不能被中断
保存断点和程序状态
将程序断点送到栈或特定寄存器中(目的是支持异常或中断的嵌套)
保存被中断的程序状态字寄存器内容PSWR,恢复时会加载
识别异常和中断并转到相应的处理程序
软件识别:在CPU设置异常状态寄存器,使用统一的异常或中断查询程序,按优先级顺序查询异常状态寄存器,检测类型,先查询先响应,转到内核中相应的处理程序
硬件识别(向量中断):中断向量为中断处理程序首地址,将所有中断向量存放在中断向量表中,且每种对应一个中断类型号,在表中类型号和中断向量一一对应,通过类型号快速查找中断处理程序
异常是在指令执行过程中检测,中断是指令执行结束检测
异常发生处理后返回当前指令执行,而中断处理后转下一个指令执行
缺页属于内中断,即异常(故障)
指令流水线
提供处理机运行速度
时间并行:指令流水线
空间并行:超标量处理机
概念
指令流水段个数以最复杂指令所用的功能段个数为准;流水段的长度以最复杂的操作所花的时间为准
特征:
- 指令长度接近
- 格式规整
- Load/Store访存
- 对齐存放
仅提升浮点运算密集型应用的性能,对于单个运算是无法提升性能的
实现
流水线的数据通路
一个5段流水线数据通路如下图所示。其中,IF段包括程序计数器(PC)、指令存储器、 下条指令地址的计算逻辑;ID段包括操作控制器、取操作数逻辑、立即数符号扩展模块;EX段主要包括算术逻辑单元(ALU)、分支地址计算模块;MEM段主要包括数据存储器读写模块; WB段主要包括寄存器写入控制模块。每个流水段后面都需要增加一个流水寄存器,用于锁存本段处理完成的数据和控制信号,以保证本段的执行结果能在下个时钟周期给下一流水段使用,图中增加了4个流水寄存器,并根据其所连接的功能段来命名。各种寄存器和数据存储器均采用统一时钟CLK,每来一个时钟,就会有一条新的指令进入流水线IF段;同时流水寄存器会锁存前段加工处理完成的数据和控制信号,为下一段的功能部件提供数据输入。
控制信号
每个流水寄存器需要保存 后面需要使用到的信息以及信号
执行过程
- 取指IF
- 译码ID
- 执行EX
- 访存MEM
- 写回WB
冒险问题 冲突问题
结构冒险 资源冲突
多条指令在同一时刻争用同一资源,解决:
- 后续指令暂停一个周期
- 单独设置数据存储器和指令存储器
数据冒险 数据冲突
RAW:读在写后面
WAR:写在读后面
WAW:写在写后面
解决:
- 数据相关的指令及其后续指令都暂停一至几个时钟周期,包括硬件阻塞(stall)和软件插入“NOP”
- 数据旁路技术 设置相关专用通路,读寄存器操作变为直接读ALU结果
- 编译器优化指令
控制冒险 控制冲突
指令执行顺序被改变会造成断流
解决:
- 分支预测,静态和动态
- 预取转移成功和不成功两个控制流方向上的目标指令
- 加快和提前形成条件码
- 提高转移方向的猜准率
性能指标
吞吐率
TP=n/Tk 完成任务数/所需的总时间
最大1/Δt Δt为时钟周期
加速比
S=T0/Tk 不使用流水线的总时间/使用流水线的总时间
Smax=k k为流水线段数
其它技术
- 超标量流水线技术
- 超长指令字技术(静态多发射技术):将多条能并行操作的指令组合成一条具有多个操作码字段的超长指令字
- 超流水线技术:流水线功能段划分得越多,时钟周期就越短,指令吞吐率也就越高
多处理器
并行结构
SISD 单指令流单数据流结构
串行计算机,指令流规定的顺序串行执行指令流中的若干条指令
SIMD 单指令流单数据流结构
数据级并行技术,每个处理单元虽然执行的都是同一条指令,但是每个单元都有自己的地址寄存器,从而能实现数据处理并行
MISD 多指令流单数据流结构
不存在
MIMD 多指令流多数据流结构
多计算机系统(消息传递MIMD):各存储器不能直接指令访存,需通过消息传递进行数据传送
多处理器系统(共享存储多处理器SMP):共享地址空间线程级并行
硬件多线程
为每个线程提供单独的通用寄存器组、单独的程序计数器。
切换线程只需切换寄存器,减少了线程切换的开销。
细粒度多线程
各线程轮换发射指令,能够在不同时钟周期发射不同线程的指令
粗粒度多线程
当线程阻塞时切换线程发射指令,切换阻塞,需要清空当前指令流水,开销较大
同时多线程SMT
同一个时钟周期中,发射多个不同线程中的多条指令执行
超线程HT
利用多组寄存器实现并行计算
多核处理器
一个CPU中存放多个对称的处理单元,可以共享或不共享cache。每个处理单元同时执行一个线程。
共享内存多处理器
共享的单一物理地址空间的多处理器
类别:
统一存储访问多处理器UMA
根据处理器与共享存储器之间的连接方式,分为基于总线、基于交叉开关网络和基于多级交换网络连接等几种处理器
非统一存储访问多处理器NUMA
NC-NUMA 不带一致性高速缓存
CC-NUMA 带一致性高速缓存
统一存储访问结构会导致总线占用的竞争,而NUMA让每个CPU都有与内存直连的部分,通过QPI访问其它部分,因此产生了本地和远程的内存区别
总线
概念
基础概念
总线是一组能为多个部件分时共享的公共信息传送线路
特点:分时(同一时刻只允许有一个部件向总线发送信息),共享(总线上可以挂接多个部件,多个部件可以共享信息)
总线特性
机械(尺寸 形状) 电气(方向 电平范围) 功能 时间(信号 时序)
分类
- 片内总线
- 系统总线:数据 地址 控制
- IO总线
- 通信总线
结构
单总线
结构简单,成本低,易于接入新的设备
带宽低、负载重,多个部件只能争用唯一的总线,且不支持并发传送操作
双总线
将低速I/O设备从单总线上分离出来,实现了存储器总线和I/O总线分离
需要增加通道等硬件设备
三总线
提高了 I/O设备的性能,使其更快地响应命令,提高系统吞吐量
系统工作效率较低
标准
- ISA
- EISA
- VESA
- PCI
- AGP
- RS-232C
- USB
- PCMCIA
- IDE
- SCSI
- SATA
性能指标
- 总线传输周期
- 总线时钟周期 即机器的时钟周期
- 总线工作频率 1/总线时钟周期
- 总线宽度 总线上同时能够传输的数据位数如32
- 总线带宽 总线的最大数据传输率如1MB/s
- 总线复用 总线不同时间传输不同信号
- 信号线数 地址总线、数据总线和控制总线3种总线数的总和
总线事务和定时
总线定时:双方交换数据的过程中需要时间上配合关系的控制
总线事务
- 请求
- 仲裁
- 寻址
- 传输
- 释放
突发传送方式:寻址时发送连续数据单元首地址,传输时传输连续数据,当释放时只有传输完毕后才释放
定时规则
同步定时
速度快 逻辑简单
可靠性低,强制同步 只适应速度接近总线短的部件
异步定时
通过握手信号同步
- 不互锁:主设备请求,从设备应答,两设备隔一段时间后撤销信号
- 半互锁:主设备在从设备应答后才取消请求信号 从设备隔一段时间后撤销信号
- 全互锁:在半互锁基础上,从设备只有当接收到主设备请求撤销后再撤销
握手信号属于控制信号
USB为设备和设备控制器的接口标准
分离事务通信方式可提高总线利用率
并行总线传输不一定比串行总线传输速度快
IO
概念
控制方式
- 查询
- 中断
- DMA
- 通道
外部设备
输入设备
键盘 鼠标
输出设备
显示器:屏幕 分辨率 灰度级 刷新 刷新率 显示存储VRAM VRAM容量带宽
打印机:击打式(针式)和非击打式( 喷墨 激光)外部存储器
磁表面存储器 SSD 光盘
接口
I/O接口(I/O控制器)是主机和外设之间的交接界面
功能
- 地址译码和设备选择
- 主机外设的通信
- 数据缓冲
- 信号格式转换
- 传送控制命令和状态信息
结构
端口:接口电路中可以进行读/写的寄存器
接口:若干端口加上相应的控制逻辑
类型
并行接口 串行接口
程序查询 DMA 通道
可编程 不可编程
编址
- 统一编址 存储器映射方式 设计简单灵活 占用内存空间 速度慢
- 独立编址 I/O映射方式 需要专门指令,设计复杂 速度快
统一编址通过地址码区分IO
独立编址通过指令区分
磁盘驱动器是磁盘本身,不是接口
中断类型号走的是数据线,IO控制线上只走读写信号
方式
程序查询方式
CPU与I/O串行工作 设计简单 效率最低
- CPU执行初始化程序,并预置传送参数
- 向I/O接口发出命令字,启动I/O设备
- 从外设接口读取其状态信息
- CPU不断查询I/O设备状态,直到外设准备就绪
- 传送一次数据
- 修改地址和计数器参数
- 判断传送是否结束,若未结束转3步,直到计数器为0
程序中断方式
中断处理扩展功能:
- CPU与I/O设备并行工作
- 处理硬件故障和软件错误
- 实现人机交互,用户实现中断
- 实现多道程序、分时操作,进程切换
- 中断系统来实现快速响应
- 实现软中断
- 多处理器中信息交流和任务切换
中断流程:
- 中断请求
- 中断响应判断
- CPU条件响应 :存在请求 开中断 指令执行完毕
- 中断响应
- 中断向量
- 中断处理:关中断-保护现场1(保存断点)-中断服务程序寻址-保存现场屏蔽字-开中断
-执行中断服务程序(保护现场2(保存通用寄存器和状态寄存器)-中断服务-恢复现场-中断返回)-关中断-恢复线程屏蔽字-开中断
中断嵌套和中断屏蔽:
中断处理优先级
中断屏蔽字:1表示屏蔽,0表示不屏蔽,若A>B,B[A]=0,B[B]=1(屏蔽自身)
通过中断屏蔽字设计中断处理优先级
DMA方式
CPU请求后DMA与CPU并行工作,结束后通过中断让CPU响应
特点
- 它使主存与CPU的固定联系脱钩,主存既可被CPU访问,又可被外设访问
- 在数据块传送时,主存地址的确定、传送数据的计数等都由硬件电路直接实现
- 主存中要开辟专用缓冲区,及时供给和接收外设的数据
- DMA传送速度快,CPU和外设并行工作,提高了系统效率
- DMA在传送开始前要通过程序进行预处理,结束后要通过中断方式进行后处理
功能
- 接受外设发出的DMA请求,并向CPU发出总线请求
- CPU响应并发出总线响应信号,DMA接管总线控制权,进入DMA操作周期
- 确定传送数据的主存单元地址及长度,并自动修改主存地址计数和传送长度计数
- 规定数据在主存和外设间的传送方向,发出读写等控制信号,执行数据传送操作
- 向CPU报告DMA操作结束
DMA控制器结构
- 主存地址计数器
- 传送长度计数器
- 数据缓冲寄存器
- DMA请求触发器
- “控制/状态”逻辑
- 中断机构
访存问题
DMA与CPU并行时会存在访存冲突问题,通过以下方式解决
- 停止CPU访存:DMA请求时CPU停止访问主存,当结束后可访问
- 周期挪用(窃取):I/O访存优先级高于CPU访存,DMA访存时CPU占用-等CPU存取周期结束后解除占用,DMA和CPU同时请求-DMA优先级高先占用,等结束后CPU再占用
- 交替访存:CPU工作时间长于IO时,将CPU周期分开,专门用于CPU和DMA访存
传送过程
- 预处理
- 数据传送
- 后处理