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