计算机组成原理--王道超详细版
2024-07-26 15:54:07 3 举报
AI智能生成
王道考研计算机组成原理思维导图
作者其他创作
大纲/内容
6.计算机系统层次结构
3.计算机发展历程
4.软硬件发展
5.计算机分类与发展方向
1.计算机系统概述
计算机发展历程
什么是计算机系统
计算机系统=硬件+软件
硬件
软件
系统软件
用来管理整个计算机系统
应用软件
按任务需要编制成的各种程序
硬件的发展
ENIAC(1946)--第一台电子数字计算机
第一代:电子管时代
第二代:晶体管时代
第三代:中小规模集成电路时代
第四代:大规模、超大规模集成电路时代
摩尔定律
微处理器的发展
软件的发展
应用软件发展
操作系统软件发展
目前的发展趋势
微型计算机向更微型、网络化、高性能、多用途方向发展
巨型机向更巨型、超高速、并行处理、智能化方向发展
计算机硬件的基本组成
五大部分
输入设备
将信息转换成计算机能识别的形式
输出设备
将结果转换成人们熟悉的形式
主存储器
存放数据和程序
运算器
算术运算、逻辑运算
主机
控制器
指挥各部件,使程序运行
早期冯诺依曼机的结构
首次提出“存储程序”概念
以运算器为中心
冯诺依曼机结构示意
现代计算机的结构
以存储器为中心
现代计算机的结构示意
CPU=运算器+控制器
各硬件部分
主存
存储体
概念:存储元、存储单元、存储字、存储字长、地址
MAR
地址寄存器,用于指明要读/写哪个存储单元。其位数反应存储单元数量
主存储器的基本组成
MDR
数据寄存器,用于暂存要读/写的数据。其位数=存储字长
运算器
ACC
累加计数器、存放操作数、运算的结果
MQ
乘商寄存器,进行乘、除法时用得到
运算器的基本组成
X
通用寄存器,存放操作数
ALU
算数逻辑单元,用电路实现各种算数运算、逻辑运算
控制器
PC
程序计数器,存放吓一跳指令的地址
IR
指令寄存器,存放当前执行的指令
控制器的基本组成
CU
控制单元,分析指令,给出控制信号
工作过程
int a=2, b=3, c=1, y=0
void main(){
y = a*b+c
}
void main(){
y = a*b+c
}
初始:指令、数据存入主存,PC指向第一条指令
计算机的工作流程
从主存取指令放入IR、PC自动加1、CU分析指令、CU指挥其他部件执行指令
计算机系统的多级层次结构
五层
M4:高级语言程序(执行高级语言)
M3:汇编语言机器(执行汇编语言)
M2:操作系统机器(向上提供广义指令)
层次结构
M1:传统机器(执行机器语言指令)
M0:微程序机器(执行微指令)
三个级别的语言
高级语言、汇编语言、机器语言
编译程序--将高级语言一次全部翻译为汇编语言,或直接翻译为机器语言
汇编程序--将汇编语言翻译成机器语言
解释程序--高级语言翻译为机器语言(翻译一句执行一句)
计算机体系结构vs计算机组成原理
计算机体系结构
计算机组成原理
计算机性能指标
存储器的容量
MAR的位数反应存储单位数量(最多支持多少个)
MDR位数=存储字长=每个存储单元大小
CPU
时钟周期
CPU中最小的时间单位,每个动作至少要一个时钟周期
主频(时钟频率)
=1/时钟周期,单位:Hz
CPI
执行一条指令所需的时钟周期数
CPU执行时间
运行一个程序所花费的时间
=整个程序需要的CPU时钟周期数/主频=(指令条数*CPI)/主频
IPS
每秒执行多少条指令=主频/平均CPI
FLOPS
每秒执行多少次浮点运算
其他
数据通路宽度、吞吐量、响应时间、基准程序
常用数量单位
描述存储容量、文件大小时:K=2^10,M=2^20,G=2^30,T=2^40
描述频率、速率时:K=10^3,M=10^6,G=10^9,T=10^12
2.数据的表述和运算
进位计数制
r进制数
基数=r,每个数码位可能出现r种字符,逢r进1
字符组成
表示形式
r进制数--->十进制数
例子
r进制数的数值=各数码位与位权的乘积之和
二进制的位权
二进制<-->八进制
每3个二进制位为一组,每组转换为对应的八进制符号,转换回来则每位8进制对应3位二进制
例子
二进制<-->十六进制
每4个二进制位为一组,每组转换为对应的十六进制符号,转换回来则每位16进制对应4位二进制
例子
十进制-->r进制
整数部分原理
整数部分:除积取余法,先取得的“余”是整数的低位
例子
小数部分原理
小数部分:乘基取整法,先取得的“整”是小数的高位
例子
真值和机器数
真值:实际的带正负号的数值(人类习惯的样子)
图示
机器数:把正负号数字化的数(存到机器里的样子)
BCD码
8421码
每4个二进制位对应一个十进制位(有6个冗余状态)
8、4、2、1分别对应每一位的权值
0000~1001 分别对应0~9,进行加法后若超出该范围(1010~10010
--不在映射表中的数10~18[9+9]),则需+0110进行修正(强制向高位进1)
--不在映射表中的数10~18[9+9]),则需+0110进行修正(强制向高位进1)
例子:
余3码
8421码 +(0011)
2421码
2、4、2、1分别对应每一位的权值
表示0~4时最高位为0,表示5~9时最高位为1
无符号整数表示和运算
无符号整数在计算机中的应用
在计算机硬件内的表示方式
计算机硬件能支持的无符号整数位数有上限
例:机器字长8位
无符号整数的表示
加法、减法运算的实现原理
无符号整数的加法运算
无符号整数的减法运算
图示
定点数
定点整数
图示(符号位后面用,(逗号)隔开)
带符号整数的表示和运算
带符号整数在计算机中的应用
在计算机硬件内的表示方式
原码
表示
缺点
原码->反码->补码的转换(机算)
原码、补码 快速转换技巧(手算)
补码->移码
注意!真值0只有一种表示形式
计算机内部,所有带符号整数的加、减法都要先转化为补码
加法、减法运算的实现原理
原码
加法
同号加法
数值部分=被加数、加数的绝对值进行相加
符号位不变
异号加法
数值部分=被加数、加数中,绝对值更大的减绝对值更小的
符号位与绝对值更大的数相同
减法将减数取负,转变为加法
补码
补码的加法运算
注意:补码的数值位不能解读为“位权”
补码的减法运算
转换为加法运算
手算:从右往左找到第一个1,这个1左边的所有位(包括符号位)按位取反
计算机硬件的实现
“减数”全部按位取反、末位+1 得到其负数的补码
溢出判断(补码)
Key:正+正=负(上溢);负+负=正(下溢)
例:机器字长为3位(1位符号位):011(3)+011(3)=110(-2)
不考虑溢出的情况下,相当与从3的位置向右(加法)移动了3格,其余
情况同理
不考虑溢出的情况下,相当与从3的位置向右(加法)移动了3格,其余
情况同理
方法一:采用一位符号位,设A的符号为,B的符号为,
运算结果的符号为,则溢出逻辑表达式为:
V=
若V=0,表示无溢出;
若V=1,表示有溢出。(负+负=正;正+正=负两种条件成立)
运算结果的符号为,则溢出逻辑表达式为:
V=
若V=0,表示无溢出;
若V=1,表示有溢出。(负+负=正;正+正=负两种条件成立)
方法二:采用一位符号位,根据数据位进位情况判断溢出
符号位的进位 最高数值位的进位
上溢:=0 =1 下溢:=1 =0
V= ,若V=0,无溢出;V=1,有溢出
符号位的进位 最高数值位的进位
上溢:=0 =1 下溢:=1 =0
V= ,若V=0,无溢出;V=1,有溢出
方法三:采用双符号位,正数符号为00,负数符号为11
加法运算后若双符号位=01则发生上溢;若双符号位=10则发生下溢
若两个符号位相同则未发生溢出
记两个符号位为,则V=
若V=0,无溢出;V=1,有溢出
加法运算后若双符号位=01则发生上溢;若双符号位=10则发生下溢
若两个符号位相同则未发生溢出
记两个符号位为,则V=
若V=0,无溢出;V=1,有溢出
定点整数的编码表示
原/反/补/移码-特性对比
原码和反码的合法表示范围完全相同,都有两种方法表示真值0
补码的合法表示范围比原码多一个负数,只有一种方法表示真值0
移码的合法表示范围比原码多一个负数,只有一种方法表示真值0
补码的合法表示范围比原码多一个负数,只有一种方法表示真值0
移码的合法表示范围比原码多一个负数,只有一种方法表示真值0
几种码表示整数
补码和移码的作用
补码采用加法代替减法
原理
例子
移码方便对比整数的大小
定点小数
图示(符号位后面用.(小数点)隔开)
定点小数原/反/补码的转换
和定点整数一模一样
定点小数的加/减运算
计算机硬件的加法实现
计算机硬件的减法实现
符号扩展
定点整数的符号扩展:在元符号位和数值位中间添加新
位,正数都添0;负数原码添0,负数反、补码添1
位,正数都添0;负数原码添0,负数反、补码添1
整数:8位-》16位
定点小数的符号扩展:在原符号位和数值位后面添加
新位,正数都添0;负数原、补码添0,负数反码添1
新位,正数都添0;负数原、补码添0,负数反码添1
小数数:8位-》16位
定点小数vs定点整数
表示范围
位数扩展
移位运算
算数移位
左移1位相当于×基数;右移1位相当于÷基数
原码
符号位不参与移位。仅对数值位进行移位;
右移:高位补0,低位舍弃。若舍弃的位=0,则相当于÷2;
若舍弃的位≠0,则会精度丢失
若舍弃的位≠0,则会精度丢失
左移:低位补0,高位舍弃。若舍弃的位=0,则相当于×2;
若舍弃的位≠0,则会出现严重误差
若舍弃的位≠0,则会出现严重误差
反码
正数
右移:高位补0,低位舍弃
左移:低位补0,高位舍弃
负数
符号位不参与移位。
右移:高位补1,低位舍弃
左移:低位补1,高位舍弃
补码
正数
右移:高位补0,低位舍弃
左移:低位补0,高位舍弃
负数
负数补码最右边的1及其右边与原码相同,
最右边的1的左边与反码相同
最右边的1的左边与反码相同
符号位不参与移位。
右移(同反码):高位补1,低位舍弃
左移(同原码):低位补0,高位舍弃
逻辑移位
逻辑右移:高位补0,低位舍弃
逻辑左移:低位补0,高位舍弃
循环移位
不带进位位
用移出的位补上空缺
带进位位
移出的位放到进位位,原进位位补上空缺
乘法运算
实现思想
乘法采用运算器实现,结构如图
原码
例:设机器字长为n+1=5位(1位符号位),=1.1101,
=0.1011,采用原码一位乘法求x×y
=0.1011,采用原码一位乘法求x×y
机器运算步骤
符号单独处理:符号位=
数值位取绝对值进行乘法运算
数值位取绝对值进行乘法运算
运算之前,ACC置0,
当前参与乘法的位为
MQ的最低位(灰色部分)
当前参与乘法的位为
MQ的最低位(灰色部分)
当前位=1,则ACC加上被乘数
当前位=0,则ACC加上0
(ACC)+(X)-> ACC
当前位=0,则ACC加上0
(ACC)+(X)-> ACC
将ACC和MQ中的数统一逻辑右移,
高位补0。ACC的低位移到MQ,
MQ的最低位用不到了,直接丢弃
高位补0。ACC的低位移到MQ,
MQ的最低位用不到了,直接丢弃
次低位变为1,继续将ACC加上
被乘数(ACC)+(X)-> ACC
然后再统一右移,重复3、4操作
最后乘数的符号位不用参与运算
小数点则隐含在符号位后面
被乘数(ACC)+(X)-> ACC
然后再统一右移,重复3、4操作
最后乘数的符号位不用参与运算
小数点则隐含在符号位后面
最后修改符号位=1
手算模拟
不是很重要
补码
与原码的对比
原码的最终符号位,用单独的异或运算确定,补码的最终符号位,通过加法和
移位,自然而然的会确定
移位,自然而然的会确定
机器硬件(更丰富)
MQ中的最低位指定的是灰色的部分(并不是真正的最低位)
被乘数采用双符号位补码,MQ是单符号位(有辅助位)
被乘数采用双符号位补码,MQ是单符号位(有辅助位)
运算步骤
例:设机器字长为n+1=5位(1位符号位),x=-0.1101,
y=+0.1011,采用Booth算法求x×y =11.0011,
=00.1101,=0.1011
y=+0.1011,采用Booth算法求x×y =11.0011,
=00.1101,=0.1011
手算模拟
指的是辅助位,是MQ的最低位,依次往前推
除法运算
实现思想
原码
恢复除余法
加减交替法(不恢复除余法)
补码
加减交替法
C语言类型转换
分别为:无符号-》有符号;长整型-》短整型;短整型-》长整型
奇偶校验
校验原理
码字间的距离:将两个码字逐位进行对比,不同的位的个数
码距;一个编码方案中,合法码字间的最小距离
码距为1时,无检错能力,若码距=2,有检错能力;若码距3,可能还会有纠错能力
奇偶校验
在信息位的首部或尾部添加一个奇偶校验位
奇校验:整个校验码(信息位和校验位)中“1”的个数为奇数
偶校验:整个校验码(信息位和校验位)中“1”的个数为偶数
奇偶校验码的码距d=2,仅能检测出奇数位错误,无纠错能力
异或运算(模二加)
两个比特进行异或运算,仅当二者不同时计算结果为1
两个编码为1001101和1010111
算术逻辑单元
ALU
实现算数运算、逻辑运算、辅助功能(移位、求补等)
基本结构:输入、输出、控制
图示
电路基础知识
逻辑运算
与、或、非
与:Y = A·B(C语言--&&)
或:Y = A+B(C语言--||)
非:Y = (C语言--!)
或:Y = A+B(C语言--||)
非:Y = (C语言--!)
本质上逻辑表达式是对电路的数学化描述,
简化逻辑表达式,就是在简化电路,就是在省钱
简化逻辑表达式,就是在简化电路,就是在省钱
与非、或非、异或、同或
与非:Y=
或非:Y=
异或:Y=AB
同或:Y=AB
或非:Y=
异或:Y=AB
同或:Y=AB
反演律(德摩根律)
=+
= ·
=+
= ·
异或电路的实现
-->A=0且B=1 结果为1
-->A=1且B=0 结果为1
-->
-->A=0且B=1 结果为1
-->A=1且B=0 结果为1
-->
异或门可用与、或、非组合实现
门电路
最基本的逻辑元件,用于实现逻辑运算
从左到右分别是与门、或门和非门
从左到右分别是与非门、或非门、异或门和同或门
逻辑表达式就是电路的数学化表示。根据逻辑运算
的规则对逻辑表达式进行优化,也就是在优化电路
的规则对逻辑表达式进行优化,也就是在优化电路
用门电路求偶校验位
加法器的实现
一位全加器的设计
用门电路实现一位全加器(加法中一个位数上的加法)
串行加法器
一位全加器+进位触发器,只能一位一位地加
串行加法器
串行进位的并行加法器
多个全加器简单串联,可多位同时加
计算速度取决于进位产生和传递的速度
并行加法器
并行进位的加法器
如何更快的产生进位
实现--一般展开到,越往后展开,电路越复杂
标志位的生成
解释
OF
含义:有符号数的加减运算是否发生了溢出。
OF=1时,说明发生了溢出
OF=1时,说明发生了溢出
硬件的计算方法:OF=最高位产生的进位次高位产生的进位
注意:OF位对无符号数的加减法无意义
SF
含义:有符号数加减运算结果的正负性,SF=0表
示运算结果为正数,SF=1表示运算结果为负数
示运算结果为正数,SF=1表示运算结果为负数
硬件的计算方法:SF=最高位的本位和
注意:SF位对无符号数的加减法无意义
ZF
含义:表示运算结果是否为0。ZF=1表示运算结果为0,ZF=0表示运算结果非0
硬件的计算方法:两个数的运算结果为n bit,只有n bit全为0时,ZF=1
CF
含义:进位/借位标志,表示无符号数的加减法是否发生了进位或借位。当
CF=1时,说明无符号数的加减运算发生了进位或借位,也即发生了溢出
CF=1时,说明无符号数的加减运算发生了进位或借位,也即发生了溢出
硬件的计算方法:CF=最高位产生的进位sub(控制信号)
sub=1表示减法
sub=0表示加法
注意:CF位对有符号数的加减法无意义
补码加减运算器
加法器原理
补码加/减运算方法
电路实现
n bit补码 X + Y,按位相加即可
n bit补码 X - Y,将减数Y全部
按位取反,末位+1,得到,
减法变加法
n bit补码 X - Y,将减数Y全部
按位取反,末位+1,得到,
减法变加法
补码的例子
n bit无符号数 X + Y,按位相加即可
n bit无符号数 X - Y,将减数Y全部
按位取反,末位+1,减法变加法
n bit无符号数 X - Y,将减数Y全部
按位取反,末位+1,减法变加法
无符号整数的例子
回忆:各种门电路的图形,全加器的图形和输入输出信号
数据的存储和排列
大端模式:最高有效字节存在低地址,最低有效字节存在高地址
小端模式:最低有效字节存在低地址,最高有效字节存在高地址
小端模式:最低有效字节存在低地址,最高有效字节存在高地址
半字的地址=字节地址逻辑左移1位;字的地址=字节地址逻辑左移2位 (基于一个字=4个字节)
例如:想要知道#2字的地址,只需要将#2字节的地址逻辑左移两位即可
例如:想要知道#2字的地址,只需要将#2字节的地址逻辑左移两位即可
浮点数的表示和运算
浮点数的表示
浮点数的作用和基本原理
表示
类比科学计数法
阶码E反应浮点数的表示范围及小数点的实际位置
尾数M的数值部分的位数n反应浮点数的精度
尾数M的数值部分的位数n反应浮点数的精度
阶码+尾数
尾数给出具体数值,阶码指明小数点前移、后移多少位
阶码通常是用补码、移码表示的定点整数
尾数通常是用补码、原码表示的定点小数
真值:N=×M
浮点数规格化
尾数的最高数值位必须是一个有效值(类比十进制科学计数法,通常我们会让数值部分最高位为非0)
左规:数值位最高位无效时,通过尾数算数左移、阶码减1的方法处理,直到尾数最高数值位有效时停止
例如:+14+0.003需要左规,尾数数值部分0.003需要逻辑左移
例如:+14+0.003需要左规,尾数数值部分0.003需要逻辑左移
右规:若采用双符号位表示尾数,则当运算后尾数“假溢出”(双符号位为01或10)时,可以通过尾数右移、阶码加1的方法处理
例如:+10+302.6需要右规,尾数数值部分302.6需要逻辑右移
例如:+10+302.6需要右规,尾数数值部分302.6需要逻辑右移
原码表示的尾数规格化:尾数的最高数值位必须是1
补码表示的尾数规格化:尾数最高数值位必须和尾数符号位相反
浮点数的表示范围
IEEE 754 标准
移码
定义
实例图示
此处8位移码的偏置值=128D=1000 0000B,即
偏置值一般取,此时移码=补码符号位取反
偏置值一般取,此时移码=补码符号位取反
偏置值可以取其他值,此处偏置值=127D=0111 1111B,即
,是IEEE 754标准所规定的偏置值
,是IEEE 754标准所规定的偏置值
标准
转换
十进制 -> IEEE 754
IEEE 754 -> 十进制
表示的范围
表示的最小绝对值
和最大绝对值
和最大绝对值
阶码全1和全0
时所表示的值
时所表示的值
当需要表示比上述最小绝对值更小的数时
浮点数的运算
加减运算
过程
对阶
小阶向大阶看齐,尾数算数右移一位,阶码加1,直到阶码相同
注:对阶可能导致丢失末尾精度
尾数加减
通常采用双符号位表示尾数,这样可以挽救尾数溢出
规格化
左规
尾数最高数值位为无效位时,尾数左移,阶码减1
右规
尾数双符号位不同,尾数右移,阶码加1
舍入
尾数的位数有限导致的问题,常用方法:0舍1入、恒置1
溢出判断
阶码上溢
抛出异常(中断)
阶码下溢
按机器0处理
注意
真值到机器数的转换
以10进制为例
2进制转换例子
强制类型转换
无损
char->int->long->double
float->double
有损
int->float
float->int
海明码
基本思想
分组偶校验,多个校验位可反映出错位置
求解步骤
确定校验位个数(k个校验位,n个信息位)
确定校验位分布
校验位放在海明位号的位置上,P1,P2,P3...分布在1,2,4,8,16...
空出来的其他位置一次填入信息位
求校验位
将信息位的位置序号用k位二进制数表示出来
校验位Pi与位置序号第i位为1的信息位归为同一组,进行偶校验
、
纠错
对P1,P2,P3...所属各跟组进行异或(相当于分组偶校验)求得S1,S2,S3...
S3 S2 S1 = 000 说明无错误
S3 S2 S1 000 则其值反映出错位置
补充
海明码有1位纠错,2位检错能力
为了区分1位纠错和2位检错,还需添加“全校验位”对整体进行偶校验
注意:有的题目位置编号可能是从小到大的,但处理方法雷同
循环冗余校验码
构造
由生成多项式确定“除数”。若生成多项式中x的最高次为R,则“除数”有R+1位
K个信息位+R个0,作为“被除数”
被除数、除数进行“模二除”,得R位余数
K个信息位+R位余数 = CRC码
校验
收到K+R位数据,与生成多项式模二除,计算R位余数
余数为0,说明无错误
余数非0,说明出错
检错、纠错能力
1) 可检测出所有奇数个错误;
2) 可检测出所有双比特的错误
3) 可检测出所有小于等于校验位长度的连续错误
4) 若选择合适的生成多项式,且,则可纠正单比特错
定点数的表示
无符号数
定义
整个机器字长的全部二进制位数均为数值位,没有符号位,相当于数的绝对值
表示范围
有符号数
原码
定义
用尾数表示真值的绝对值,符号位“0/1”对应“正/负”
表示范围
定点整数
若机器字长n+1位,原码整数的表示范围:- (关于原点对称)
定点小数
若机器字长n+1位,原码小数的表示范围:- (关于原点对称)
反码
补码
移码
各种码之间的转换
补码和移码的作用
补码采用加法代替减法
原理
例子
移码方便对比整数的大小
定点数的运算
移位运算
算数移位
左移一位相当于乘以基数;右移一位相当于除以基数
原码
右移
高位补0,低位舍弃。若舍弃的位=0,则相当于除2;若舍弃的位0,则会丢失精度
左移
低位补0,高位舍弃。若舍弃的位=0,则相当于乘2;若舍弃的位0,则会出现严重误差
反码
正数
左移右移和原码相同
负数
右移
高位补1,低位舍弃
左移
低位补1,高位舍弃
补码
正数
左移右移和原码相同
负数
右移(同反码)
高位补1,低位舍弃
左移(同原码)
低位补0,高位舍弃
逻辑移位
逻辑右移:高位补0,低位舍弃
逻辑左移:低位补0,高位舍弃
循环移位
加减运算
原码
加法
同号相加
符号位不变
异号相加
数值部分=被加数、加数的绝对值进行相加
数值部分=被加数、加数中,绝对值更大的减绝对值更小的
符号位与绝对值更大的数相同
减法
将减数取负,转变为加法
补码
总是要转变成加法,符号位参与运算
溢出判断(补码)
Key,正+正=负(丄溢);负+负=正(下溢)
方法三:采用双符号位,正数符号为00,负数符号为11;加法运算后若双符号位=01则发生丄溢;若双符号位=10则发生下溢;若两个符号位相同则未发生溢出
符号扩展
定点整数的符号扩展:在原符号位和数值位中间添加新位,正数都添0;负数源码添0,负数反、补码添1
定点小数的符号扩展:在原符号位和数值位后面添加新位,正数都添0;负数原、补码添0,负数反码添1
乘法运算
乘法运算的实现思想
原码的一位乘法
计算机实现原理
手算模拟
补码的一位乘法
与原码的比较
辅助位
手算模拟
除法运算
除法运算的思想
原码除法:恢复余数法
原码除法:加减交替法(不恢复余数法)
补码除法:加减交替法
强制类型转换
字符与字符串
ASCII码
通常用8bit表示一个字符,最高位都为0
共128个字符。0~31、127为控制/通信字符;32~126为可印刷字符
所有大写字母、所有小写字母、所有数字的编码都连续
汉字
区位码、国标码、汉字内码
国标码=区位码+2020H
机内码=国标码+8080H
输入编码、字形码
字符串
从低地址到高地址逐个字符存储,常采用'\0'作为结尾标志
对于多字节的数据(如汉字),可采取大/小端存储模式
大端模式:将数据的最高有效字节存放在低地址单元中
小端模式:将数据的最高有效字节存放在高地址单元中
3.存储系统
存储系统基本概念
层次结构
高速缓存(Cache)
主存储器(主存、内存)
辅助存储器(辅存、外存)
图示
分类
按层次结构
同上 ↑
按存储介质
半导体存储器、磁表面存储器、光存储器
按存取方式
随机存取存储器(RAM),如内存;
顺序存取存储器(SAM),如磁带;
直接存取存储器(DAM),如机械硬盘;
相联存储器(可按内容访问的存储器,CAM),如快表
按信息可更改性
读/取存储器
只读存储器(ROM)
断电后信息是否消失
易失性存储器,如内存、Cache;非易失性存储器,如磁盘、光盘
信息读出后、原信息是否被破坏
破坏性读出,如DRAM芯片;非破坏性读出,如SRAM芯片、磁盘
存储器性能指标
存储容量=存储字数×字长(如1M×8位)
单位成本(每位价格)=总成本/总容量
数据传输率(主存带宽)=数据的宽度/存储周期
存储周期=存取时间+恢复时间
存取时间(Ta)
存取周期(Tm)
图示
ROM和RAM的区别
区分RAM和ROM的原理:断电后数据是否会消失
主存储器的基本组成
基本元件
图示
用一排存储元可构成存储单元,存储单元中的MOS管都接同一个电平(同时导通)
MOS管,作为通电“开关”
电容,存储电荷(即存储二进制0/1)
存储芯片的结构
译码驱动电路
译码器将地址信号转化为字选通线的高低电平
存储矩阵(存储体)
由多个存储单元构成,每个存
储单元又由多个存储元构成
储单元又由多个存储元构成
读写电路
每次读/写一个存储字
地址线、数据线、片选线、读写控制线(可能分
开两根,也可能只有一根)
开两根,也可能只有一根)
图示
对电路封装后的图示
考点
寻址
现代计算机通常按字节(每个字节),即每个字节对应一个地址
按字节寻址、按字寻址、按半字寻址、按双字寻址
DRAM和SRAM
存储元件不同导致的特性差异
栅极电容
电容放电,里面的电荷会被释放,
信息被破坏,是破坏性读出。读出
后应有重写操作,也称“再生”
信息被破坏,是破坏性读出。读出
后应有重写操作,也称“再生”
双稳态触发器
1:当A点为高电平,B点为低电平
0:当A点为低电平,B点为高电平
读出数据,触发器状态保持稳定,是非破坏性读出,无需重写
0:当A点为低电平,B点为高电平
读出数据,触发器状态保持稳定,是非破坏性读出,无需重写
对比
刷新:DRAM电容内的电荷只能维持2ms。即便不断电,2ms后信息回消失,
2ms之内需要“刷新”一次;而SRAM只要不断电,触发器的状态就不会改变
2ms之内需要“刷新”一次;而SRAM只要不断电,触发器的状态就不会改变
DRAM的刷新
多久需要刷新一次?
每次刷新多少存储单元
拓展:为什么要用行列地址?
如何刷新?
在什么时刻刷新?
DRAM的地址线复用技术
只读存储器ROM
MROM
PROM
EPROM
闪存
SSD
双端口RAM和多模块存储器
--提升主存速度
--提升主存速度
存取周期T=存取时间r+恢复时间
双口RAM
多模块存储器
单体多字存储器
每次并行读出m个连续的字
总线宽度也要扩展为m个字
多体并行存储器
高位交叉编址
理论上多个存储体可以被并行访问,但是由于通
常会连续访问,因此实际效果相当于单纯的扩容
常会连续访问,因此实际效果相当于单纯的扩容
低位交叉编址
当存储模块数m≥T/r时,可使流水线不间断
每个存储周期内可读写地址连续的m个字
微观上,m个模块被串行访问;宏观上,
每个存储周期内所有的模块被并行访问
每个存储周期内所有的模块被并行访问
交叉编址图解
例:采用4根内存条的情况,高位、低位交叉编址指的是采用内存地址的高位 | 低位来反映这个地址
代表了哪一个存储体,比如4根存储体,每个存储体有8个存储单元,则需要4×8=32=,5个地址位
来作为主存的地址,高位交叉指的是采用最高两位来反映是哪一个存储体,低位则是采用最低两位,
剩下的部分来表示存储体内地址,按顺序来编址
代表了哪一个存储体,比如4根存储体,每个存储体有8个存储单元,则需要4×8=32=,5个地址位
来作为主存的地址,高位交叉指的是采用最高两位来反映是哪一个存储体,低位则是采用最低两位,
剩下的部分来表示存储体内地址,按顺序来编址
连续存储n个存储字的情况:高位编址,每次都落在同一个存储体中,需要5T
而低位编址,前4个存储字分别落在不同的存储体中,第五个又落回到第一个中,
也就是相当于流水线的模式,此时存储模块数m=T/r,可以最大化利用每个存储体
而低位编址,前4个存储字分别落在不同的存储体中,第五个又落回到第一个中,
也就是相当于流水线的模式,此时存储模块数m=T/r,可以最大化利用每个存储体
实际应用
存储器与CPU的连接
连接示意图
表示符号说明
单块存储芯片与CPU的连接
多块存储芯片与CPU的连接
位扩展法
字扩展法
线选法
片选法
线选法vs译码片选法
线选法
译码片选法
字位扩展法
关于译码器知识的补充
为“使能”信号,类似与片选信号CS
外部存储器
磁表面存储器
优缺点
优点
缺点
磁盘存储器
磁盘原理
磁盘设备的组成
存储区域:磁头、柱面、扇区
磁盘存储器:磁盘驱动器、磁盘控制器、盘片
图示
性能指标
容量:一个磁盘所能存储的字节总数成为磁盘容量。
磁盘容量有非格式化容量和格式化容量之分。
磁盘容量有非格式化容量和格式化容量之分。
记录密度:记录密度是指盘片单位面积上记录的二进制的信息量,
通常以道密度、位密度和面密度表示
通常以道密度、位密度和面密度表示
道密度
位密度
面密度
平均存取时间:寻道时间(磁头移动到目的磁道)+
旋转延迟时间(磁头定位到所在扇区)+传输时间(传输数据所花费的时间)
旋转延迟时间(磁头定位到所在扇区)+传输时间(传输数据所花费的时间)
数据传输率:磁盘存储器在单位时间内向主机传送数据的字节数,称为数据传输率
磁盘地址:驱动器号 | 柱面(磁道)号 | 盘面号 | 扇区号
工作过程: 硬盘的主要操作是寻址、读盘、写盘。每个操作都对应一个控制字,
硬盘工作时,第一步是取控制字,第二步是执行控制字
硬盘工作时,第一步是取控制字,第二步是执行控制字
磁盘阵列RAID
思想:RAID(Redundant Array of Inexpensive Disks,廉价冗余磁盘阵列)是将多个独立的物理磁盘组成一个独
立的逻辑盘,数据在过个物理盘上分割交叉存储、并行访问,具有更好的存储性能、可靠性和安全性
立的逻辑盘,数据在过个物理盘上分割交叉存储、并行访问,具有更好的存储性能、可靠性和安全性
RAID分级
RAID0:无冗余和无校验的磁盘阵列
逻辑上相邻的两个扇区
在物理上存到两个磁盘
在物理上存到两个磁盘
RAID1:镜像磁盘互为备份
存两份数据
RAID2:采用纠错的海明码的磁盘阵列
逻辑上连续的几个bit物理上分散存储在各个盘中
4bit信息位+3bit海明校验位--可纠正一位错,发现两位错
4bit信息位+3bit海明校验位--可纠正一位错,发现两位错
RAID3~5;通过数据校验提高容错能力
固态硬盘SSD
原理
组成
闪存翻译层
存储介质:多个闪存芯片(Flash Chip)
读写性能特性
以页(page)为单位读/写
以块(block)为单位“擦除”,擦干净的快,
其中的每页都可以写一次,读无限次
其中的每页都可以写一次,读无限次
支持随机访问,系统给定一个逻辑地址,闪存翻译层
可通过电路迅速定位到对应的物理地址
可通过电路迅速定位到对应的物理地址
读快、写慢。要写的页如果有数据,则不能写入,需要将快内其他页
全部复制到一个新的(擦除过的)块中,再写入新的页
全部复制到一个新的(擦除过的)块中,再写入新的页
与机械硬盘相比的特点
SSD读写速度快,随机访问性能高,用电路控制访问位置;机械硬盘
通过移动磁臂旋转磁盘控制访问位置,有寻道时间和旋转延迟
通过移动磁臂旋转磁盘控制访问位置,有寻道时间和旋转延迟
SSD安静无噪音、耐摔抗震、耗能低、造价更贵
SSD的一个“块”被擦除次数过多(重复写同一个块)可能会坏掉,
而机械硬盘的扇区不会有因为写的次数太多而坏掉
而机械硬盘的扇区不会有因为写的次数太多而坏掉
磨损均衡技术
思想:将“擦除”平均分布在各个块上,以提升使用寿命
动态磨损均衡
静态磨损均衡
高速缓冲存储器Cache
工作原理
局部性原理
时间局部性
空间局部性
性能分析
Cache命中率、缺失率
命中率H
缺失(未命中)率M=1-H
两种方式
先访问Cache,发现未命中再访问主存
同时访问Cachehe和主存,若Cache命中则停止访问主存
其他概念
主存与Cache之间以“块”为单位进行数据交换
图示:例每1KB为一块
主存的“块”又叫“页/页框/页面”;Cache的“块”又叫“行”
主存地址可拆分为(主存块号,块内地址)的形式
Cache-主存 映射方式
Cache中存储的信息
每个Cache块信息:有效位(0/1)+标记+整块数据
其中“标记”用于指明对应的内存块,不同映射
方式,“标记的位数不同”
方式,“标记的位数不同”
全相联映射
主存快可以放到Cache的任意位置
主存地址结构
实际例子
优缺点
优点
缺点
直接映射
主存块只能放到特定的某个Cache行,
行号=主存快号%总行数
行号=主存快号%总行数
主存地址结构
主存块号%,相当于留下最后三位二进制数。若Cache总块数=则主存块号
末尾n位直接反映它在Cache中的位置,将主存块号的其余位作为标记即可
末尾n位直接反映它在Cache中的位置,将主存块号的其余位作为标记即可
优缺点
优点
缺点
组相联映射
主存块可以放到特定分组中的任意位置,
所属组号=主存块号%总组数
所属组号=主存块号%总组数
主存地址结构
与直接相联类似,只是将总行数再进行分组
优缺点
优点
Cache替换算法
随机算法(RAND)
若Cache已满,则随便选一个主存块替换
实现简单,但完全没考虑局部性原理,命中率低,效果不稳定
先进先出算法(FIFO)
若Cache已满,优先替换最先被调入Cache的主存块
实现简单,最开始按#0#1#2#3放入Cache,之后轮流替换#0#1#2#3,
FIFO依然没考虑局部性原理,最先被调入Cache的块也有可能是被频繁访问的
FIFO依然没考虑局部性原理,最先被调入Cache的块也有可能是被频繁访问的
近期最少使用(LRU)
将最久没有被访问过的主存块替换。每个Cache行设置“计数器”,用于记录多久没被访问
实现原理
命中时,所命中的行的计数器清零,数值比其低的行的计数器加1,其余不变
未命中且还有空闲行时,新装入的行的计数器置0,其余非空闲行全加1
未命中且无空闲行时,计数值最大的行的信息块被淘汰,新装行的块的计数器置0,其余全加1
基于“局部性原理”,近期被访问过的主存块,在不就的将来也很有可能被再次访问,因此
淘汰最久没被访问过的块是合理的。LRU算法的实际运行效果优秀,Cache命中率高。
淘汰最久没被访问过的块是合理的。LRU算法的实际运行效果优秀,Cache命中率高。
最不经常使用(LFU)
将被访问次数最少的主存块替换。每个Cache行设置一个“计数器”,用于记录被访问过多少次
曾经被经常访问的主存块在未来不一定会用到(只在一小
段时间内被频繁用到,后续不用),LFU实际运行效果不好
段时间内被频繁用到,后续不用),LFU实际运行效果不好
Cache写策略
写命中
全写法(写直通法,write-through)
写回法(write-allocate)
写不命中
写分配法(write-allocate)
非写分配法(not-write-allocate)
多级Cache
页式存储器
概念
页式存储系统
虚地址vs实地址
虚地址
实地址
简单理解:虚地址=》实地址 = 逻辑页号=》主存块号
页表
作用
页表数据存在主存里
地址变换过程
解释:由于页表项大小固定,所以可以根据页表基地址和
逻辑页号就能找到对应的页表项
逻辑页号就能找到对应的页表项
地址变换过程(增加TLB)
虚拟存储器
基本概念
虚地址(逻辑地址)
实地址(物理地址)
类型
页式
段式
段页式
虚实地址转换
快表TLB
慢表 Page
4.指令系统
指令格式
指令定义
定义
一台计算机的所有指令的集合构成
该机的指令系统,也称为指令集
该机的指令系统,也称为指令集
注:一台计算机只能执行自己指令系统
中的指令,不能执行其他系统的指令
中的指令,不能执行其他系统的指令
一条指令由操作码、地址码组成,其中地址码可能有0~4个
按地址码数目分类
零地址指令
不需要操作数,如空操作、停机、关中断等指令
堆栈计算机,两个操作数隐含存放在
栈顶和次栈顶,计算结果压回栈顶
栈顶和次栈顶,计算结果压回栈顶
一地址指令
图示
指某个主存地址,()表示所指向的地址中的内容
情况
只需要单操作数,如加1、减1、取反、求补等
指令含义:OP()→
需要两个操作数,但其中一个操作数
隐含在某个寄存器(如隐含在ACC)
隐含在某个寄存器(如隐含在ACC)
指令含义:(ACC)OP()→ACC
二地址指令
图示
二地址指令格式
情况
常用于需要两个操作数的算术运算、逻辑运算相关指令
指令含义:()OP()→
三地址指令
图示
三地址指令格式
情况
常用于需要两个操作数的算术运算、逻辑运算相关指令
指令含义:()OP()→
四地址指令
图示
四地址指令格式
情况
指令含义:()OP()→,=下一条将要执行指令的地址
注
n位地址码的直接寻址范围=
若指令总长度固定不变,则地
址码数量越多,寻址能力越差
址码数量越多,寻址能力越差
按指令长度分类
指令字长的概念(对比机器字长、存储字长)
指令字长
机器字长
存储字长
指令字长
半字长指令
单字长指令
双字长指令
注:指令字长会影响取指令所需时间
分类
定长指令字结构
变长指令字结构
按操作码长度分类
定长操作码
操作码n位 -> 有指令
可变长操作码
例:定长指令字结构+可变长操作码
-> 扩展操作码指令格式
-> 扩展操作码指令格式
扩展操作码指令格式
按操作类型分类
数据传送类
LOAD
STORE
运算类
算术逻辑操作
算术
逻辑
移位操作
程序控制类
转移操作
无条件转移
条件转移
调用和返回
陷阱(Trap)与陷阱指令
输入输出类
扩展操作码指令格式
扩展操作码举例
注意
不允许短码是长码的前缀,即短操作码
不能与长操作码的前面部分的代码相同
不能与长操作码的前面部分的代码相同
各指令的操作码一定不能重复
通常情况下,对使用频率较高的指令,分配较短
的操作码;从而减少指令译码和分析的时间
的操作码;从而减少指令译码和分析的时间
实际例子
设指令字长固定为16位,设计一套指令系统
指令寻址
什么是指令寻址
确定下一条要执行的指令的存放地址
由程序计数器PC指明
回忆:计算机的工作过程
思考
按字节编址
一条指令占用两个字节,那再执行完一条指令后,(PC)需要+2
变长指令字结构
根据指令来动态判断下一条指令的地址(+n)
顺序寻址
(PC)+"1" ---> PC
此处的"1"要理解为一个指令字长,实际
加的值会因指令长度、编址方式而不同
加的值会因指令长度、编址方式而不同
每次取指令结束后,一定会PC+"1"
跳跃寻址
执行转移类指令导致的PC值改变
在没有执行到JMP那一行指令之前都是顺序寻址,执行到
JMP 7时,会将PC值修改为7,从而跳跃到位置7往下执行
JMP 7时,会将PC值修改为7,从而跳跃到位置7往下执行
数据寻址
指令寻址VS数据寻址
指令寻址
始终由程序计数器PC给出
数据寻址
数据寻址需要思考的问题
情况一:当这段程序正好位于
主存的起始地址时,JMP 7可
以正确找到对应的指令107
主存的起始地址时,JMP 7可
以正确找到对应的指令107
情况二:当系统内程序较多,该
程序没有位于主存的起始地址,
JMP 7就需要理解为该程序起始
地址+7的偏移量找到107指令
程序没有位于主存的起始地址,
JMP 7就需要理解为该程序起始
地址+7的偏移量找到107指令
情况三:当程序取出103这条指令
后,PC自动加1指向104,这时执
行JMP 3可以理解为在当前PC的值
上加上偏移量3,也可以找到107
这条指令
后,PC自动加1指向104,这时执
行JMP 3可以理解为在当前PC的值
上加上偏移量3,也可以找到107
这条指令
寻址特征
对地址码的解读可以有多种方式,现在的指令格式不满足
满足需求,增加寻址方式位,称为寻址特征
寻址方式位
加入寻址特征后指令格式
寻址方式
直接寻址
间接寻址
寄存器寻址
寄存器间接寻址
隐含寻址
立即寻址
偏移寻址
基址寻址
EA=(BR)+A
图解
变址寻址
EA=(IX)+A
图解
变址寻址的作用
不使用变址寻址,需要对循环中每一个数组元素进行一次直接寻址,非常冗余
使用变址寻址后,只需要对数组的起始地址进行变址寻址即可实现数组元素相加
使用基址&变址复合寻址,程序的位置不局限于主存中的起始位置
相对寻址
EA=(PC)+A
图解
取出当前指令后,PC会指向下一条指令,相对寻址是相对于下一条指令的偏移
相对寻址的作用
当我们改变程序中一段代码的位置后,若采用直接寻址,会出现地址出错的情况
由于条件跳转采用直接寻址,但程序位置改变,导致寻址错误
采用相对寻址,就可以正确的跳转到下一条指令的位置
补充:硬件如何实现数的“比较”
堆栈寻址
SP--Stack Pointer
硬堆栈vc软堆栈
硬堆栈
软堆栈
总结
高级语言与机器
级代码之间的对应
级代码之间的对应
高级语言->汇编语言->机器语言
只需关注x86汇编语言
可以结合C语言看懂汇编语言的关键语句
汇编语言、机器语言一一对应,要能结合汇编
语言分析机器语言指令的格式、寻址方式
语言分析机器语言指令的格式、寻址方式
x86汇编语言指令基础
指令的作用
改变程序执行流
处理数据
指令格式:操作码+地址码
操作码
地址码
寄存器
主存
指令中
以mov指令为例
指令格式:mov 目的操作数d,源操作数s
#mov指令功能
指令实例
mov eax, ebx
mov eax, 5
mov eax, dword ptr[af996h]
mov byte ptr[af996h], 5
指令中指明内存
读取长度的部分
读取长度的部分
dword ptr -- 双字,32bit
word ptr -- 单字,16bit
byte ptr -- 字节,8bit
x86架构CPU的寄存器
寄存器种类
EAX
EBX
ECX
EDX
ESI
EDI
EBP
ESP
通用寄存器
的灵活使用
的灵活使用
只使用其中
一部分空间
一部分空间
EDX
EAX
EBX
ECX
图示
使用32bit
使用16bit
使用8bit
更多例子
mov eax, dword ptr[ebx]
mov dword ptr[ebx], eax
mov eax, byte ptr[ebx]
mov eax, [ebx]
mov [af996h], eax
mov eax, dword ptr[ebx+8]
mov eax, dword ptr[af996-12h]
常用的x86汇编指令
算术运算
加:add d,s
减:sub d,s
乘
mul d,s
imul d,s
除
div s
idiv s
取负数
neg d
自增++
inc d
自减--
dec d
逻辑运算
与:and d,s
或:or d,s
非:not d
异或:xor d,s
左移:shl d,s
右移:shr d,s
其他
用于实现分支结构、循环结构的指令:cmp、test、jmp、jxxx
用于实现函数调用的指令:push、pop、call、ret
用于实现数据转移的指令:mov
AT&T格式 v.s. Intel格式
Intel格式(x86汇编)
主存地址偏移量图示
选择语句的机器级表示
程序中的选择语句(分支结构)
程序计数器:PC
每取出一条指令,PC自动“+1”,指向下一条即将执行的指令
注:Intel x86处理器中程序计数器PC(Program Counter)通常
被称为IP(Instruction Pointer)
被称为IP(Instruction Pointer)
分支结构
分支结构可能改变程序的执行流,只靠PC无法实现,需要条件跳转指令
无条件转移指令--jmp
当取出108内的指令后,PC指向112,执行108指令后,为无条件转移指令,PC会直
接跳转到128
接跳转到128
问题
程序员不知道每一条具体的指令在主存中的位置
解决
可以使用标记,并跳转到标记为止,但是对于if(a>b)这种需要判断的语句,不好处理
条件转移指令--jxxx
使用条件转移指令,可以比较两个数大小,然后跳转
示例
真题
写汇编语言代码时,一般会以函数名为“标号”,标注该函数指令的起始地址
扩展:cmp指令的底层原理
循环语句的机器级表示
用条件转移指令实现循环
while循环同理
用loop指令实现循环
x86中转移指令有很多,不需要都记住,可以在考试的时候,使用c语言语句逆推其生效的条件
行数调用的机器级表示
Call和ret指令
高级语言的函数调用
程序依次调用的时候,按顺序依次入栈,调用返回时,再一一出栈
以caller()函数调用add()函数为例
总结
还未解决的问题:1、如何传递调用参数、返回值?2、如何访问栈帧里的数据?3、栈帧内可能
包含哪些内容
包含哪些内容
如何访问栈帧
函数调用栈在内存中的位置
栈倒过来画的原因
标记栈帧范围
EBP、ESP寄存器
EBP
ESP
图示,add运行完之后,ebp、esp就会
指向caller栈帧的底部和顶部
指向caller栈帧的底部和顶部
注:x86系统中,默认以4字节为栈的操作单位
访问栈帧数据
push、pop指令
mov指令
总结
如何切换栈帧
调用时
如果一个函数被调用,那么这个函数的开头都会执行push ebp;mov ebp,esp,来保存上一层函
数的栈帧基址,该地址被存在被调用函数的栈帧的底层
注意:IP旧值(上一个函数在调用返回时需要继续执行的指令地址)被保存在上一层函数栈帧的顶
部,由call指令完成
数的栈帧基址,该地址被存在被调用函数的栈帧的底层
注意:IP旧值(上一个函数在调用返回时需要继续执行的指令地址)被保存在上一层函数栈帧的顶
部,由call指令完成
返回时
函数返回时,都会执行mov esp,ebp; pop ebp 将ebp、esp指回上一个函数栈帧的顶部和底层,由于IP旧值
保存在顶部,ret指令可以直接取esp指向的地址中的数据将IP的值跳回上一层函数未执行的指令继续运行
保存在顶部,ret指令可以直接取esp指向的地址中的数据将IP的值跳回上一层函数未执行的指令继续运行
总结
除了main函数不一样,其他函数的汇编代码结构都一样
如何传递参数和返回值
栈帧中包含的内容
将栈帧到校设置为16B的整数倍是为了数据对齐
栈帧结构(从底部到顶部)
图示
解释
上一层栈帧基址
每个函数开头都要执行:push ebp; mov ebp,esp
若干个局部变量
局部变量。C语言中越靠前定义的局部变量越靠近栈顶
未使用的区域
栈帧大小为16B整数倍,因此可能产生未使用区域
部分寄存器值
调用其他函数前,如果有必要,可将某些寄存器(如:eax、
ebx、ecx)的值入栈保存,防止中间结果被破坏
ebx、ecx)的值入栈保存,防止中间结果被破坏
若干个调用参数
调用参数。参数列表中越靠前的参数越靠近栈顶
IP(返回地址)
函数调用时,call指令将IP寄存器值(返回地址)压栈保存
代码实战
访问局部变量
访问当前函数的局部变量:[ebp-4]、[ebp-8] ...
传递参数
在当前栈帧的顶部(IP旧值下方)写入变量,供后续入栈的栈帧访问
函数调用
在当前栈帧(调用者)的顶部写入IP旧值(函数返回时需要继续执行的地方)
切换栈帧
在下一个栈帧(被调用函数)底部压入上一个栈帧ebp(基地址)的值,
并将ebp指向被调用函数栈帧的底部,esp此时也指向底部,后续会改变
并将ebp指向被调用函数栈帧的底部,esp此时也指向底部,后续会改变
访问参数
访问上一层函数传过来的参数,由于参数被保存在上一层函数栈帧的顶部(最
顶部是IP旧值),可以通过当前ebp的指针:[ebp+8]、[ebp+12]...来访问
顶部是IP旧值),可以通过当前ebp的指针:[ebp+8]、[ebp+12]...来访问
传递返回值
可以将返回值写入eax寄存器,函数返回时,上一层函数可以直接读取eax寄存器
函数调用返回
使用leave指令,切换回上一层函数的栈帧,ebp、esp值改变,return读取IP旧值
让函数的执行流回到上一层函数
让函数的执行流回到上一层函数
使用返回值
可以直接入去eax寄存器中的值,来读取返回值
总结
图示
发生函数调用的时候,调用者有些运算的中间结果还存在寄存器中,也需要将寄存器中的值进行压栈保存
重要概念
栈帧
在函数调用栈中,一个栈帧对应一层函数,用于存储每层函数相关的一些信息
栈底在高地址方向、栈顶在低地址方向。以4字节为单位操作栈帧
ebp、esp寄存器
标记了当前正在执行的函数栈帧范围
ebp指向当前函数栈帧底部4字节、esp指向当前函数栈帧顶部4字节
push、pop指令
push指令将数据压入栈顶,并将esp减4
pop指令将栈顶元素出栈,并将esp加4
如何切换栈帧
在每个函数开头,需例行执行enter指令--等价于push ebp; mov ebp,esp
每个函数ret之前,需例行执行leave指令--等价于mov esp,ebp; pop ebp
发起调用、返回
call指令
将IP旧值压栈保存(保存在函数的栈帧顶部)
设置IP新值,无条件转移至被调用函数的第一条指令
ret指令
从函数的栈帧顶部找到IP旧值,将其出栈并恢复IP寄存器
如何传递参数、返回值
在call指令前,将调用参数写入栈帧顶部区域
在ret指令前,将函数返回值写入eax寄存器
如何访问栈帧内数据
访问当前函数的局部变量
[ebp-4]、[ebp-8]...
访问上一层函数传过来的参数
[ebp+8]、[ebp+12]...
一个栈帧包含哪些内容(自底向顶)
上一层栈帧的基地址(ebp旧值)
若干个局部变量
未使用区
部分寄存器值
若干个调用参数
返回地址(IP旧值)
CISC和RISC
介绍
对比
5.中央处理器
简单回忆
现代计算机的结构
运算器的基本组成
控制器的基本组成
计算机的工作过程
本章总览
CPU的功能和结构
需要提供哪些功能?
对应这些功能需要有哪些结构?
指令执行过程
指令周期的概念:一条指令的执行分为不同的阶段
数据流:不同阶段要求依次访问的数据序列
指令执行方案:如何安排多条指令的执行?
数据通路的功能和基本机构
如何设置部件之间的连接路径?
描述指令执行过程中信号和数据在这些路径上的传输
控制器的功能和工作原理
控制器如何指挥整个系统的工作?
控制器的设计
硬布线
微程序
指令流水线
为什么引入流水线的结构?
有哪些结构?
会产生什么问题?
CPU的功能和基本结构
CPU的功能
指令控制
完成取指令、分析指令和执行指令的操作,即程序的顺序控制
操作控制
一条指令的功能往往是由若干操作信号的组合来实现的。CPU管
理并产生由内存取出的每条指令的操作信号,把各种操作信号送
往相应的部件,从而控制这些部件按指令的要求进行运作
理并产生由内存取出的每条指令的操作信号,把各种操作信号送
往相应的部件,从而控制这些部件按指令的要求进行运作
时间控制
对各种操作加以时间上的控制。时间控制要为每条指令按时间顺
序执行提供应有的控制信号
序执行提供应有的控制信号
数据加工
对数据进行算术和逻辑运算
中断处理
对计算机运行过程中出现的异常情况和特殊请求进行处理
运算器和控制器的功能
运算器的功能
控制器的功能
取指令
分析指令
执行指令
中断处理
数据通路的基本结构
专用数据通路方式
介绍
图示
每个寄存器与ALU直接相连
存在问题
问题
如果直接用导线连接,相当于多个寄
存器同时并且一直向ALU传输数据
存器同时并且一直向ALU传输数据
解决方法
使用多路选择器
使用多路选择器根据控制
信号选择一路输出
信号选择一路输出
使用三态门
使用三态门控制每一路是否
输出
输出
优缺点
性能较高,基本不存在数据冲突现象,
但结构复杂,硬件量大,不易实现
但结构复杂,硬件量大,不易实现
CPU内部单总线方式
介绍
图示
右侧双向箭头为CPU内部总线,XXin为输入控制信号,
XXout为输出控制信号
XXout为输出控制信号
存在问题
问题
ALU从多个寄存器读出数据的时候,如果同时送到到总线上会产生数据
冲突,同理ALU运算结果需要等到输入信号稳定之后才能输出,如果此时
的输出还未稳定,ALU就向总线上输出数据存回,会和产生冲突
冲突,同理ALU运算结果需要等到输入信号稳定之后才能输出,如果此时
的输出还未稳定,ALU就向总线上输出数据存回,会和产生冲突
解决办法
在ALU输入和输出的位置上都加上暂存寄存器,暂存数据,暂存寄存器
也可以增加一些功能:1.移位、2.累加(也可由ACC实现)
也可以增加一些功能:1.移位、2.累加(也可由ACC实现)
优缺点
结构简单,容易实现,但数据传输存在
较多冲突的现象,性能较低。
较多冲突的现象,性能较低。
CPU内部多总线方式
运算器的基本结构
采用的数据通路方式为:内部单总线方式
控制器的基本结构
注:微操作信号发生器的输出可以控制XXin、XXout(XX:某个寄存器)是否导通来控制数据的输入输出;对于MDR
来说,MDRout是与CPU内部总线交互的控制信号,MDRoutE是与外部总线交互的控制信号,in同理
来说,MDRout是与CPU内部总线交互的控制信号,MDRoutE是与外部总线交互的控制信号,in同理
CPU基本结构(总览)
橙色框的寄存器为用户可见,灰色框为用户不可见
用户可见的寄存器:通用寄存器组、程序状态寄存器PSW、程序计数器PC
用户不可见的寄存器:MAR、MDR、IR、暂存寄存器
用户可见的寄存器:通用寄存器组、程序状态寄存器PSW、程序计数器PC
用户不可见的寄存器:MAR、MDR、IR、暂存寄存器
指令执行过程
指令周期
介绍
指令周期的概念
图示
相对于从内存中取指令来说,指令译码是发
生在CPU内部的,速度非常快,可归于取值
生在CPU内部的,速度非常快,可归于取值
机器周期(CPU周期)/时钟周期
机器周期
时钟周期
三者关系图
计算机的主频指的就是时钟周期
完成一个子工作(如取指令)需要的时钟周期,为一个
机器周期,所有的子工作机器周期相等为定长的机器周期,
不相等则为不定长的机器周期
完成一个子工作(如取指令)需要的时钟周期,为一个
机器周期,所有的子工作机器周期相等为定长的机器周期,
不相等则为不定长的机器周期
注
例子
指令周期流程
标志触发器FE、IND、EX、INT
四个工作周期都有CPU访存操作,只是访存的目的不同。
取值周期是为了取指令,间址周期是为了取有效地址,执
行周期是为了取操作数,中断中期是为了保存程序断点。
取值周期是为了取指令,间址周期是为了取有效地址,执
行周期是为了取操作数,中断中期是为了保存程序断点。
数据流
取指周期
图示
流程
当前指令地址送至存储器地址寄存器,
记做:(PC)→MAR
记做:(PC)→MAR
CU发出控制信号,经控制总线传到主
存,这里是读信号,记做:1→R
存,这里是读信号,记做:1→R
将MAR所指主存中的内容经数据总线
送入MDR,记做:M(MAR)→MDR
送入MDR,记做:M(MAR)→MDR
将MDR中的内容(此时是指令)送入IR,
记做:(MDR)→IR
记做:(MDR)→IR
CU发出控制信号,形成下一条指令地
址,记做:(PC)+1→PC
址,记做:(PC)+1→PC
间址周期
图示
流程
将指令的地址码送入MAR,记做:
Ad(IR)→MAR或Ad(MDR)→MAR
Ad(IR)→MAR或Ad(MDR)→MAR
CU发出控制信号,启动主存做读操作,
记做:1→R
记做:1→R
将MAR所指主存中的内容经数据总线
送入MDR,记做M(MAR)→MDR
送入MDR,记做M(MAR)→MDR
将有效地址送至指令的地址码字段,
记做:(MDR)→Ad(IR)
记做:(MDR)→Ad(IR)
执行周期
中断周期
图示
流程
CU控制将SP减1,修改后的地址送入MAR
记做:(SP)-1→SP,(SP)→MAR
记做:(SP)-1→SP,(SP)→MAR
CU发出控制信号,启动主存做写操作,
记做:1→W
记做:1→W
将断点(PC内容)送入MDR,记做:
(PC)→MDR
(PC)→MDR
CU控制将中断服务程序的入口地址(由向量地
址形成部件产生)送入PC,记做:向量地址→PC
址形成部件产生)送入PC,记做:向量地址→PC
执行方案
为什么要有指
令执行方案
令执行方案
前提:一个指令周期通要包括几个时间段(执行步骤),
每个步骤完成指令的一部分功能,几个一次执行的步骤
完成这条指令的全部功能。
每个步骤完成指令的一部分功能,几个一次执行的步骤
完成这条指令的全部功能。
不同的指令,指令周期的长度是不同的,当我们连续执行
多条指令的时候,就有不同的方案
多条指令的时候,就有不同的方案
方案
单指令周期
所有指令选用相同的执行时间,指令间串行;
指令周期取决于执行时间最长的指令的执行时间
多指令周期
不同类型指令选用不同的执行步骤,指令间串行
可选用不同个数的时钟周期来完成不同指令的执行过程
流水线方案
隔一段时间启动一条指令,多条指令处于不同阶
段,同时运行
段,同时运行
数据通路的功能
数据通路
介绍
控制部件
总线
内部总线
系统总线
结构
单总线结构
图示
CU与各部件的XXin、XXout都有控制线连接
方式
寄存器之间数据传送
例:把PC内容送至MAR
实现传送操作的
流程及控制信号
流程及控制信号
(PC)→Bus PCout有效,PC内容送总线
Bus→MAR MARin有效,总线内容送MAR
主存与CPU之间的数据传送
例:CPU从主存读取指令
实现传送操作的
流程及控制信号
流程及控制信号
(PC)→Bus→MAR PCout和MARin有效,现行指令地址→MAR
1→R CU发读命令(通过控制总线发出)
MARoutE有效,MAR中的存的地址通过地址总线发送给主存进行读
MEM(MAR)→MDR MDRinE有效,主存中读取的数据通过数据总线进入MDR
MDR→Bus→IR MDRout和IRin有效,现行指令→IR
执行算术或逻辑运算
例:执行一条加法指令
实现传送操作的
流程及控制信号
流程及控制信号
Ad(IR)→Bus→MAR AdiRout和MARin有效
指令分析后已经知道地址码的长度,也可以从MDR中取
1→R CU发读命令(通过控制总线发出)
MARoutE有效,MAR中的存的地址通过地址总线发送给主存进行读
MEM(MAR)→MDR MDRinE有效,主存中读取的数据通过数据总线进入MDR
MDR→Bus→Y MDRout和Yin有效,操作数→Y
(ACC)+(Y)→Z ACCout和ALUin有效,CU向ALU发送加命令
Z→ACC Zout和ACCin有效,结果→ACC
例题
设有如图所示的单总线结构,分析指令ADD (R0), R1的指令流程和控制信号
过程
分析指令功能和指令周期
功能:((R0))+(R1)→(R0)
包含的指令周期:取指、间址、执行
功能:((R0))+(R1)→(R0)
包含的指令周期:取指、间址、执行
写出各阶段的指令流程
取指周期
公共操作
间址周期
完成取数操作,被加数在主存中,加数已经放在寄存器R1中
执行周期
执行加法操作,并将结果存回主存
专用通路结构
图示
取址周期数据通路示意
控制器设计
硬布线控制器
内容回顾
图示
微命令和微操作的概念
注意的点
每个指令都可能包含4个周期:取指、间址、执行、中断
系统此时处于哪个周期,对应的寄存器就置为1
系统此时处于哪个周期,对应的寄存器就置为1
间址周期可能会执行多次,比如二级间接寻址
CU发出一个微命令,可完成对应微操作。如:微命令1使得
有效,完成的对应微操作为(PC)→MAR
有效,完成的对应微操作为(PC)→MAR
取指、间址、中断周期需要完成的微操作都相同,执行周期
如果确定了指令的操作码,那么需要完成的微操作也可以确定
如果确定了指令的操作码,那么需要完成的微操作也可以确定
根据指令操作码、目前的机器周期、节拍信号、机器状态条件,
即可确定现在这个节拍下应该发出哪些“微命令”
即可确定现在这个节拍下应该发出哪些“微命令”
结构
图示
根据指令操作码、目前的机器周期、节拍信号、机器状态条件,即可确定现在这个节拍下应该发出哪
些“微命令”
些“微命令”
解释
操作码译码器:比如ADD对应000,LOAD对应001
节拍发生器:接收时钟信号,第一个脉冲让输出高电平,第二个
脉冲让输出高电平,以此类推。代表一个机器周期
脉冲让输出高电平,以此类推。代表一个机器周期
所有指令的取指周期、节拍下一定要完成(PC)→MAR。如果要
完成上图红色框引脚对应的电路。则只需让
完成上图红色框引脚对应的电路。则只需让
电路图
相关例子
计组考试不考电路,上诉电路图中最右侧的芯片是一个大或门
解释
对于取址阶段(FE),节拍完成(PC)→MAR的微操作后,的微操作就是M(MAR)→MDR
对于间址阶段(IND),时刻会执行M(MAR)→MDR微操作的操作码有ADD、STA、LDA、JMP、BAN
对于执行阶段(EX),时刻会执行M(MAR)→MDR微操作的操作码有ADD、LDA
设计步骤
分析每个阶段的微操作序列
(取指、间址、执行、中断)
(取指、间址、执行、中断)
ID就是硬布线控制器结构中的操作码译码器
M(MAR)→MDR在多个周期内(不同的指令中)都被用到
是ACC累加器中的一个寄存器,用于判断符号位的正负,是一个机器状态条件
M(MAR)→MDR在多个周期内(不同的指令中)都被用到
是ACC累加器中的一个寄存器,用于判断符号位的正负,是一个机器状态条件
选择CPU的控制方式
安排微操作时序
原则
未操作的先后顺序不得随意更改
被控对象不同的微操作,尽量安排在
一个节拍内完成
一个节拍内完成
占用时间较短的微操作,尽量安排在
一个节拍内完成,并允许有先后顺序
一个节拍内完成,并允许有先后顺序
例子
取指周期
解释:
1.M(MAR)→MDR从主存取数据,用时较长,因此必须一个时钟周期才能保证微操作的完成
2.MDR→IR是CPU内部寄存器的数据传送,速度很快,因此在一个时钟周期内可以紧接着完
成OP(IR)→ID。也就是可以一次同时发出两个微命令(遵循原则三)
1.M(MAR)→MDR从主存取数据,用时较长,因此必须一个时钟周期才能保证微操作的完成
2.MDR→IR是CPU内部寄存器的数据传送,速度很快,因此在一个时钟周期内可以紧接着完
成OP(IR)→ID。也就是可以一次同时发出两个微命令(遵循原则三)
间址周期
执行周期
电路设计
步骤
列出操作时间表
取指
I这个状态条件表明了是否需要间址
间址
可能需要进行多次间址,只有当IND为0时才可以进入执行阶段
执行
表中内容表示的是节拍内所有可能出现的微操作,以及哪些指令会再这个节拍内
用到这个微操作(根据步骤二中安排的时序),如果用到则标为1
用到这个微操作(根据步骤二中安排的时序),如果用到则标为1
写出微操作命令的最简表达式
根据上诉的操作时间表,找出一条微操作(如M((MAR)→MDR)在所有周期、以及周期内所有
节拍中涉及到该微操作的所有行,然后即可列出逻辑表达式
节拍中涉及到该微操作的所有行,然后即可列出逻辑表达式
画出逻辑图
特点
指令越多,设计和实现就越复杂,因此一般用于RISC(精简指令集系统)
如果扩充一条新的指令,则控制器的设计就需要大改,因此扩充指令较困难
由于使用纯硬件实现控制,执行速度很快。微操作控制信号由组合逻辑电路及时产生
微程序控制器
基本原理
设计思路
注意的点
在硬布线控制器中的概念微命令()
与微操作((PC)→MAR)是一一对应的
与微操作((PC)→MAR)是一一对应的
本章中的概念微指令中可能包含多个微命令,没有对应关系
微程序与指令一一对应(如ADD对应一个微程序,但是不同的指令之间取指、间址、中断
周期所对应的微指令序列一样可公用,下文将这三个周期的微指令序列也称为微程序,和
指令对应的微程序(执行周期的微程序)一起构成一个完整的微程序)
周期所对应的微指令序列一样可公用,下文将这三个周期的微指令序列也称为微程序,和
指令对应的微程序(执行周期的微程序)一起构成一个完整的微程序)
基本结构
图示
微地址形成部件:根据IR得出的指令的操作码找到相应的微程序的起始地址
工作原理
图示
左侧的微程序段存放在控制存储器CM中
注意的点
对于一个指令是否需要间址,由指令中的寻址特征即可判断
在间址周期微程序的最后,有转执行周期的标志,顺序逻辑可根据该
标志,以及指令的操作码来判断跳到那个执行周期的微程序继续执行
标志,以及指令的操作码来判断跳到那个执行周期的微程序继续执行
中断周期最后的标志同理
取指周期微程序通常是公用的,故如果某指令系统中有n条机器指令,
则CM中微程序的个数至少是n+1个
则CM中微程序的个数至少是n+1个
一些早期的CPU、物联网设备的CPU可以不提供间接寻址和中断功能,
因此这类CPU可以不包含间址周期、中断周期的微程序段
因此这类CPU可以不包含间址周期、中断周期的微程序段
物理上,取指周期、执行周期看起来像是两个微程序,但逻辑上应该把
它们看作一个整体。因此,“一条指令对应一个微程序”的说法是正确的
它们看作一个整体。因此,“一条指令对应一个微程序”的说法是正确的
总结
CPU结构
微地址形成部件
微地址即微指令在CM中的存放地址
通过指令操作码形成对应微程序的第一条微指令的存放地址
顺序逻辑
根据某些机器标志和时序信息确定下一条微指令的存放地址
CMAR(μPC)
指明接下来要执行的微指令的存放地址
地址译码器
将CMAR内的地址信息译码为电信号,控制CM读出微指令
控制存储器CM
存放所有机器指令对应的微程序(微指令序列)
用ROM实现,按地址寻访。通常在CPU出厂时就把所有微程序写入
CMDR(μIR)
微指令寄存器,用于存放当前要执行的微指令。CM(μPC)→μIR
工作原理
指令周期=取指周期→间址周期→执行周期→中断周期。其中间址、中断周期可有可无
取指周期、间址周期、中断周期的微指令序列通常是公用的。执行周期的微指令序列各不相同
取指周期的微指令序列固定从#0开始存放。执行周期的微指令序列的存放根据指令操作码确定
概念对比
程序vs微程序;指令vs微指令;主存储器vs控制器存储器(CM);MAR vs CMAR;MDR vs
CMDR;PC vs μPC;IR vs μIR
CMDR;PC vs μPC;IR vs μIR
微命令、微操作、微指令、微程序之间的关系
指令周期:从主存取出并执行一条机器指令所需的时间
微周期(微指令周期):从控制器存储器取出一条微指令并执行相应微操作所需的时间
微指令的设计
微指令的格式
概念
相容性微命令
互斥性微命令
格式
水平型微指令
基本格式
操作控制字段+顺序控制字段(下地址)
图示
微指令长、微程序短
优缺点
优点:微程序短,执行速度快
缺点:微指令长,编写微程序较麻烦
垂直型微指令
基本格式
图示
微指令短、微程序长
优缺点
优点:微指令短,简单、规整,便于编写微程序
缺点:微程序长,执行速度慢,工作效率低
混合型微指令
微指令较短,仍便于编写;微程序也不长,执行速度加快
微指令的
编码方式
编码方式
概念
微指令的编码方式又称为微指令的控制方式,它是如何对微指令的控制字段进行
编码,以形成控制信号。编码的目标是在保证速度的情况下,尽量缩短微指令字长
编码,以形成控制信号。编码的目标是在保证速度的情况下,尽量缩短微指令字长
方式
直接编码(直接控制)方式
编码
在微指令的操作控制字段,每一位代表一个微操作命令
某位为“1”表示该控制信号有效
图示
优缺点
优点:简单、直观,执行速度快,操作并行性好
缺点:微指令字长过长,n个微命令就要求微指令
的操作字段有n位,造成控存容量极大。
的操作字段有n位,造成控存容量极大。
字段直接编码方式
编码
将微指令的控制字段分成若干“段”,每段经译码后发出控制信号
微命令分段的原则
互斥性微命令分在同一段内,相容性微命令分在不同段内。
每个小段中包含的信息位不能太多,否则将增加译码线路的
复杂性和译码时间。
复杂性和译码时间。
一般每个小段还要留出一个状态,表示本字段不发出任何微
命令。因此,当某字段的长度为3位时,最多只能表示7个互
斥的微命令,通常用000表示不操作。
命令。因此,当某字段的长度为3位时,最多只能表示7个互
斥的微命令,通常用000表示不操作。
图示
例题
优缺点
优点:可以缩短微指令字长
缺点:要通过译码电路后再发出
微命令,因此比直接编码方式慢
微命令,因此比直接编码方式慢
字段间接编码方式
编码
一个字段的某些微命令需由另一个字段中某些微命令来解释,
由于不是靠字段直接译码发出的微命令,故称为字段间接编
码,又称为隐式编码。
由于不是靠字段直接译码发出的微命令,故称为字段间接编
码,又称为隐式编码。
图示
优缺点
优点:可进一步缩短微指令字长
缺点:削弱了微指令的并行控制能力,故通
常作为字段直接编码方式的一种辅助手段。
常作为字段直接编码方式的一种辅助手段。
微指令的地
址形成方式
址形成方式
微指令的下地址字段指出
微指令格式中设置一个下地址字段,由微指令的下地址字
段直接指出后继微指令的地址,这种方式又称为断定方式
段直接指出后继微指令的地址,这种方式又称为断定方式
根据机器指令的操作码形成
当机器指令取至指令寄存器后,微指令的地址由操作码经
微地址形成部件形成。
微地址形成部件形成。
增量计数器法
(CMAR)+1→CMAR
分支转移
转移方式:指明判别条件;转移地址:指明转移成功后的去向
通过测试网络
就是控制器结构图中顺序网络部件,了解即可
由硬件产生微程序入口地址
第一条微指令地址 由专门硬件产生(用
专门的硬件记录取指周期微程序首地址)
专门的硬件记录取指周期微程序首地址)
中断周期 由硬件产生中断周期微程序首
地址(用专门的硬件记录)
地址(用专门的硬件记录)
例题
总结
微指令格式
水平型微指令
每条微指令能定义多个可并行的微命令
垂直型微指令
每条微指令只能定义一个微命令,由微操作码指明
混合型微指令
在垂直型微指令的基础上加上一些简单的并行操作
水平型微指令
的编码方式
的编码方式
直接编码(直接控制)
控制码的每个bit对应一个微命令,微指令执行速度最快
字段直接编码
将互斥性的微命令分在同一个段内,相容的分在不同的段
每个段留出一个状态表示“不操作”
微指令操作码需要经过译码电路处理,因此执行速度更慢
字段间接编码
一个字段的微命令需要用另一个字段的微命令解释
可能需要多级译码电路处理,执行速度最慢
下一条微指令地
址的形成方式
址的形成方式
断定法(下地址法):根据当前执行的微指令下地址找到下一条微指令
计数器法:μPC+1顺序找到下一条微指令
根据指令操作码确定执行周期微程序首地址
由专门的硬件指明取指/中断周期的微程序首地址
微程序控制单元的设计
设计步骤
分析每个阶段的微操作序列
写出对应机器指令的微操作命令及节拍安排
写出每个周期所需要的微操作(参考硬布线)
节拍安排与硬布线控制器类似,但是需要考虑如何读出这3条微指令,以及如何转入
下一个机器周期
下一个机器周期
补充微程序控制器特有的微操作:
a.取指周期:
Ad(CMDR)→CMAR
OP(IR)→微地址形成部件→CMAR
b.执行周期:
Ad(CMDR)→CMAR
a.取指周期:
Ad(CMDR)→CMAR
OP(IR)→微地址形成部件→CMAR
b.执行周期:
Ad(CMDR)→CMAR
取指周期的第一条微指令地址由硬件自动给出
需要用微指令a的下地址找到下一条微指令
需要用微指令a的下地址找到下一条微指令
确定微指令格式
根据微操作个数决定采用何种编码方式,以确定微指令的操作控制字段的位数
根据CM中存储的微指令总数,确定微指令的顺序控制字段的位数
最后按操作控制字段位数和顺序控制字段位数就可确定微指令字长
编写微指令码点
根据操作控制字段每一位代表的微操作命令,编写每一条微指令的码点
微程序设计分类
硬布线与微程序的比较
高频考点
回顾
基本结构
微地址形成部件
微地址寄存器CMAR
控制存储器CM
微指令寄存器CMDR
基本概念
微命令与微操作
微指令与微周期
主存储器与控制存储器
程序与微程序
寄存器:MAR与CMAR、IR与CMDR
微指令的格式
水平型:并行操作
直接编码方式
字段直接编码方式
字段间接编码方式
垂直型:类似机器指令
微指令的地址形成方式
下地址字段指出:断定方式
根据机器指令的操作码形成
设计步骤
写出微操作命令及节拍安排
确定微指令格式
编写微指令码点
硬布线与微程序的比较
动态微程序设计和毫微程序设计
指令流水线
基本概念
性能指标
影响因素
分类及常见技术
多处理器的基本概念
SISD、SIMD、MIMD、
向量处理器的基本概念
向量处理器的基本概念
SISD(单指令流单数据流)
特性
各指令序列只能并发、不能并行。每条指令处理一两个数据
不是数据级并行技术
硬件组成
一个处理器+一个主存储器
若采用指令流水线,需设置多个功能部件,采用
多模块交叉存储器,例如低位交叉编址
多模块交叉存储器,例如低位交叉编址
图示
机组课程一直在学的就是SISD,每条指令可以处理一两个数据
SIMD(单指令流多数据流)
特性
各指令序列只能并发、不能并行,但每条指令可同时处理很多个具有相同特征的数据
是一种数据并行技术
硬件组成
一个指令控制部件(CU)+多个处理单元/执行单元(如
ALU)+多个局部存储器+一个主存储器
ALU)+多个局部存储器+一个主存储器
每个执行单元有各自的寄存器组、局部存储器、地址寄存器
不同执行单元执行同一条指令,处理不同的数据
图示
对结构类似的大量数据进行相同处理。一条指令处理很多个数据
MISD(多指令流单数据流)
多条指令并行执行,处理同一个数据。现实中不存在这种计算机
MIMD(多指令多数据流)
特性
各指令序列并行执行,分别处理多个不同的数据
是一种线程级并行、甚至是线程级以上(进程)并行技术
进一步分类
多处理器系统
特性
各处理器之间,可以通过LOAD/STORE指令,访
问同一个主存储器,可通过主存相互传送数据
问同一个主存储器,可通过主存相互传送数据
硬件组成
一台计算机内,包含多个处理器+一个主存储器
多个处理器共享单一的物理地址空间
图示
eg:Intel i5、i7处理器
多计算机系统
特性
各计算机之间,不能通过LOAD/STORE指令直接访问
对方的存储器,只能通过“消息传递”相互传送数据
对方的存储器,只能通过“消息传递”相互传送数据
硬件组成
由多态计算机组成,因此拥有多个处理器+多个主存储器
每台计算机拥有各自的私有存储器,物理地址空间相互独立
图示
eg:多台计算机组成的“分布式计算系统”
向量处理机(SIMD思想的进阶应用)
特性
一条指令的处理对象是“向量”
擅长对向量型数据并行计算、浮点数运算,常被用
于超级计算机中,处理科学研究中的巨大运算量
于超级计算机中,处理科学研究中的巨大运算量
硬件组成
多个处理单元,多组“向量寄存器”
主存储器应采用“多个端口同时读取”的交叉多模块存储器
主存储器大小限定了机器的解题规模,因此要有大容量的、集中式的主存储器
图示
eg:向量处理机的LOAD指令,可以将一个向量取到向量寄存器中;加法指令,可以实现两个向量相加
应用于:向量计算、大量浮点数计算,空气动力学、和物理学、巨型矩阵计算问题
很多超级计算机如中国的“银河”就是向量处理器
应用于:向量计算、大量浮点数计算,空气动力学、和物理学、巨型矩阵计算问题
很多超级计算机如中国的“银河”就是向量处理器
共享内存多处理器(Shared Memory
multiProcessor,SMP)的基本概念
multiProcessor,SMP)的基本概念
多个处理器共享一个主存储器
多个处理器共享单一的地址空间、都可以通过
LOAD、STORE指令访问共享的主存储器
多个处理器共享单一的地址空间、都可以通过
LOAD、STORE指令访问共享的主存储器
多个计算节点都有各自私有的主存储器
各计算节点的地址空间相互独立,不能通过Load
、STORE指令访问另一个计算机结点的主存储器
各计算节点的地址空间相互独立,不能通过Load
、STORE指令访问另一个计算机结点的主存储器
多核处理器(multi-
core)的基本概念
core)的基本概念
一个CPU芯片中包含多个处理器,即多个核(core),因此通常也称为片级多处理
器(Chip-LevelMultiProcessing,CMP)。意思是:一块芯片上集成了多个处理器
器(Chip-LevelMultiProcessing,CMP)。意思是:一块芯片上集成了多个处理器
所有核共享一个LLC(Last-Level Cache),并共享主存储器
硬件多线程
机器硬件示意图
不支持多线程的硬件,只有一组寄存器组,在线程切换时需要将这些寄存器的值存储到主存储器中
细粒度多线程
粗粒度多线程
同时多线程(SMT)
对比
三种线程之间的对比
6.系统总线
总线概述
总线概念与分类
定义
特点
特性
机械特性
尺寸、形状、管脚数、排列顺序
电气特性
传输方向和有效电平范围
功能特性
每根传输线的功能(地址、数据、控制)
时间特性
信号的时序关系
分类
按数据传输格式
串行总线
图示
数据一位一位传输
优缺点
优点:只需要一条传输线,成本低廉,广泛应用于长距离
传输;应用于计算机内部时,可以节省布线空间。
传输;应用于计算机内部时,可以节省布线空间。
缺点:在数据发送和接收的时候要进行拆卸和装配,要考
虑串行-并行转换的问题。
虑串行-并行转换的问题。
并行总线
图示
数据多位一起传输
优缺点
优点:总线的逻辑时许比较简单,电路实现起来比较容易
缺点:信号线数量多,占用更多的布线空间;远距离传输
成本高昂;由于工作频率较高时,并行的信号线之间会产
生严重干扰,对每条线等长的要求也越高,所以无法持续
提升工作频率
成本高昂;由于工作频率较高时,并行的信号线之间会产
生严重干扰,对每条线等长的要求也越高,所以无法持续
提升工作频率
两种传输格式的速度?
指标:总线带宽=总线工作频率×总线宽度(bit/s)
比较
工作频率相同时,串行总线传输速度
比并行总线慢
比并行总线慢
并行总线的工作频率无法持续提高,
而串行总线可以通过不断提高工作频
率来提高传输速度,超过并行总线。
而串行总线可以通过不断提高工作频
率来提高传输速度,超过并行总线。
按总线功能
(连接的部件)
(连接的部件)
片内总线
片内总线是芯片内部的总线
它是CPU芯片内部寄存器与寄存器之间、寄存器与ALU之间的公共连接线
系统总线
系统总线是计算机系统内各功能部件(CPU、主存、I/O接口)之间相互连接的总线
按系统总线传输信息内容不同,又可分为3类:数据总线、地址总线和控制总线
数据总线(双向)
地址总线(单向)
控制总线
图示
通信总线
通信总线是用于计算机系统之间或计算机系统与其他系统(如远程通信设备、测试
设备)之间信息传送的总线,通信总线也称为外部总线
设备)之间信息传送的总线,通信总线也称为外部总线
按时序控制方式
同步总线
异步总线
系统总线的结构
单总线结构
这里的并发指的是同一时刻只能有一组部件在总线上传输数据,更贴近并行的概念
双总线结构
三总线结构
效率低是因为同一时刻,只有一个总线在工作(疑点)
四总线结构
更接近于现代计算机的总线结构
总线的性能指标
1.总线的传输周期(总线周期)
一次总线操作所需的时间(包括申请阶段、
寻址阶段、传输阶段和结束阶段),通常
由若干个总线时钟周期构成。
寻址阶段、传输阶段和结束阶段),通常
由若干个总线时钟周期构成。
2.总线时钟周期
即机器的时钟周期。计算机有一个统一的
时钟,以控制整个计算机的各个部件,总
线也要受此时钟的控制
时钟,以控制整个计算机的各个部件,总
线也要受此时钟的控制
3.总线的工作频率
总线上各种操作的频率,为总线周期的倒数。
若总线周期=N个时钟周期,则总线的工作频
率=时钟频率/N。实际上指一秒内传送几次数据
若总线周期=N个时钟周期,则总线的工作频
率=时钟频率/N。实际上指一秒内传送几次数据
4.总线的时钟频率
即机器的时钟频率,为时钟周期的倒数。
若时钟周期为T,则时钟频率为1/T。
实际上指一秒内有多少个时钟周期。
若时钟周期为T,则时钟频率为1/T。
实际上指一秒内有多少个时钟周期。
5.总线宽度
又称为总线位宽,它是总线上同时能够传输的数据位数,
通常是指数据总线的根数,如32根称为32位(bit)总线
通常是指数据总线的根数,如32根称为32位(bit)总线
6.总线带宽
可理解为总线的数据传输率,即单位时间内总线上可传输
数据的位数,通常用每秒钟传送信息的字节数来衡量,单
位可用字节/秒(B/s)表示。
数据的位数,通常用每秒钟传送信息的字节数来衡量,单
位可用字节/秒(B/s)表示。
总线带宽=总线工作频率×总线宽度(bit/s)=总线工作频率×(总线宽度/8)(B/s)
=(bit/s)=(B/s)
=(bit/s)=(B/s)
注:总线带宽是指总线本身所能达到的最高传输速率。
在计算实际的有效数据传输率时,要用实际传输的数据量除以耗时。
在计算实际的有效数据传输率时,要用实际传输的数据量除以耗时。
7.总线复用
总线复用是指一种信号线在不同的时间传输不同的信息。可以
使用较少的线传输更多的信息,从而节省了空间和成本。
使用较少的线传输更多的信息,从而节省了空间和成本。
8.信号线数
地址总线、数据总线和控制总线3种线的线数的总和称为信号线数
例题
总线仲裁
基本概念
同一时刻只能有一个设备控制总线传输操作,可以有一个或多个设备从总线接收数据
对总线有无控
制对设备分类
制对设备分类
主设备:获得总线控制权的设备
从设备:被主设备访问的设备,只能响应从主设备
发来的各种总线命令
发来的各种总线命令
作用
总线作为一种共享设备,不可避免地会出现同一时刻
有多个主设备竞争总线控制权的问题
有多个主设备竞争总线控制权的问题
定义
多个主设备同时竞争主线控制权时,以某种方式选择一个主设备优先
获得总线控制权称为总线仲裁
获得总线控制权称为总线仲裁
分类
集中仲裁方式
工作流程
主设备发出请求信号
若多个主设备同时要使用总线,则由总线
控制器判优、仲裁逻辑按一定的优先等级
顺序确定哪个主设备能使用总线
控制器判优、仲裁逻辑按一定的优先等级
顺序确定哪个主设备能使用总线
获得总线使用权的主设备开始传送数据
分类
链式查询方式
需要总线的设备通过BR发出请求,总线控制器接收到后,通过BG发送允许信号,按顺序传送,到第一
个需要使用总线的主设备的时候,该设备获得总线控制权,并通过BS发送总线忙的信号,其他设备等待
个需要使用总线的主设备的时候,该设备获得总线控制权,并通过BS发送总线忙的信号,其他设备等待
计数器定时查询方式
如果计数器每次从“0”开始,那么等价于链式查询方式
独立请求方式
对比
“总线忙”信号的建立者是获得总线控制权的设备
分布仲裁方式
总线操作和定时
总线周期的
四个阶段
四个阶段
申请分配阶段:由需要使用总线的主模块(或主设备)提出申请,
经总线仲裁机构决定将下一传输周期的总线使用权授予某一申请
者。也可将此阶段细分为传输请求和总线仲裁两个阶段。
经总线仲裁机构决定将下一传输周期的总线使用权授予某一申请
者。也可将此阶段细分为传输请求和总线仲裁两个阶段。
寻址阶段:获得使用权的主模块通过总线发出本次要访问的从模块
的地址及有关命令,启动参与本次传输的从模块
的地址及有关命令,启动参与本次传输的从模块
传输阶段:主模块和从模块进行数据交换,可单向或双向进行数据传送
结束阶段:主模块的有关信息均从系统总线上撤除,让出总线使用权
定义
总线定时是指总线在双方交换数据的过程中需要时间上
配合关系的控制,这种控制称为总线定时,它的实质是
一种协议或规则
配合关系的控制,这种控制称为总线定时,它的实质是
一种协议或规则
分类
同步通信(同步定时方式)
工作方式
总线控制器采用一个统一的时钟信号来
协调发送和接收双方的传送定时关系
协调发送和接收双方的传送定时关系
图示
假设:CPU作为主设备,某个输入设备作为从设备
CPU在时刻的上升沿给出地址信息
在的上升沿给出读命令(低电平有效),与地址
信息相符合的输入设备按命令进行一系列的内部操作,
且必须在的上升沿来之前将CPU所需的数据送到数
据总线上。
信息相符合的输入设备按命令进行一系列的内部操作,
且必须在的上升沿来之前将CPU所需的数据送到数
据总线上。
CPU在时钟周期内,将数据线上的信息传送到其
内部寄存器中
内部寄存器中
CPU在的上升沿撤销读命令,输入设备不再向数据
总线上传送数据,撤销它对数据总线的驱动
总线上传送数据,撤销它对数据总线的驱动
特点
若干个时钟构成相等的时间间隔,每个间隔构成一个总线周期
在一个总线周期中,发送方和接收方可进行一次数据传送
因为采用统一的时钟,每个部件或设备发送或接收信息都
在固定的总线传送周期中,一个总线的传送周期结束,下
一个总线传送周期开始
在固定的总线传送周期中,一个总线的传送周期结束,下
一个总线传送周期开始
优缺点
优点:传送速度快,具有较高的传输速率:总线控制逻辑简单
缺点:主从设备属于强制性同步;不能及时进行数据通信的
有效性检验,可靠性较差。
有效性检验,可靠性较差。
总结
同步通信适用于总线长度较短及总线所接部件的存取时间比较接近的系统
异步通信(异步定时方式)
工作方式
异步定时方式中,没有统一的时钟,也没有固定的时间间隔,完全依靠传送双方
相互制约的“握手”信号来实现定时控制
相互制约的“握手”信号来实现定时控制
主设备提出交换信息的“请求”信号,经接口传送到从设备;从设备接到主设备
的请求后,通过接口向主设备发出“回答”信号。
的请求后,通过接口向主设备发出“回答”信号。
工作方式分类
不互锁方式
图示
请求:地址信息、读命令
回答:要读出的数据
回答:要读出的数据
解释
速度最快,可靠性最差
半互锁方式
图示
请求:地址信息、读命令
回答:要读出的数据
回答:要读出的数据
解释
相对可靠,速度相对可以
全互锁方式
图示
请求:地址信息、读命令
回答:要读出的数据
回答:要读出的数据
解释
最可靠,速度最慢
优缺点
优点:总线周期长度可变,能保证两个工作速度相差很大的部件或
设备之间可靠地进行信息交换,自动适应时间的配合
设备之间可靠地进行信息交换,自动适应时间的配合
缺点:比同步控制方式稍复杂一些,速度比同步定时方式慢
半同步通信
分离式通信
总线标准
系统总线
ISA(并行总线,1984提出)
EISA(并行总线,1988年提出,在ISA基础上增加位宽)
FBS、QPI(串行总线,Intel提出的两种系统总线,用于
连接CPU与北桥芯片,QPI又称为multi-FSB)
连接CPU与北桥芯片,QPI又称为multi-FSB)
局部总线
VESA(并行总线,1991年提出,用于传输图像)
PCI(并行总线,1992年提出,速度和VESA差不多,但是
总线工作频率可以独立于CPU主频,用于连接显卡、声卡、
网卡等,支持即插即用)
总线工作频率可以独立于CPU主频,用于连接显卡、声卡、
网卡等,支持即插即用)
APG(并行总线,1996年提出,从PCI2.1基础上扩展而来,
用于连接显存与主存
用于连接显存与主存
PCI-E(串行总线,2001年提出,工作频率很高,支持全双工)
设备总线(通信总线)
连接各种外设
RS-232C(串行总线,1970年提出,用于极慢速的
电传打印机)
电传打印机)
SCSI(并行总线,1986年提出,用于连接硬盘、打印
机、扫描仪等)
机、扫描仪等)
PCMCIA(并行总线,1991年提出,用于连接外部存储
卡,目的是增强个人电脑的信息互换)
卡,目的是增强个人电脑的信息互换)
USB(串行总线,1996年提出,采用差模信号,每次传
递1bit,工作频率可以很高)
递1bit,工作频率可以很高)
连接硬盘
IDE(并行总线,1986年提出,又称ATA总线,Parallel
ATA,主要用于连接硬盘、光驱等)
ATA,主要用于连接硬盘、光驱等)
SATA(串行总线,2001年提出,Serial ATA,主要用于
连接硬盘、光驱等)
连接硬盘、光驱等)
速度对比
为何串行总线
取代并行总线
取代并行总线
并行总线:
串行总线
7.输入/输出系统
I/O系统基本概念
基本概念
现代计算机结构
I/O设备在计算机组成部分中的位置
基本组成
IO硬件
输入设备
输出设备
外存设备
I/O接口(I/O控制器)
作用
又称I/O控制器(I/O Controller)、设备控制器,
负责协调主机与外部设备之间的数据传输
负责协调主机与外部设备之间的数据传输
图示
I/O控制器多种多样,也会指定相应的标准,如:用于控制USB设备的IO接口、
用于控制SATA3.0硬盘的IO接口等
用于控制SATA3.0硬盘的IO接口等
IO软件
IO指令
CPU指令的一部分
操作码:识别I/O指令
命令码:做什么操作
设备码:对哪个设备进行操作
操作码:识别I/O指令
命令码:做什么操作
设备码:对哪个设备进行操作
注:I/O指令与普通指令格式略有不同,操作
码指明了CPU要对IO接口做什么,命令码指明
了IO接口要对设备做什么
码指明了CPU要对IO接口做什么,命令码指明
了IO接口要对设备做什么
通道指令
通道程序是提前编制好放在主存中的
在含有通道的计算机中,CPU执行I/O指令对
通道发出命令,由通道执行一些列通道指令,
代替CPU对I/O设备进行管理
通道发出命令,由通道执行一些列通道指令,
代替CPU对I/O设备进行管理
I/O控制方式
程序查询方式
图示
单总线结构
控制方式
CPU不断轮询检查I/O控制器中的“状态寄存器”,检测到状态为“已完成”之后,再从
数据寄存器取出输入数据
数据寄存器取出输入数据
程序中断方式
设备准备数据时,CPU继续工作。设备准备好之后向CPU发出中断请求,CPU在指令周期的
末位检查中断并做出中断响应(执行中断处理程序)
末位检查中断并做出中断响应(执行中断处理程序)
DMA方式
图示
注:DMA接口,即DMA控制器,也是一种特殊的I/O控制器
控制方式
主存与高速I/O设备之间有一条直接数据通路(DMA总线)。CPU向DMA接口
发射出“读/写”命令,并指明主存地址、磁盘地址、读写数据量等参数
发射出“读/写”命令,并指明主存地址、磁盘地址、读写数据量等参数
DMA控制器自动控制磁盘与主存的数据读写,每完成一整块数据读写(如1KB
为一整块),才向CPU发出一次中断请求
为一整块),才向CPU发出一次中断请求
通道方式
外部设备
输入设备
用于向计算机系统输入命令和文本、数据等信息的部件。
输出设备
用于将计算机系统中的信息输出到计算机外部进行显示、交换等的部件
显示器
分类
阴极射线管(CRT)
字符、图形、图像
光栅扫描、随机扫描
液晶(LCD)
发光二极管(LED)
参数
显示存储器(VRAM)
VRAM容量=分辨率×灰度级位数
VRAM带宽=分辨率×灰度级位数×帧频
灰度级
是指黑白显示器中所显示的像素点的亮暗差别,在彩色显示器
中则表现为颜色的不同,灰度级越多,图像层次越清楚逼真,
典型的有8位(256级)、16位等。n位可以表示种不同的
亮度或颜色
中则表现为颜色的不同,灰度级越多,图像层次越清楚逼真,
典型的有8位(256级)、16位等。n位可以表示种不同的
亮度或颜色
打印机
击打式和非击打式
串行和行式
针式、喷墨式和激光
外存储器
是指除计算机内存及CPU缓存等以外的存储器
I/O接口
结构和作用
数据缓冲寄存器(DBR)
暂存即将输入输出的数据
主机和外设的速度匹配
状态/控制寄存器
命令字:CPU对设备发出的具体命令
状态字:设备的状态信息,供CPU检查
串-并转换机构
数据格式的转换
I/O控制逻辑
根据命令字向设备发出控制信号
地址译码逻辑
将地址信号映射到指定I/O端口
I/O端口
指IO控制器中可被CPU访问的寄存器
统一编制:IO端口和主存地址空间统一,用访存指令访问IO端口
独立编制:IO端口地址与主存地址相互独立,用IO指令访问IO端口
分类
并行接口、串行接口;程序查询接口、中断接口、DMA接口;可编程接口、不可编程接口
0 条评论
下一页