yqw还是依旧开口脆
基本概念
层次结构
共分为7个层次,第0级和第1级由硬件实现,第2级至第6级由软件实现,称为虚拟计算机。
从科学领域来划分:
第0级和第1级属于“计算机组成与系统结构”;
第2级至第5级是系统软件;
第6级是应用软件。
它们之间有交叉,如第3级必须依赖第4级和第5级来实现。
第6级:应用程序 | 应用软件 |
第5级:高级语言 | 系统软件 |
第4级:汇编语言 | 系统软件 |
第3级:操作系统 | 系统软件 |
第2级:机器语言 | 软硬件分界 |
第1级:微程序 | 硬件 |
第0级:硬联逻辑 | 硬件 |
透明性
本来存在的事物或属性,从某种角度看似乎不存在。
计算机系统的分类
按处理机性能分类:
按大小、用途、数据类型、处理机个数和种数、所用的器件。
佛林分类法
按照指令流和数据流的多倍特征进行分类,
用指令流:机器执行的指令序列;
数据流:由指令流调用的数据序列;
多倍性(multiplicity):在系统性能瓶颈部件上同时处于同一执行阶段的指令或数据的最大可能个数。
分成 4 类:
单指令流单数据流SISD (Single Instruction Single Datastream)
单指令流多数据流SIMD Single Instruction Multiple Datastream)
多指令流单数据流MISD(Multiple Instruction Single Datastream)
多指令流多数据流MIMD(Multiple Instruction Multiple Datastream)
冯泽云分类法
用最大并行度计算机系统进行分类
单位时间内能处理的最大二进制位数
同时处理的字宽为$n$,位宽$m$,则
最大并行度定义为:$P_m=m * n$
平均并行度:假使每个时钟周期$t_i$内能同时处理的二进位$B_i$,则n个时钟周期平均并行度为:
$$
P_n = \frac {\sum_{i=1}^{n} B_i * t_i}{n}
$$
表示方法:处理机名$(m,n)$
汉德勒分类法
程序级$k$:程序控制部件(PCU)的个数。
操作级$d$:算术逻辑部件(ALU)或处理部件(PU)的个数。
逻辑级$w$:每个算术逻辑部件包含的逻辑线路(ELC)的套数。
表示方法:
$t ( 系统型号 ) = ( k,d,w )$
对于流水线来说,$t(系统型号) = (k * {k}’ , d * {d}’ , w * {w}’ )$
Cray1有1个CPU,12个相当于ALU或PE的处理部件,最多8级流水线,字长为64位,可以实现$1-14$位流水线,可以表示为:t(Cray1)=(1 , 12×8 , 64(1-14))
。
Amdahl定律
$$
可改进部分的比例: Fe=\frac{可改进部分的执行时间}{改进前整个任务的执行时间}
$$
$$
改进部分的加速比: Se=\frac{改进前改进部分的执行时间}{改进后改进部分的执行时间}
$$
改进后整个任务的执行速度:$T_n =T_0 * (1-Fe+\frac{Fe}{Se}) $
改进后整个任务的加速比:$S_n = \frac{T_0}{T_n} = \frac{1}{(1-Fe)+\frac{Fe}{Se}}$
改进性能的主要途径
面向目标代码改进
根据计算结果改进(硬件乘除)、据统计数据改进指令功能(有目的改进)、增加运算型指令的功能(函数运算指令)。
面向高级语言和编译程序改进
增强对高级语言和便宜程序支持的指令功能花更少的成本有效率办事。
面向操作系统改进
系统结构设计要规整,消除例外情况。比如有$A-B$,就要有$B-A$,寄存器量的设置……
计算机系统设计方法
由上向下:适合专用计算机的设计,价格要求高
由下向上:早期计算机设计,容易使软硬件的脱节
中间开始:软硬件同时设计
计算机系统的评价标准
时钟频率
运行速度与Cache、内存大小、IO、程序等均有关。
指令执行速度(算数平均)
MIPS(百万次每秒), GIPS, TIPS
最后求出来要带单位!写成$x \ MIPS$或者写$x*10^6$
$$
MIPS = \frac{Fz}{CPI} = IPC * Fz
$$
$Fz$为处理机工作主频
$CPI$为每条指令所需的平均时钟周期数
$IPC$为每个时钟周期平均执行的指令条数(流水线)
等效指令速度(加权平均):吉普森(Gibson)法
等效指令执行时间$T = \sum_{i=1}^{n} {Time}_i * {Weight}_i$
等效指令速度$MIPS = \frac{1}{\sum_{i=1}^{n} {Time}_i * {Weight}_i}$
等效CPI $CPI = \sum_{i=1}^{n} {CPI}_i * {Weight}_i$
Gibson法:(一般)加减法50%,乘法15%,除法5%,程序控制15%,其它15%。
冯·诺依曼结构
特点
存储程序、运算器为中心、集成控制
将指令放到存储器中,然后执行
变与不变
不变的:存储程序。改变的:存储器为中心,总线结构,分散控制
软件的可移植性
采用系列机
指有相同系统结构的机器,这就涉及到兼容性问题:向后兼容;向前兼容; 向上兼容; 向下兼容。
对于设计:向后必须兼容,向上兼容尽量满足,剩下不做要求。
采用模拟与仿真
模拟:在一台现有的计算机上实现另一台计算机的指令系统
仿真:用微程序直接解释执行另一种机器指令系统
采用统一高级语言方法
课后习题
1.8
从机器(汇编)语言程序员看,以下哪些是透明的?
指令地址寄存器;指令缓冲器;时标发生器;条件寄存器;乘法器;主存地址寄存器;磁盘外设;先行进位链;移位器;通用寄存器;中断字寄存器。
指令缓冲器,时标发生器,乘法器,主存地址寄存器,先行进位链,移位器
1.9
哪些对系统程序员是透明的?哪些对应用程序员是透明的?
系列机各档不同的数据通路宽度;虚拟存储器;Cache存储器;程序状态字;“启动I/O”指令;“执行”指令;指令缓冲寄存器。
对系统程序员透明的有:虚拟存储器;Cache存储器;程序状态字;
对应用程序员透明的有:系列机各档不同的数据通路宽度;“启动I/O”指令;“执行”指令;指令缓冲寄存器。
系列机各档不同数据通路宽度、Cache存储器、指令缓冲寄存器属计算机组成,对系统程序员和应用程序员都是透明的。虚拟存储器、程序状态字、“启动I/O”指令,对系统程序员是不透明的,而对应用程序员却是透明的。
“执行”指令则对系统程序员和应用程序员都是不透明的。
1.11
想在系列机中发展一种新型号机器,你认为下列哪些设想是可以考虑的,哪些则不行的?为什么?
(1)新增加字符数据类型和若干条字符处理指令,以支持事务处理程序的编译。
(2)为增强中断处理功能,将中断分级由原来的4级增加到5级,并重新调整中断响应的优先次序。
(3)在CPU和主存之间增设Cache存储器,以克服因主存访问速率过低而造成的系统性能瓶颈。
(4)为解决计算误差较大,将机器中浮点数的下溢处理方法由原来的恒置“1”法,改为用ROM存取下溢处理结果的查表舍入法。
(5)为增加寻址灵活性和减少平均指令字长,将原等长操作码指令改为有3类不同码长的扩展操作码;将源操作数寻址方式由操作码指明改成如VAX-11那种设寻址方式位字段指明。
(6)将CPU与主存间的数据通路宽度由16位扩展成32位,以加快主机内部信息的传送。
(7)为减少公用总路线的使用冲突,将单总线改为双总线。
(8)把原0号通用寄存器改作堆栈指示器。
答: (2)、(5)、(8)不可以,其它都可以。
对于(2)对系列机可以增加新功能,但是不能改变原来的功能。
对于(5)改变了指令的格式和功能
对于(8)导致0号寄存器无法使用
1.17
假设高速缓存Cache 工作速度为主存的5倍,且Cache被访问命中的概率为90%,则采用Cache后,能使整个存储系统获得多高的加速比?
$Fe = 0.9\ , \ Se=5$ 所以: $S_n = \frac{1}{1-Fe+\frac{Fe}{Se}} = \frac{1}{1-0.9+\frac{0.9}{5}} = \frac{25}{7}$
1.19
用一台40MHz处理机执行标准测试程序,它含的混合指令数和相应所需的时钟周期数如下:
指令类型 指令数 时钟周期数
整数运算 45000 1
数据传送 32000 2
浮点 15000 2
控制传送 8000 2
求有效CPI、MIPS速率和程序的执行时间。
$IC = \sum_{i=1}^{4}I_i = 45000+32000+15000+8000=10^5$
$有效CPI = \frac{\sum_{i=1}^{4}CPI_i \times I_i}{IC} = 1.55$
$MIPS = \frac{40}{1.55} = 35.81MIPS$
$T_{有效} = \frac{IC}{MIPS \times 10^6} = 0.003875\ s$
1.21
假设在一台$40MHz$的处理及上运行$200000$条指令的目标代码,程序主要由四种指令组成。根据程序跟踪实验结果,一直指令混合比和每种指令所需的指令数如下:
指令类型 | $ CPI $ | 指令混合比 |
---|---|---|
算数和逻辑 | 1 | 60% |
高速缓存命中的加载/存储 | 2 | 18% |
转移 | 4 | 12% |
告诉缓存确实的存储器访问 | 8 | 10% |
平均$CPI = \sum_{i=1}^{4} CPI_i \times 指令混合比 = 2.24$
$MIPS = \frac{40}{2.24} = 17.86 \ MIPS$
1.23
根据下面计算算数平均、几何平均、调和平均
程序名 | 速率($MFLOPS$) |
---|---|
$GCC$ | $10.7$ |
$Espress0$ | $8.9$ |
$Spice2g6$ | $8.3$ |
$DODUC$ | $5.0 $ |
$NASA7$ | $8.7 $ |
$Li$ | $9.0$ |
$Eqntott$ | $9.7$ |
$Matrix300$ | $11.1$ |
$FPPPP$ | $7.8$ |
$TOMCATV$ | $5.6$ |
算数平均:$A_m = \frac{1}{n} * \sum_{i=1}^{n} R_i = 8.48 \ MFLOPS$
几何平均:$G_m = \sqrt[n]{\prod_{i=1}^{n} R_i} = 8.247 \ MFLOPS$
调和平均:$H_m = \frac{n}{\sum_{i=1}^{n} \frac{1}{R_i}} = 7.985 \ MFLOPS$
指令系统
数据表示
数据表示是指计算机硬件能够直接认识,可以被指令系统直接调用的那些数据类型。
数据类型
文件、图、表、树、链表、栈、向量、队列、阵列、串、实数、整数、布尔数、字符等。
用变址寻址方式来支持向量数据表示,用字节编址支持字符串数据表示
普通需要支持向量运算,则在设计寻址方式时,一定要设置变址和自动变址寻址方式。
浮点数据
$$
N = m \times r_m^e
$$
两个数值
尾数$m$:数制(小数或整数)和码制(原码或补码)。
阶码$e$: 整码,移码(偏码、增码、余码)或补码。(移码就是补码的符号位取反)
两个基值
$r_m$:尾数的基值,二进制,八进制…
$r_e$:阶码的基值,一般为$2$。
两个字长
长度和物理位置,均不包含符号位
尾数的长度$p$:尾数部分按照基值计算的长度,比如说$10_{(10)} = 1010_{(2)}$,$p$分别为$2$和$4$
阶码长度$q$ : 阶码部分的二进制位数
阶码
阶码就是补码的符号位取反
表数范围
尾数用原码、纯小数时规格化浮点数的表数范围
表数范围 | 规格化尾数 | 阶码 | 规格化浮点数 |
---|---|---|---|
$N_{max}$最大正数 | $1 - r_m^{-p}$ | $r_e^q-1$ | $(1-r_m^{-p})\times r_m^{r_e^{q}-1}$ |
$N_{min}$最小正数 | $r_m^{-1}$ | \ | $r_m^{-1}\times r_m^{-r_e^q}$ |
$-N_{max}$最大负数 | $-r_m^{-1}$ | \ | $-r_m^{-1}\times r_m^{-r_e^q}$ |
$-N_{min}$最小负数 | $-(1-r_m^{-p})$ | $-r_e^q$ | $-(1-r_m^{-p}) \times r_m^{r_e^q-1}$ |
尾数用补码、纯小数时规格化浮点数的表数范围
表数范围 | 规格化尾数 | 阶码 | 规格化浮点数 |
---|---|---|---|
$N_{max}$最大正数 | $1 - r_m^{-p}$ | $r_e^q-1$ | $(1-r_m^{-p})\times r_m^{r_e^{q}-1}$ |
$N_{min}$最小正数 | $r_m^{-1}$ | \ | $r_m^{-1}\times r_m^{-r_e^q}$ |
$-N_{max}$最大负数 | $-(r_m^{-1}+r_m^{-p})$ | \ | $-(r_m^{-1}+r_m^{-p})\times r_m^{-r_e^q}$ |
$-N_{min}$最小负数 | $-1$ | $-r_e^q$ | $-r_m^{r_e^q-1}$ |
IEEE754浮点数标准
32位如下:
符号$S$ | 阶码$e$ | 尾数数值$m$ |
---|---|---|
$1$位 | $8$位 | $23$位 |
阶码用移码-127表示,即阶码的0-255分别表示阶码的真值为-127~128。尾数用原码、小数,1位符号位、23位小数和1位隐藏位的整数共25位表示。尾数和阶码的基值都是2。64位双精度浮点数,阶码用11位移移码表示
浮点数的误差
产生误差的根本原因是浮点数的不连续性。
误差产生的直接原因有两个:
(1)两个浮点数都在浮点集内,而运算结果却可能不在这个浮点集内。
(2)数据从十进制转化为2、4、8、16进制,产生误差。
浮点数的精度:$\delta _{(r_m,p)} = \frac{1}{2} \times r_m ^{-(p-1)} $
浮点数的表数效率
$\eta (r_m) = \frac{r_m-1}{r_m}$,$r_m$为尾数基值。
$\eta = \frac{可表示的规格化浮点数个数}{全部浮点数个数}$
浮点数格式设计
在字长确定的情况下,如何选择尾数基值$r_m$,使表数范围最大、表数精度和表数效率最高。
结论1:在字长和表数范围一定时,尾数基值$r_m$取2或4,浮点数具有最高的表精度。
结论2:在字长和表数精度一定时,尾数基值$r_m$取2或4,浮点数具有最大的表示数范围。
推论:在字长确定后,尾数基值$r_m$取2或4,浮点数具有最大的表数范围和最高表数精度。
当$r_m=2$时,规格化浮点数可以采用隐藏位方法表示,如果尾数用原码表示,最高位一定为1;如果尾数补码表示,最高位一定与符号位相反,这时,表数效率为100%。
尾数:多数机器用原码、小数表示
采用原码表示:加减法比补码表示复杂,乘除法比补码简单,而且非常直观。采用小数表示能简化运算,特别是乘法和除法运算。
阶码:一般机器用整数、移码表示
采用移码表示主要原因是:浮点0与机器0一致。阶码进行加减运算时,移码的加减法运算要比补码复杂。
基值:尾数的基值:$r_m=2$ 阶码的基值: $r_e=2$
采用隐藏位表示方式能够使规格化浮点数的表数的效率达到100%(当$r_m=2$时)
舍入方法
方法1:恒舍法 又称截断法、必舍法等
方法2:恒置法 又称恒置r/2法、冯诺依曼法。规则:把有效字长的最低一位置成r/2
方法3:下舍上入法 又称四舍五入法、0舍1入法。
方法4:$R^*$舍入法 只有少数巨型机采用。
方法5:查表法 $ROM$舍入法,$PLA$舍入法等。
警戒位
在对阶时多设置一位来避免误差,一般设置一位警戒位就好。
寻址技术
编址方式
常用的编址单位:字编址、字节编址、位编址、块编址等。
大端和小端问题:从左边开始编址就是大端(0 1 2 3…),从右边开始编址就是小端(…3 2 1 0)。
三个零地址空间:通用寄存器、主存储器、输入输出设备独立编址。
两个零地址空间:通用寄存器,主存储与输入输出设备统一遍址。
一个零地址空间:最低端是通用寄存器,最高端是输入输出设备,中间为主存储器。
隐含编址方式:堆栈、Cache等。
并行存储器的编址技术
高位交叉编址:主要用来扩大存储器容量。
低位交叉编址:主要是提高存储器速度。
输入输出设备编址
一台设备一个地址:通过指令来区分地址,地址内部区分地址。
一台设备两个地址:数据寄存器、状态或控制寄存器。
多个编址寄存器共用同一个地址的方法:依靠地址内部区分,使用于被编址的寄存器的长度比较短。
“下跟法”隐含编址方式:必须按顺序读写寄存器。
一台设备多个地址:增加编程的困难。