温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,汇文网负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
网站客服:3074922707
2013
考研
计算机
强化
组成
原理
讲义
《计算机组成原理》
考查目标
计算机学科专业基础综合考试涵盖数据机构、计算机组成原理、操作系统和计算机网络等学科专业基础课程。要求考生比较系统地掌握上述专业基础课程的概念、基本原理和方法,能够运用所学的基本原理和基本方法分析、判断和解决有关理论问题和实际问题。
考试形式和试卷结构
一、 试卷满分及考试时间
本试卷满分为150分,考试时间为180分钟
二、 答题方式
答题方式为闭卷、笔试
三、 试卷内容结构
数据结构 45分
计算机组成原理 45分
操作系统 35分
计算机网络 25分
四、 试卷题型结构
单项选择题 80分(40小题,每小题2分)
综合应用题 70分
计算机组成原理
【考查目标】
1. 理解单处理器计算机系统中各部件的内部工作原理、组成结构以及相互连接方式,具有完整的计算机系统的整机概念。
2. 理解计算机系统层次化结构概念,熟悉硬件与软件之间的界面,掌握指令集体系结构的基本知识和基本实现方法。
3. 能够运用计算机组成的基本原理和基本方法,对有关计算机硬件系统中的理论和实际问题进行计算、分析,并能对一些基本部件进行简单设计。
一、 计算机系统概述
(一) 计算机发展历程
第一台电子计算机ENIAC(Electronic Numerical Integrator And Computer)诞生于1946年的美国宾夕法尼亚大学。ENIAC用了18000电子管、1500继电器、重30吨、占地170m3、耗电140kw、每秒计算5000次加法。冯•诺依曼(VanNeumann)首次提出存储程序的概念,将数据和程序一起放在存储器中,使得编程更加方便。50多年来,虽然对冯•诺依曼机进行了很多改革,但结构变化不大,仍然称为冯•诺依曼机。
一般把计算机的发展分为四个阶段:
第一代(1946-50‘s后期):电子管计算机时代;
第二代(50‘s中期-60’s后期):晶体管计算机时代;
第三代(60‘s中期-70’s前期):集成电路计算机时代;
第四代(70‘s初-):大规模集成电路计算机时代。
(二) 计算机系统层次结构
1. 计算机硬件的基本组成
计算机硬件主要指计算机的实体部分,通常有运算器、控制器、存储器、输入和输出五部分。
CPU是指将运算器和控制器集成到一个电路芯片中。
2. 计算机软件的分类
计算机软件按照面向对象的不同可分两类:
系统软件:用于管理整个计算机系统,合理分配系统资源,确保计算机正常高效地运行,这类软件面向系统。
应用软件:是面向用户根据用户的特殊要求编制的应用程序,这类软件通常实现用户的某类要求。
3. 计算机的工作过程
(1)计算机的工作过程就是执行指令的过程
指令由操作码和操作数组成:
操作码
地址码
操作码指明本指令完成的操作
地址码指明本指令的操作对象
(2)指令的存储
指令按照存储器的地址顺序连续的存放在存储器中。
(3)指令的读取
为了纪录程序的执行过程,需要一个记录读取指令地址的寄存器,称为指令地址寄存器,或者程序计数器。指令的读取就可以根据程序计数器所指出的指令地址来决定读取的指令,由于指令通常按照地址增加的顺序存放,故此,每次读取一条指令之后,程序计数器加一就为读取下一条指令做好准备。
(4)执行指令的过程
在控制器的控制下,完成以下三个阶段任务:
1)取指令阶段
按照程序计数器取出指令,程序计数器加一
2)指令译码阶段
分析操作码,决定操作内容,并准备操作数
3)指令执行阶段
执行操作码所指定内容
(三) 计算机性能指标
1. 吞吐量、响应时间
(1) 吞吐量:单位时间内的数据输出数量。
(2) 响应时间:从事件开始到事件结束的时间,也称执行时间。
2. CPU时钟周期、主频、CPI、CPU执行时间
(1) CPU时钟周期:机器主频的倒数,Tc
(2)主频:CPU工作主时钟的频率,机器主频Rc
(3)CPI:执行一条指令所需要的平均时钟周期
(4)CPU执行时间:
TCPU=In×CPI×TC
In执行程序中指令的总数
CPI执行每条指令所需的平均时钟周期数
TC时钟周期时间的长度
3. MIPS、MFLOPS
(1)MIPS:
MIPS(Million Instructions Per Second)
MIPS = In/(Te×106)
= In/(In×CPI×Tc×106)
= Rc/(CPI×106)
Te:执行该程序的总时间
In:执行该程序的总指令数
Rc:时钟周期Tc的到数
MIPS只适合评价标量机,不适合评价向量机。标量机执行一条指令,得到一个运行结果。而向量机执行一条指令,可以得到多个运算结果。
(2) MFLOPS:
MFLOPS(Million Floating Point Operations Per Second)
MFLOPS=Ifn/(Te×106)
Ifn:程序中浮点数的运算次数
MFLOPS测量单位比较适合于衡量向量机的性能。一般而言,同一程序运行在不同的计算机上时往往会执行不同数量的指令数,但所执行的浮点数个数常常是相同的。
二、 数据的表示和运算
(一) 数制与编码
1. 进位计数制及其相互转换
1)进位计数制
进位计数制是指按照进位制的方法表示数,不同的数制均涉及两个基本概念:基数和权。
基数:进位计数制中所拥有数字的个数。
权:每位数字的值等于数字乘以所在位数的相关常数,这个常数就是权。
任意一个R进制数X,设整数部分为n位,小数部分为m位,则X可表示为:
X=an-1rn-1 + an-2rn-2 + ┅ + a0r0 + a-1r-1 + a-2r-2 + ┅ + a-mr-m
(X)r =
2)不同数制间的数据转换
(1)二、八、十六进制数转换成十进制数
利用上面讲到的公式:
(N)2=∑Di•2i 、(N)8=∑Di•8i、 (N)16=∑Di•16i、进行计算。
(2)十进制数转换成二进制数
通常要对一个数的整数部分和小数部分分别进行处理,各自得出结果后再合并。
u 对整数部分,一般采用除2取余数法,其规则如下:
将十进制数除以2,所得余数(0或1)即为对应二进制数最低位的值。然后对上次所得商除以2,所得余数即为二进制数次低位的值,如此进行下去,直到商等于0为止,最后得的余数是所求二进制数最高位的值。
u 对小数部分,一般用乘2取整数法,其规则如下:
将十进制数乘以2,所得乘积的整数部分即为对应二进制小数最高位的值,然后对所余数的小数部分部分乘以2,所得乘积的整数部分为次高位的值,如此进行下去,直到乘积的小数部分为0,或结果已满足所需精度要求为止。
(3)二进制数、八进制数和十六进制数之间的转换
八进制数和十六进制数是从二进制数演变而来的:
由3位二进制数组成1位八进制数;
由4位二进制数组成1位十六进制数。
对于一个兼有整数和小数部分的数以小数点为界,小数点前后的数分别分组进行处理,不足的位数用0补足。
对整数部分将0补在数的左侧,对小数部分将0补在数的右侧。这样数值不会发生差错。
2. 真值和机器数
真值:数据的数值通常以正(+)负(-)号后跟绝对值来表示,称之为“真值”。
机器数:在计算机中正负号也需要数字化,一般用0表示正号,1表示负号。把符号数字化的数成为机器数。
3. BCD码
在计算机中采用4位二进制码对每个十进制数位进行编码。4位二进制码有16种不同的组合,从中选出10种来表示十进制数位的0~9,用0000,0001,…,1001分别表示0,1,…,9,每个数位内部满足二进制规则,而数位之间满足十进制规则,故称这种编码为“以二进制编码的十进制(binary coded decima1,简称BCD)码”。
在计算机内部实现BCD码算术运算,要对运算结果进行修正,对加法运算的修正规则是:
如果两个一位BCD码相加之和小于或等于(1001)2,即(9)10,不需要修正;
如相加之和大于或等于(1010)2,或者产生进位,要进行加6修正,如果有进位,要向高位进位。
4. 字符与字符串
在计算机中要对字符进行识别和处理,必须通过编码的方法,按照一定的规则将字符用一组二进制数编码表示。字符的编码方式有多种,常见的编码有ASCII码、EBCDIC码等。
1)ASCII码
ASCII码用7位二进制表示一个字符,总共128个字符元素,包括10个十进制数字(0-9)、52个英文字母(A-Z和a-z)、34专用符号和32控制符号。
2)EBCDIC码为Extended Binary Coded Decimal Interchange Code的简称,它采用8位来表示一个字符。
3)字符串的存放
向量存储法:字符串存储时,字符串中的所有元素在物理上是邻接的。
串表存储法:字符串的每个字符代码后面设置一个链接字,用于指出下一个字符的存储单元的地址。
5. 校验码
数据校验码是一种常用的带有发现某些错误或自动改错能力的数据编码方法。其实现原理,是加进一些冗余码,使合法数据编码出现某些错误时,就成为非法编码。
这样,可以通过检测编码的合法性来达到发现错误的目的。合理地安排非法编码数量和编码规则,可以提高发现错误的能力,或达到自动改正错误的目的。
码距: 码距根据任意两个合法码之间至少有几个二进制位不相同而确定的,仅有一位不同,称其码距为1。
1)奇偶校验码
它的实现原理,是使码距由1增加到2。若编码中有1位二进制数出错了,即由1变成0,或者由0变成1。这样出错的编码就成为非法编码,就可以知道出现了错误。在原有的编码之上再增加一位校验位,原编码n位,形成新的编码为n+1 位。增加的方法有2种:
奇校验:增加位的0或1要保证整个编码中1的个数为奇数个。
偶校验:增加位的0或1要保证整个编码中1的个数为偶数个。
2)海明校验码
它的实现原理,是在数据中加入几个校验位,并把数据的每一个二进制位分配在几个奇偶校验组中。当某一位出错就会引起有关的几个校验组的值发生变化,这不但可以发现出错,还能指出是哪一位出错,为自动纠错提供了依据。
假设校验位的个数为r,则它能表示2r个信息,用其中的一个信息指出“没有错误”,其余2r-1个信息指出错误发生在哪一位。然而错误也可能发生在校验位,因此只有
k=2r-1-r个信息能用于纠正被传送数据的位数,也就是说要满足关系:
2r>=k+r+1
3)CRC校验码
CRC校验码一般是指k位信息之后拼接r位校验码。关键问题是如何从k位信息方便地得到r位校验码,以如何从位k+r信息码判断是否出错。
将带编码的k位有效信息位组表达为多项式:
M(x)=Ck-1xk-1+ Ck-2xk-2 + ┅ + Cixi + C1x + C0
式Ci中为0或1.
若将信息位左移r位,则可表示为多项式M(x).xr。这样就可以空出r位,以便拼接r位校验位。
CRC码是用多项式M(x).xr除以生成多项式G(x)所得的余数作为校验码的。为了得到r位余数,G(x)必须是r+1位。
设所得的余数表达式为R(x),商为Q(x)。将余数拼接在信息位组左移r位空出的r位上,就构成了CRC码,这个码的可用多项式表达为:
M(x)·xr+R(x)=[Q(x)·G(x)+R(x)]+R(x)
=[Q(x)·G(x)]+[R(x)+R(x)]
=Q(x)·G(x)
因此,所得CRC码可被G(x)表示的数码除尽。
将收到的CRC码用约定的生成多项式G(x)去除,如果无错,余数应为0,有某一位出错,余数不为0.
(二) 定点数的表示和运算
1. 定点数的表示
1)无符号数的表示
无符号数就是指正整数,机器字长的全部位数均用来表示数值的大小,相当于数的绝对值。
对于字长为n+1位的无符号数的表示范围为:
0-2n+1-1
2)带符号数的表示
带符号数是指在计算机中将数的符号数码化。在计算机中,一般规定二进制的最高位为符号位,最高位为“”表示该数为正,为“”表示该数为负。这种在机器中使用符号位也被数码化的数称为机器数。
根据符号位和数值位的编码方法不同,机器数分为原码、补码和反码。
(1)原码表示法
机器数的最高位为符号位,0表示正数,1表示负数,数值跟随其后,并以绝对值形式给出。这是与真值最接近的一种表示形式。
原码的定义:
(2)补码表示法
机器数的最高位为符号位,0表示正数,1表示负数,其定义如下:
(3)反码表示法
机器数的最高位为符号,0表示正数,1表示负数。反码的定义:
2. 定点数的运算
1)定点数的位移运算
左移,绝对值扩大;右移,绝对值缩小。
算术移位规则
符号位不变
码制
添补代码
正数
0
负数
原
0
补
右移添0
左移添1
反
1
算术移位和逻辑移位的区别:
算术移位:带符号数移位;
逻辑移位:无符号数移位;
2)原码定点数的加/减运算;
对原码表示的两个操作数进行加减运算时,计算机的实际操作是加还是减,不仅取决指令中的操作码,还取决于两个操作数的符号。而且运算结果的符号判断也较复杂。
例如,加法指令指示做(+A)+(-B)由于一操作数为负,实际操作是做减法(+A)-(+B),结果符号与绝对值大的符号相同。同理,在减法指令中指示做(+A)-(-B)实际操作做加法(+A)+(+B),结果与被减数符号相同。由于原码加减法比较繁琐,相应地需要由复杂的硬件逻辑才能实现,因此在计算机中很少被采用。
3)补码定点数的加/减运算;
(1) 加法
整数 [A]补 + [B]补= [A+B]补(mod 2n+1)
小数 [A]补 + [B]补= [A+B]补(mod 2)
(2) 减法
整数 [A]补 - [B]补= [A+(-B)]补=[A]补 + [-B]补(mod 2n+1)
小数 [A]补 - [B]补= [A+(-B)]补=[A]补 + [-B]补(mod 2)
无需符号判定,连同符号位一起相加,符号位产生的进位自然丢掉
4)定点数的乘/除运算
(1)一位乘法
<1>原码定点一位乘法
两个原码数相乘,其乘积的符号为相乘两数的异或值,数值两数绝对值之积。
设 [X]原=X0 X1 X2 …Xn
[Y]原=Y0 Y1 Y2 …Yn
[X·Y]原=[X]原·[Y]原
= (X0⊕Y0)∣(X1 X2 …Xn)·(Y1 Y2 …Yn)
符号∣表示把符号位和数值邻接起来。
<2>定点补码一位乘法
有的机器为方便加减法运算,数据以补码形式存放。乘法直接用补码进行,以减少转换次数。具体规则如下:
[X·Y]补=[X]补(-Y0 + 0. Y1 Y2… Yn )
<3>布斯法
“布斯公式”:
在乘数Yn后添加Yn+1=0。按照Yn+1 ,Yn相邻两位的三种情况,其运算规则如下:
(1) Yn+1 ,Yn =0( Yn+1 Yn =00或11),部分积加0,右移1位;
(2) Yn+1 ,Yn =1( Yn+1 Yn =10) ,部分积加[X]补,右移1位;
(3) Yn+1 ,Yn =-1( Yn+1 Yn =01) ,部分积加[-X]补,右移1位
最后一步不移位。
(2)两位乘法
<1>原码两位乘法,因此实际操作用Yi-1、Yi、C三位来控制,运算规则如下
Yi-1 Yi C
操作
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
+0, 右移2位 0→C
+X, 右移2位 0→C
+X, 右移2位 0→C
+2X,右移2位 0→C
+2X,右移2位 0→C
-X, 右移2位 1→C
-X, 右移2位 1→C
+0, 右移2位 1→C
<2>补码两位乘法
根据前述的布斯算法,将两步合并成一步,即可推导出补码两位乘的公式。
Yn-i-1 Yn-i Yn-i+1
[Pi+2]补
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
+0, 右移2位
+[X]补, 右移2位
+[X]补, 右移2位
+2[X]补,右移2位
-2[X]补,右移2位
-[X]补, 右移2位
-[X]补, 右移2位
+0, 右移2位
求部分积的次数和右移操作的控制问题。
当乘数由1位符号位和以n(奇数)位数据位组成时,求部分积的次数为(1+n)/2,而且最后一次的右移操作只右移一位。
若数值位本身为偶数n,可采用下述两种方法之一:
①可在乘数的最后一位补一个0,乘数的数据位就成为奇数,而且其值不变,求部分积的次数为1+(n+l)/2,即n/2+1,最后一次右移操作也只右移一位。
②乘数增加一位符号位,使总位数仍为偶数,此时求部分积的次数为n/2+1,而且最后一次不再执行右移操作。
(3)补码除法
<1>定点原码一位除法
1>恢复余数法
被除数(余数)减去除数,如果为0或者为正值时,上商为1,不恢复余数;如果结果为负,上商为0,再将除数加到余数中,恢复余数。余数左移1位。
2>加减交替法
当余数为正时,商上1,求下一位商的办法,余数左移一位,再减去除数;当余数为负时,商上0,求下一位商的办法,余数左移一位,再加上除数。
<2>定点补码一位除法(加减交替法)
1〉如果被除数与除数同号,用被除数减去除数;若两数异号,被除数加上除数。如果所得余数与除数同号商上1,否则,商上0,该商为结果的符号位。
2〉求商的数值部分。如果上次商上1,将除数左移一位后减去除数;如果上次商上0,将余数左移一位后加除数。然后判断本次操作后的余数,如果余数与除数同号商上1,如果余数与除数异号商上0。如此重复执行n-1次(设数值部分n位)。
3〉商的最后一位一般采用恒置1的办法,并省略了最低+1的操作。此时最大的误差为2-n。
5)溢出概念和判别方法
当运算结果超出机器数所能表示的范围时,称为溢出。显然,两个异号数相加或两个同号数相减,其结果是不会溢出的。仅当两个同号数相加或者两个异号数相减时,才有可能发溢出的情况,一旦溢出,运算结果就不正确了,因此必须将溢出的情况检查出来。判别方法有三种:
1〉当符号相同的两数相加时,如果结果的符号与加数(或被加数)不相同,则为溢出。
2〉当任意符号两数相加时,如果C=Cf,运算结果正确,其中C为数值最高位的进位,Cf为符号位的进位。如果C≠Cf ,则为溢出,所以溢出条件=C⊕Cf 。
3〉采用双符号fs2fs1。正数的双符号位为00,负数的双符号位为11。符号位参与运算,当结果的两个符号位甲和乙不相同时,为溢出。所以溢出条件= fs2⊕fs1 ,或者溢出条件= fs2fs1 + fs2fs1
(三) 浮点数的表示和运算
1. 浮点数的表示
1)浮点数的表示范围;
浮点数是指小数点位置可浮动的数据,通常以下式表示:
N=M·RE
其中,N为浮点数,M为尾数,E为阶码,R称为“阶的基数(底)”,而且R为一常数,一般为2、8或16。在一台计算机中,所有数据的R都是相同的,于是不需要在每个数据中表示出来。因此,浮点数的机内表示一般采用以下形式:
浮点数的机内表示一般采用以下形式:
Ms
E
M
1位 n+1位 m位
Ms是尾数的符号位,设置在最高位上。
E为阶码,有n+1位,一般为整数,其中有一位符号位,设置在E的最高位上,用来表正阶或负阶。
M为尾数,有m位,由Ms和M组成一个定点小数。Ms=0,表示正号,Ms=1,表示负。为了保证数据精度属数通常用规格化形式表示:当R=2,且尾数值不为0时,其绝对值大于或等于(0.5)10。对非规格化浮点数,通过将尾数左移或右移,并修改阶码值使之满足规格化要求。
2)IEEE754标准
根据IEEE 754国际标准,常用的浮点数有两种格式:
(1)单精度浮点数(32位),阶码8位,尾数24位(内含:位符号位)。
(2)双精度浮点数(64位),阶码11位,尾数53位(内含:位符号位)。
单精度格式32位,阶码为8位,尾数为23位。另有一位符号位S,处在最高位。
由于IEEE754标准约定在小数点左部有一位隐含位,从而实际有效位数为24位。这样使得尾数的有效值变为1.M 。
例如,最小为x1.0…0,,最大为x1.1…1。规格化表示。故小数点左边的位横为1,可省去。
阶码部分采用移码表示,移码值127,1到254经移码为-126到+127。
S(1位)
E(8位)
M(23位)
N(共32位)
符号位
0
0
0
符号位
0
不等于0
(-1)S·2-126·(0.M) 为非规格化数
符号位
1到254之间
-
(-1)S·2E-127·(1.M) 为规格化数
符号位
255
不等于0
NaN(非数值)
符号位
255
0
无穷大
0 有了精确的表示,无穷大也明确表示。对于绝对值较小的数,可以采用非规格化数表示,减少下溢精度损失。非规格化数的隐含位是0,不是1。
2. 浮点数的加/减运算
加减法执行下述五步完成运算:
1)“对阶”操作
比较两浮点数阶码的大小,求出其差ΔE,保留其大值E,E=max(Ex, Ey)。当ΔE≠0时,将阶码小的尾数右移ΔE位,并将其阶码加上ΔE,使两数的阶码值相等。
2)尾数加减运算
执行对阶之后,两尾数进行加减操作。
3)规格化操作
规格化的目的是使得尾数部分的绝对值尽可能以最大值的形式出现。
4)舍入
在执行右规或者对阶时,尾数的低位会被移掉,使数值的精度受到影响,常用“0”舍“1”入法。当移掉的部分最高位为1时,在尾数的末尾加1,如果加1后又使得尾数溢出,则要再进行一次右规。
5)检查阶码是否溢出
阶码溢出表示浮点数溢出。在规格化和舍入时都可能发生溢出,若阶码正常,加/减运算正常结束。若阶码下溢,则设置机器运算结果为机器零,若上溢,则设置溢出标志。
(四) 算术逻辑单元ALU
1. 串行加法器和并行加法器
1)串行进位加法器
并行加法器可以同时对数据的各位进行相加,一般用n个全加器来实现2个操作数的各位同时向加。其操作数的各位是同时提供的,由于进位是逐位形成,低位运算所产生的进位会影响高位的运算结果。
串行进位(也称波形进位)加法器,逻辑电路比较简单,但是最高位的加法运算,一定要等到所有低位的加法完成之后才能进行,低位的进位要逐步的传递到高位,逐级产生进位,因此运算速度比较慢。
串行进位加法器
2)并行进位加法器
为了提高运算速度,减少延迟时间,可以采用并行进位法,也叫提前进位或先行进位。
全加器中,输入Ai 、Bi、Ci-1,输出:
Si = Ai Bi Ci-1+Ai Bi Ci-1+Ai Bi Ci-1+Ai Bi Ci-1
Ci = Ai Bi Ci-1+Ai Bi Ci-1+Ai Bi Ci-1+Ai Bi Ci-1 = Ai Bi + (Ai+Bi)Ci-1
进位产生函数:Gi = Ai Bi
进位传递函数:Pi = Ai+Bi
Ci = Gi + Pi Ci-1
C4 = G4 + P4G3 + P4P3G2 + P4P3P2G1 + P4P3P2P1C0
并行进位加法器的运算速度很快,形成最高进位输出的延迟时间很短,但是以增加硬件逻辑线路为代价。对于长字长的加法器,往往将加法器分成若干组,在组内采用并行进位,组间则采用串行进位或并行进位,由此形成多种进位结构。
(1)单级先行进位
单级先行进位方式将n位字长分为若干组,每组内采用并行进位方式,组与组之间册采用串行进位方式。
(2)多级先行进位
多级先行进位在组内和组间都采用先行进位方式。
16位单级先行进位加法器
2. 算术逻辑单元ALU的功能和机构
ALU部件是运算器中的主要组成部分,又称为多功能函数发生器,主要用于完成各种算术运算和逻辑运算。
ALU的算术运算部件包含加法器、减法器、乘法器、除法器、增量器(+1)、减量器(-1)、BCD码运算器等组件。
ALU的主要工作是根据CPU的指令要求执行各种指定的运算,如加法、减法、乘法、除法、比较、逻辑移位等操作。
通用寄存器组是一组存取速度最快的存储器,用于保存参加运算的操作数和中间结果。访问寄存器无需高速缓存,也不需要运行总线周期,因此指令的执行速度很快。几乎所有的指令都要将寄存器指定为一个操作数,有些指令还要求将操作数存放在专用的寄存器中。
专用寄存器通常用于表示CPU所处于某种系统状态,ALU中有两个重要的状态寄存器:指令指针寄存器IP(即程序计数器PC)和标志寄存器FLAGS。
三、 存储器层次机构
(一) 存储器的分类
1. 按存储介质分类
1)半导体存储器
2)磁表面存储器
3)磁芯存储器
4)光盘存储器
2. 按存取方式分类
1)随机存储器
2)只读存储器
3)串行访问存储器
3. 按在计算机中的作用分类
存储器
主存
闪速存储器(Flash Memory)
辅存
缓存(Cache)
只读存储器(ROM)
静态RAM
动态RAM
随机存储器(RAM)
MROM
PROM
EPROM
EEPROM
磁盘
磁带
光盘
(二) 存储器的层次化结构
寄存器
缓存
主存
磁盘
磁带
存储器有3个重要的指标:速度、容量和每位价格,一般来说,速度越快,位价越高;容量越大,位价越低,容量大,速度就越低。上述三者的关系用下图表示:
存储系统层次结构主要体现在缓存-主存-辅存这两个存储层次上,如下图所示:
CPU
缓存
主存
辅存
(三) 半导体随机存取存储器
1. SRAM存储器的工作原理
1)静态存储单元
SRAM静态存储单元的每个存储位需要四到六个晶体管组成。比较典型的是六管存储单元,即一个存储单元存储一位信息“0”或“1”。静态存储单元保存的信息比较稳定,信息为非破坏性读出,故不需要重写或者刷新操作;另一方面,其结构简单、可靠性高、速度较快,但其占用元件较多,占硅片面积大,且功耗大,所以集成度不高。
静态随机存储单元
2. DRAM存储器的工作原理
1)动态存储单元
常见的动态RAM存储单元有三管式和单管式两种,它们的共特点是靠电容存储电荷的原理来寄存信息。若电容上存有足够的电荷表示“”,电容上无电荷表示“0”。电容上的电荷一般只能维持1-2ms,因此即使电源不掉电,电容上的电荷会自动消失。因此,为保证信息的不丢失,必须在2ms之内就要对存储单元进行一次恢复操作,这个过程称为再生或者刷新。与静态RAM相比,动态RAM具有集成度更高、功耗更低等特点,目前被各类计算机广泛使用。
三管动态RAM基本单元
单管动态RAM基本单元
(四) 只读存储器
前面介绍的DRAM和SRAM均为可任意读/写的随机存储器,当掉电时,所存储的内容消失,所以是易失性存储器。只读存储器,即使停电,所存储的内容也不丢失。根据半导体制造工艺的不同,可分为ROM,PROM,EPROM,E2ROM和Flash Memory
1. 只读存储器(ROM)
掩模式ROM由芯片制造商在制造时写入内容,以后只能读而不能再写入。其基本存储原理是以元件的“有/无”来表示该存储单元的信息(“1”或“0”),可以用二极管或晶体管作为元件,显而易见,其存储内容是不会改变的。
2. 可编程序的只读存储器(PROM)
PROM可由用户根据自己的需要来确定ROM中的内容,常见的熔丝式PROM是以熔丝的通和断开来表示所存的信息为“1”或“0”。刚出厂的产品,其熔丝是全部接通的。根据需要断开某些单元的熔丝(写入)。显而易见,断开后的熔丝是不能再接通了,因而一次性写入的存储器。掉电后不会影响其所存储的内容。
3. 可擦可编程序的只读存储器(EPROM)
为了能修改ROM中的内容,出现了EPROM。利用浮动栅MOS电路保存信息,信息的改写用紫外线照射即可擦除。
4. 可电擦可编程序只读存储器(E2PROM)
E2PROM的编程序原理与EPROM相同,但擦除原理完全不同,重复改写的次数有限制(因氧化层被磨损),一般为10万次。
其读写操作可按每个位或每个字节进行,类似SRAM,但每字节的写入周期要几毫秒,比SRAM长得多。E2PROM每个存储单元采则2个晶体管。其栅极氧化层比EPROM薄,因此具有电擦除功能。
5. 快除读写存储器(Flash Memory)
F1ash Memory是在EPROM与E2PROM基础上发展起来的,其读写过程和E2PROM不同,F1ash Memory的读写操作一般是以块为单位。
(五) 主存储器与CPU的连接
1个存储器的芯片的容量是有限的,它在字数或字长方面与实际存储器的要求都有很大差距,所以需要在字向和位向进行扩充才能满足需要。根据存储器所需的存储容量和所提供的芯片的实际容量,可以计算出总的芯片数。一个存储器的容量为M×N位,若使用L×K位存储器芯片,那么,这个存储器共需要M/L×N/K存储器芯片。
1.位扩展
位扩展指的是用多个存储器器件对字长进行扩充。位扩展的连接方式是将多片存储器的地址、片选己、读写控制端R/W可相应并联,数据端分别引出。
2)字扩展
字扩展指的是增加存储器中字的数量。
静态存储器进行字扩展时,将各芯片的地址线、数据线、读写控制线相应并联,而由片选信号来区分各芯片的地址范围。
3)字位扩展
实际存储器往往需要字向和位向同时扩充。
(六) 双口RAM和多模块存储器
1.双端口存储器
双端口存储器是一种具有两个单独的读/写端口及控制电路的存储器,通过增加一个读/写端口,双端口存储器扩展了存储器的的信息交换能力。
2.多模块存储器
为了解决CPU与主存储器之间的速度匹配问题,在高速存储器中,普遍采用并行主存系统。即利用类似存储器扩展(位扩展、字扩展、字位扩展)的方法,将n个字长为W位的存储器并行连接,构建一个更大的存储器。并行主存有单体多字方式、多体并行方式和多体交叉方式。
(七) 高速缓冲存储器(Cache)
1. 程序访问的局部性
从大量的统计中得到的一个规律是,程序中对于存储空间90%的访问局限于存储空间的10%的区域中,而另外10%的访问则分布在存储空间的其余90%的区域中。这就是通常说的局部性原理。访存的局部性规律包括两个方面:
时间局部性:如果一个存储项被访问,则可能该项会很快被再次访问。
空间局部性:如果一个存储项被访问,则该项及其邻近的项也可能很快被访问。
2. Cache的基本工作原理
Cache通常由两部分组成,块表和快速存储器。其工作原理是:处理机按主存地址访问存储器,存储器地址的高段通过主存-Cache地址映象机构借助查表判定该地址的存储单元是否在Cache中,如果在,则Cache命中,按Cache地址访问Cache。否则,Cache不命中,则需要访问主存,并从主存中调入相应数据块到Cache中,若Cache中已写满,则要按某种算法将Cache中的某一块替换出去,并修改有关的地址映象关系。
从这个工作原理我们可以看出,它已经涉及到了两个问题。首先是定位、然后是替换的问题。
Cache的存在对程序员是透明的。其地址变换和数据块的替换算法均由硬件实现。通常Cache被集成到CPU内以提高访问速度。
3. Cache和主存之间的映射方式
因为处理机访问都是按主存地址访问的,而Cache的空间远小于主存,如何知道这一次的访问内容是不是在Cache中,在Cache中的哪一个位置呢? 这就需要地址映象,即把主存中的地址映射成Cache中的地址。让Cache中一个存储块(空间)与主存中若干块相对应,如此,访问一个主存地址时,就可以对应地知道在cache中哪一个地址了。地址映象的方法有三种:直接映象、全相联映象和组相联映象。
直接映象就是将主存地址映象到Cache中的一个指定地址。任何时候,主存中存储单元的数据只能调入到Cache中的一个位置,这是固定的,若这个位置已有数据,则产生冲突,原来的块将无条件地被替换出去。
直接映射
全相联映象就是任何主存地址可映象到任何Cache地址的方式。在这种方式下,主存中存储单元的数据可调入到Cache中的任意位置。只有在Cache中的块全部装满后才会出现块冲突。
全相连映射
组相联映象指的是将存储空间的页面分成若干组,各组之间的直接映象,而组内各块之间则是全相联映象。
组相联映射
4. Cache中主存块的替换算法
在直接映象方式下,不存在块替换的算法,因为每一块的位置映象是固定的,需要哪一块数据就可直接确定地将该块数据调入上层确定位置。而其他两种映象就存在替换策略的问题,就是要选择替换到哪一个Cache块。即替换算法。
思想
优点
缺点
随机算法RAND
用软的或硬的随机数产生器产生上层中要被替换的页号
简单、易于实现
没有利用上层存储器使用的"历史信息",没有反映等程序局部性,命中率低。
先进先出FIFO
选择最早装入上层的页作为被替换的页
实现方便,利用了主存历史的信息
不能正确反映程序局部性原理,命中率不高,可能出现一种异常现象。
近期最少使用法LRU
选择近期最少访问的页作为被替换的页
比较正确反映程序局部性,利用访存的历史信息,命中率较高
实现较复杂
优化替换算法OPT