嵌入式系统设计师教程(第2版)—— 第一章.计算机系统基础知识
文章目录
1、计算机硬件
基本的计算机硬件系统:运算器、控制器、存储器、输入设备和输出设备5大部件组成
随着网络技术的发展和应用,通信部件 也成为计算机系统的基本组件。
CPU
:运算器 和 控制器 及其部件被集成在一起,统称为 中央处理单元(CentralProcessingUnit)。
CPU是硬件系统的核心,用于数据的加工处理,能完成各种算术、逻辑运算及控制功能。
运算器
:对数据进行加工处理的部件,它主要完成算术和逻辑运算。
存储器
:计算机系统中的记忆设备,分为内部存储器(MainMemory,MM,简称内存、主存)和外部存储器(简称外存或辅存)。
主存
:速度快、容量小, 临时存储 计算机运行时所需的程序、数据及运算结果。
外存
:容量大、速度慢,可用于 长期保存 信息。
寄存器
:CPU中的存储器件,速度最快,容量最小 ,用来 临时存放少量 的数据、运算结果和正在执行的指令。
主机
:CPU 和 主存储器 的有机组合。
输入/输出(I/O)设备位于主机之外,是计算机系统与外界交换信息的装置。
输入设备
:将信息输入到计算机中,
输出设备
:将运算结果输出到外部设备或存储介质上。
2、计算机软件
计算机软件是指为管理、运行、维护及应用计算机系统所开发的程序和相关文档的集合,是计算机系统中的重要组成部分
通常可将软件分为 系统软件 、 中间件 和 应用软件 等类型。
系统软件
:管理系统的硬件和软件资源,
应用软件
:解决应用领域的具体问题,
中间件
:一类独立的系统软件或服务程序,常用来管理计算资源和网络通信,提供通信处理、数据存取、事务处理、Web服务、安全、跨平台等服务。
3、原码、反码、补码和移码
(1)、原码
表示数值X的原码记为
[
X
]
原
[X]_原
[X]原
如果机器字长为n,则最高位是符号位,0表示正号,1表示负号,其余的n-1位表示数值的绝对值。
数值0的原码表示有两种形式:
[
+
0
]
原
[+0]_原
[+0]原=00000000,
[
−
0
]
原
[-0]_原
[−0]原=10000000。
[
+
127
]
原
[+127]_原
[+127]原=01111111,
[
−
127
]
原
[-127]_原
[−127]原=11111111
(2)、反码
表示数值X的反码记作
[
X
]
反
[X]_反
[X]反
如果机器字长为n,则最高位是符号位,0表示正号,1表示负号,其余的n-1位表示数值。
正数的反码与原码相同,负数的反码则是其绝对值按位求反。
数值0的反码表示有两种形式:
[
+
0
]
反
[+0]_反
[+0]反=00000000,
[
−
0
]
反
[-0]_反
[−0]反=11111111
[
+
127
]
反
[+127]_反
[+127]反=01111111,
[
−
127
]
反
[-127]_反
[−127]反=10000000
(3)、补码
表示数值X的补码记作
[
X
]
补
[X]_补
[X]补
如果机器字长为n,则最高位为符号位,0表示正号,1表示负号,其余的n-1位表示数值。
正数的补码与其原码和反码相同,负数的补码则等于其反码的末尾加1。
在补码表示中,0有唯一的编码:
[
+
0
]
补
[+0]_补
[+0]补=
[
−
0
]
补
[-0]_补
[−0]补=00000000。
n位补码表示法有一个例外,当符号位为1而数值位全部为0时,它表示整数
−
2
(
n
−
1
)
-2^{(n-1)}
−2(n−1),此时符号位的1既表示负数又表示数值。
[
+
127
]
反
[+127]_反
[+127]反=01111111,
[
−
127
]
反
[-127]_反
[−127]反=10000001
(4)、移码
移码表示法是在数X上增加一个偏移量来定义的,常用于表示浮点数中的阶码。
如果机器字长为n,在偏移量为
2
(
n
−
1
)
2^{(n-1)}
2(n−1)时,只要将补码的符号位取反便可获得相应的移码表示。
偏移量也可以是其他值。采用移码表示时,码值大者对应的真值就大。
[
+
127
]
移
[+127]_移
[+127]移=11111111,
[
−
127
]
移
[-127]_移
[−127]移=00000001
4、定点数和浮点数
(1)、定点数(纯整数、纯小数)
定点数:表示数据时小数点的位置固定不变
定点整数:纯整数,小数点在最低有效数值位之后
定点小数:纯小数,小数点在最高有效数值位之前
(2)、浮点数
浮点数是指小数点位置不固定的数,浮点表示法能表示更大范围的数,
二进制数
N
N
N 的浮点表示法:
N
=
2
E
×
F
N=2^{E}\times F
N=2E×F
其中,
E
E
E 称为阶码,
F
F
F 为尾数
阶码通常为带符号的纯整数,尾数为带符号的纯小数
浮点数的一般格式:
阶符和数符分别表示阶码和尾数的正负
(3)、工业标准IEEE 754
其中,
S
S
S为数的符号位,为0时表示正数,为1时表示负数
P
P
P为指数(阶码),用移码表示(偏移值为
2
P
−
1
2^{P-1}
2P−1,p为阶码的位数)
M
M
M为尾数,用原码表示
特殊情况:(
P
P
P为全0或全1)
P
P
P为全0且M为0,则表示真值
±
0
±0
±0(正负号和数符位有关)
P
P
P为全1且M是0,则这个数的真值为
±
∞
±∞
±∞(正负号与符号位有关)
P
P
P为全1并且M不是0,则规定其不是一个数(
N
a
N
NaN
NaN)
参数 | 单精度浮点数 | 双精度浮点数 | 扩充精度浮点数 |
---|---|---|---|
浮点数字长 | 32 | 64 | 80 |
尾数长度 | 23 | 52 | 64 |
符号位长度 | 1 | 1 | 1 |
阶码长度 | 8 | 11 | 15 |
指数偏移量 | +127 | +1023 | +16383 |
可表示的实数范围 | 1 0 − 38 10^{-38} 10−38~ 1 0 38 10^{38} 1038 | 1 0 − 308 10^{-308} 10−308~ 1 0 308 10^{308} 10308 | 1 0 − 4932 10^{-4932} 10−4932~ 1 0 4932 10^{4932} 104932 |
在IEEE 754标准中,单/双精度浮点约定小数点左边隐含有一位,通常是1,因此尾数为1.×××
计算举例(表示176.0625的单精度浮点数)
利用IEEE754标准将数176.0625表示为单精度浮点数。
解:
首先,十进制数 转 二进制数,
176.062
5
10
=
10110000.000
1
2
176.0625_{10}=10110000.0001_2
176.062510=10110000.00012
其次,二进制数规格化处理,即
10110000.0001
=
1
◇
01100000001
×
2
7
10110000.0001=1◇01100000001×2^7
10110000.0001=1◇01100000001×27
保证了最高位为1,
◇
◇
◇是小数点
符号位
S
S
S:
176.0625为正数,符号位为0
求阶码
P
P
P:
规格化数的指数为7,
偏移量是
2
7
−
1
2^{7-1}
27−1 == 127 (偏移值为
2
P
−
1
2^{P-1}
2P−1,p为阶码的位数)
偏移后的指数值为
(
7
+
127
)
10
=
=
13
4
10
=
=
(
10000110
)
2
(7+127)_{10} == 134_{10} == (10000110)_2
(7+127)10==13410==(10000110)2
10000110就是用移码表示的阶码
求尾数
M
M
M:
将最高位去掉,扩展为单精度浮点数所规定的23位尾数
得到01100000001000000000000,这就是尾数
M
M
M
IEEE标准形式:
0 10000110 01100000001000000000000
S P M
5、算术运算和逻辑运算
算术运算
机器数
加减原理
机器数的加减运算在计算机中,可以只设置加法器,而将减法运算转换为加法运算来实现
(1)补码加法:和的补码 = 补码求和,即
[
X
+
Y
]
补
[X+Y]_补
[X+Y]补 =
[
X
]
补
[X]_补
[X]补 +
[
Y
]
补
[Y]_补
[Y]补
(2)补码减法:差的补码 = 被减数的补码 + 减数取负后的补码。即
[
X
−
Y
]
补
[X-Y]_补
[X−Y]补 =
[
X
]
补
[X]_补
[X]补 +
[
−
Y
]
补
[-Y]_补
[−Y]补
(3)由
[
X
]
补
[X]_补
[X]补求
[
−
X
]
补
[-X]_补
[−X]补的方法是:
[
X
]
补
[X]_补
[X]补的各位取反 (包括符号位) ,末尾加1
乘除法方案
(1)纯软件:
只有加法器,没有乘除法指令,乘除运算是用程序来完成的
硬件结构简单,成本低,但乘除运算时速度很慢
(2)软硬结合
在可以实现加减运算的ALU的基础上,通过增加少量的实现左、右移位的逻辑电路,来实现乘除运算
增加硬件不多,成本增加不多,乘除运算的速度较高
(3)纯硬件
设置专用的硬件阵列乘法器或除法器,完成乘除法运算
需付出较高的硬件成本,但执行速度快
浮点运算
加减原理
X
=
M
×
2
i
,
Y
=
N
×
2
j
X=M×2^i,Y=N×2^j
X=M×2i,Y=N×2j,求
X
±
Y
X±Y
X±Y的运算过程
- (1)对阶。使两个数的阶码相同。令 K = ∣ i − j ∣ K=|i-j| K=∣i−j∣,阶码小的数,阶码加上K,尾数右移K位
- (2)求尾数和(差)
- (3)结果规格化并判溢出。规格化处理运算结果所得的尾数。当尾数溢出时,需要调整阶码
- (4)舍入。步骤(1)(3)都可能导致尾数的最低位因移出而丢掉,就需要进行舍入处理,以求得最小的运算误差
① 截断法。将要保留的数据末位右边的数据全都截去,不管数据是0还是1
② 末位恒1法。将要保留的末位数据恒置1,不管右移丢掉的数据是0还是1
③ 0舍1入法。舍去的数据为0时,保持末位原始状态。若舍去的数据为1,则将末位加1。
但有例外当数据为0.11111,即在尾数全为1的特殊情况下,舍去1时末位不再加1 - (5)溢出判别。
以阶码为准
若阶码上溢(超过最大值),则运算结果溢出
若阶码下溢(低于最小值),则结果为0
其他,结果正确无溢出
乘除原理
浮点数相乘,其积的阶码等于两数的阶码相加,积的尾数等于两数的尾数相乘。
浮点数相除,其商的阶码等于两数的阶码相减,商的尾数等于两数的尾数相除。
乘除运算的结果都需要进行规格化处理
并判断阶码是否溢出
逻辑运算
详看我往期文章:【逻辑运算及其基本概念,定理,算法,规律,卡诺图】
6、字符编码(了解)
BCD编码
十进制数与字符的编码表示用4位二进制代码表示一位十进制数,称为二-十进制编码,简称BCD编码
根据4位代码中每一位是否有确定的权划分为有权码和无权码
8421码:4个二进制位的权从高到低分别为8、4、2和1
余3码:在8421码的基础上,把每个数的代码加上0011后构成的(无权码)
格雷码:规则是相邻的两个代码之间只有1位不同(无权码)
ASCII码
美国标准信息交换代码(AmericanStandardCodeforInformationInterchange,ASCII)
被国际标准化组织ISO采纳,成为一种国际通用的信息交换用标准代码。
基本的ASCII码采用7个二进制位,即
d
6
d
5
d
4
d
3
d
2
d
1
d
0
对
d_6d_5d_4d_3d_2d_1d_0对
d6d5d4d3d2d1d0对字符进行编码
低4位组dsdzdido用作行编码,高3位组ddsd4用作列编码
汉字编码
1)输入码
汉字的输入码主要分为三类:数字编码、拼音码和字形码
(1)数字编码。
数字编码就是用数字串代表一个汉字的输入,常用的是国标区位码。
国标区位码将国家标准局公布的6763个两级汉字分成94个区,每个区94位,区码和位码各两位十进制数字。
在94个分区中,1~15区用来表示字母、数字和符号,16~87区为一级和二级汉字。
一级汉字以汉语拼音为序排列,二级汉字以偏旁部首进行排列。
使用区位码方法输入汉字时,必须先在表中查找汉字对应的代码,才能输入。
数字编码输入的优点是无重码,而且输入码和内部编码的转换比较方便,但是数字码有难以记忆的缺点。
(2)拼音码。
拼音码是以汉语读音为基础的输入方法
由于汉字同音字太多,输入重码率很高
按拼音输入后还必须进行同音字选择,会影响输入速度
(3)字形编码。
字形编码是以汉字的形状确定的编码。
汉字总数虽多,但都是由一笔一划组成,全部汉字的部件和笔划是有限的。
把汉字的笔划部件用字母或数字进行编码,按笔划书写的顺序依次输入,就能表示一个汉字
五笔字型、表形码等便是这种编码法。
2)内部码
汉字内部码(简称汉字内码)是汉字在设备和信息处理系统内部存储、处理、传输汉字用的代码。
采用国家标准局GB2312一1980中规定的汉字国标码
汉字数量多,用一个字节无法区分,两个字节存放一个汉字的内码
每个字节的最高位置1,作为汉字机内码。
由于两个字节各用7位,因此可表示16384个可区别的机内码
GB18030一2005《信息技术中文编码字符集》是我国最新的内码字符集,与GB2312一1980完全兼容
支持GB13000及Unicode的全部统一汉字,共收录汉字70244个。
3)字形码
汉字字形码是表示汉字字形的字模数据,通常用点阵、矢量函数等方式表示
用点阵表示字形时,汉字字形码指的就是这个汉字字形点阵的代码
字形码也称字模码,是用点阵表示的汉字字形码,它是汉字的输出方式
根据输出汉字的要求不同,点阵的多少也不同
简易型汉字为16×16点阵,高精度型汉字为24×24点阵、32×32点阵、48×48点阵等
字模点阵的信息量是很大的,所占存储空间也很大
Unicode
为了统一地表示世界各国的文字
国际标准化组织1993年公布了“通用多八位编码字符集”国际标准ISO/IEC10646,简称UCS(UniversalCodedCharacterSet)。
另一个是Unicode(称为统一码、万国码或单一码)软件制造商协会(unicode.org)开发的可以容纳世界上所有文字和符号的字符编码标准,包括字符集、编码方案等。
Unicode2.0开始采用与ISO10646-1相同的字库和字码。
目前这两个项目独立地公布各自的标准。
UCS规定了两种编码格式:UCS-2和UCS-4。UCS-2用两个字节编码,UCS-4用4个字节(实际上只用了31位,最高位必须为0)编码。
Unicode可以通过不同的编码实现,Unicode标准定义了用于传输和保存的UTF-8、UTF-16和UTF-32等
其中,UTF表示UCSTransformationFormat。在网络上广泛使用的UTF-8以8位(一个字节)为单元对UCS进行编码。UCS-2与UTF-8的编码对应关系如表1-7所示。
7、计算机硬件组成及主要部件功能
中央处理单元
中央处理单元(CPU)是计算机系统的核心部件,它负责获取程序指令、对指令进行译码并加以执行
CPU的功能
- (1)程序控制。 CPU通过执行指令来控制 程序的执行顺序 ,这是CPU的重要功能
- (2)操作控制。 一条指令功能的实现需要若干操作信号配合来完成, CPU产生每条指令的操作信号并将操作信号送往对应的部件 ,控制相应的部件按指令的功能要求进行操作
- (3)时间控制。 CPU对各种操作进行时间上的控制,即指令执行过程中操作信号的出 现时间、持续时间及出现的时间顺序 都需要进行严格控制
- (4)数据处理。 CPU通过对数据进行算术运算及逻辑运算等方式进行加工处理,数据加工处理的结果被人们所利用。
对数据的加工处理也是CPU最根本的任务
- (5)中断处理。 CPU还需要对系统内部和外部的中断(异常)做出响应,进行相应的处理。
CPU的组成
CPU主要由运算器、控制器、寄存器组和内部总线等部件组成
1)运算器
运算器由算术逻辑单元(Arithmetic andLogicUnit,ALU)、累加寄存器、数据缓冲寄存器和状态条件寄存器等组成
运算器是数据加工处理部件,用于完成计算机的各种算术和逻辑运算
相对控制器而言,运算器接受控制器的命令而进行动作,即运算器所进行的全部操作都是由控制器发出的控制信号来指挥的,所以它是执行部件。
运算器主要功能:
- 执行所有的 算术运算 ,例如加、减、乘、除等基本运算及附加运算。
- 执行所有的 逻辑运算 并进行逻辑测试,例如与、或、非、零值测试或两个值的比较等。
运算器的各组成部件:
(1)算术逻辑单元(ALU)
ALU是运算器的重要组成部件,负责处理数据,实现对数据的算术运算和逻辑运算。(2)累加寄存器(AC)
AC通常简称为累加器,是一个通用寄存器,其功能是当ALU执行运算时,为ALU提供一个工作区
例如,执行一个减法运算,先将被减数从内存储器取出存在AC中,再取出减数,然后同AC的被减数相减,最后将结果送回AC中
运算的结果是放在累加器中的,运算器中至少要有一个累加寄存器(3)数据缓冲寄存器(DR)
在对内存储器进行读/写操作时,用DR暂时存放由内存储器读/写的一条指令或一个数据字,将不同时间段内读/写的数据隔离开来。
DR 的主要作用为:
作为CPU和内存、外部设备之间 数据传送的中转站
作为CPU和内存、外围设备之间 在操作速度上的缓冲
在单累加器结构的运算器中,数据缓冲寄存器还可兼作为 操作数寄存器(4)状态条件寄存器(PSW)
PSW保存由 算术指令和逻辑指令运行 或 测试的结果 建立的各种条件码内容,主要分为 状态标志 和 控制标志
例如:运算结果进位标志(C)、运算结果溢出标志(V)、运算结果为0标志(Z)、运算结果为负标志(N)、中断标志(I)、方向标志和单步标志等,这些标志通常分别由1位触发器保存,保存了当前指令执行完成之后的状态。
通常,一个算术操作产生一个运算结果,而一个逻辑操作产生一个判决
2)控制器
运算器只能完成运算,而控制器用于控制整个CPU的工作,它决定了计算机运行过程的自动化
它不仅要保证程序的正确执行,而且要能够处理异常事件
控制器的各组成部件:
-
(1)指令寄存器(IR)
指令控制逻辑要完成 取指令 、 分析指令(指令译码) 和 执行指令(按指令操作码执行、形成下一条指令) 的操作
当CPU执行一条指令时,先把它从内存储器取到DR中,再送入IR暂存
指令译码器ID根据IR的内容产生各种微操作指令,控制其他的组成部件工作,完成所需的功能 -
(2)程序计数器(PC)
又称为指令计数器
PC功能: 寄存信息 和 计数
程序的执行分两种情况: 顺序执行 , 转移执行
在程序开始执行前,将程序的起始地址送入PC,该地址在程序加载到内存时确定
PC的内容即是程序第一条指令的地址
执行指令时,CPU自动修改PC的内容,以便使其保持的总是将要执行的下一条指令的地址
大多数指令:按顺序来执行,修改的过程通常只是简单地对 PC加1
转移指令:后继指令的地址根据当前指令的地址加上一个向前或向后转移的位移量得到,或者根据转移指令给出的直接转移的地址得到 -
(3)地址寄存器(AR)
AR保存当前CPU所访问的内存单元的地址
内存和CPU存在着操作速度上的差异,需要使用AR保持地址信息,直到内存的读/写操作完成为止 -
(4)指令译码器(ID)
指令:操作码、地址码
指令译码器:对指令中的操作码字段进行分析解释。
识别指令规定的操作,向操作控制器发出具体的控制信号,控制各部件工作,完成所需的功能
时序控制逻辑:为每条指令按时间顺序提供应有的控制信号
总线逻辑:为多个功能部件服务的信息通路的控制电路
中断控制逻辑:用于控制各种中断请求,并根据优先级的高低对中断请求进行排队,逐个交给CPU
3)寄存器组
寄存器组:专用寄存器、通用寄存器
专用寄存器:其作用是固定的,例如:运算器和控制器中的寄存器
通用寄存器:用途广泛并可由程序员规定其用途,其数目因处理器不同有所差异
多核
核心:CPU核心又称为内核,是CPU最重要的组成部分
核心位置: CPU中心那块隆起的芯片就是核心 ,是由单晶硅以一定的生产工艺制造出来的
核心作用:CPU所有的计算、接收/存储命令、处理数据都由核心执行
核心固定的逻辑结构:一级缓存、二级缓存、执行单元、指令级单元和总线接口等逻辑单元都会有合理的布局
多核:在一个单芯片上面集成两个甚至更多个处理器内核
其中,每个内核都有自已的各种单元,一级/二级缓存共享/独有,其部件的完整性和单核处理器内核相比完全一致
两种双核技术物理结构
双核: AMD将两个内核做在一个晶元(Die)上,通过直连架构连接起来,集成度更高
双芯: Intel则是将放在不同核心上的两个内核封装在一起
从用户端的角度来看,双核 方案能够使双核CPU的管脚、功耗等指标跟单核CPU保持一致,不需要更换电源、芯片组、散热系统和主板,只需要刷新BIOS软件即可
多核CPU系统最大的优点(也是开发的最主要目的)是可满足用户同时进行多任务处理的要求
单核多线程和多核(一般每核也是多线程的)虽然都可以执行多任务,但多核的速度更快
虽然Inteld超线程技术的单核可以视为是双核,4核可以视为是8核,但是一般比不上实际是双核 / 8核的CPU性能
8、存储器
CPU内部的通用寄存器组和Cache(高速缓存)、CPU外部的Cache、主板上的主存储器、主板外的联机/脱机(在线/离线)的磁带存储器和光盘存储器等都是计算机系统的存储器
Cache(高速缓存)和主存之间的交互功能全部由硬件实现
主存与辅存之间的交互功能可由硬件和软件结合起来实现
存储器的分类
存储器的分类方式 | 子级 | 子级的子级 | 备注 |
---|---|---|---|
所处的位置 | 内存 | 主存(Main Memory) | |
外存 | 辅存 | ||
工作方式 | 读/写存储器RAM | 静态存储器 SRAM | |
动态存储器 DRAM | |||
只读存储器 | 固定只读存储器 ROM | ||
可编程的只读存储器 PROM | |||
可擦除可编程的只读存储器 EEPROM | |||
电擦除可编程的只读存储器 EEPROM | |||
闪存 Flash | |||
构成材料 | 磁存储器 | 磁带、磁盘 | |
半导体存储器 | |||
光存储器 | 光盘 | ||
访问方式 | 按地址访问的存储器 | ||
按内容访问的存储器 | |||
寻址方式 | 随机存储器 | ||
顺序存储器 | 磁带 | ||
直接存储器 | 磁盘 |
1)按存储器所处的位置分类
(1)内存
也称为主存(Main Memory)
在 主机内或主机板 上,用来存放机器当前 运行所需要的程序和数据 ,以便向CPU提供信息
相对于外存,其特点是容量小、速度快。(2)外存
也称为辅存,如磁盘、磁带和光盘等
用来存放当前 不参加运行的大量信息 ,而在需要时调入内存
2)按存储器的工作方式分类
(1)读/写存储器(RandomAccess Memory,RAM)
既能读取数据,也能存入数据
按照存储单元的工作原理,又分为 静态存储器(StaticRAM,SRAM) 和 动态存储器(DynamicRAM,DRAM)
SRAM比DRAM更快,也贵得多。(2)只读存储器
工作过程中 仅能读取的存储器
存储在ROM设备中的程序通常称为固件(Firmware)
例如,当计算机加电后,它会运行存储在ROM中的固件
根据数据的写入方式,又可细分为ROM、PROM、EPROM和EEPROM等类型
①固定只读存储器(ReadOnlyMemory,ROM)
在厂家生产时就写好数据,其内容只能读出不能改变
一般用于存放系统程序BIOS和用于微程序控制。
②可编程的只读存储器(ProgrammableReadOnly Memory,PROM)
内容可以由用户一次性地写入
写入后不能再修改
③可擦除可编程的只读存储器(ErasableProgrammableReadOnlyMemory,EPROM)
其中的内容既可以读出,也可以由用户写入,写入后还可以修改
改写的方法是写入之前先用 紫外线照射 15~20分钟以擦去所有信息,然后再用特殊的电子设备写入信息
④电擦除可编程的只读存储器(ElectricallyErasable Programmable ReadOnlyMemory,EEPROM)
EEPROM中的内容既可以读出,也可以进行改写
只不过这种存储器是用 电擦除 的方法进行数据的改写
⑤闪存(FlashMemory)
闪存是一种非易失性存储器,基于EEPROM,已成为重要的存储技术
3)按存储器的构成材料分类
- (1)磁存储器
磁存储器是用磁性介质做成的,如磁芯、磁泡、磁膜、磁鼓、磁带及磁盘等。 - (2)半导体存储器
根据所用元器件又可分为双极型和MOS型;根据数据是否需要刷新又可分为静态(Staticmemory)和动态(Dynamicmemory)两类。 - (3)光存储器
利用光学方法读/写数据的存储器,如光盘(OpticalDisk)
4)按访问方式分类
按访问方式可分为 按地址访问的存储器 和 按内容访问的存储器
5)按寻址方式分类
- (1)随机存储器(Random Access Memory,RAM)
这种存储器可对任何存储单元存入或读取数据,访问任何一个存储单元所需的时间是相同的。 - (2)顺序存储器(SequentiallyAddressedMemory,SAM)
访问数据所需要的时间与数据所在的存储位置相关,磁带是典型的顺序存储器。 - (3)直接存储器(DirectAddressedMemory,DAM)
介于随机存取和顺序存取之间的一种寻址方式。磁盘是一种直接存取存储器,它对磁道的寻址是随机的,而在一个磁道内则是顺序寻址。
相联存储器
相联存储器是一种按内容访问的存储器
其工作原理就是把数据或数据的某一部分作为关键字,按顺序写入信息
读出时并行地将该关键字与存储器中的每一单元进行比较
找出存储器中所有与关键字相同的数据字,特别适合于信息的检索和更新。
- **输入检索寄存器:**用来存放要检索的内容(关键字)
- **屏蔽寄存器:**用来屏蔽那些不参与检索的字段
- **比较器:**将检索的关键字与存储体的每一单元进行比较
为了提高速度,比较器的数量应很大
应有 2 n 2^n 2n字比较器
应有 2 n × N 2^n×N 2n×N个位比较器,每位对应一个 - **匹配寄存器:**用来记录比较的结果,应有 2 n 2^n 2n个二进制位记录 2 n 2^n 2n个结果,1为相等(匹配),0为不相等(不匹配)
相联存储器可用在高速缓冲存储器中
在虚拟存储器中用来作为段表、页表或快表存储器,用在数据库和知识库中
高速缓存(Cache)
高速缓存(Cache)由快速半导体存储器构成,用来存放当前最活跃的程序和数据
其内容是主存局部域的副本,对程序员来说是透明的。
1)高速缓存的组成
Cache存储器中控制部分:判断CPU要访问的信息是否在Cache存储器中,若在即为命中,若不在则没有命中。
命中时直接对Cache存储器寻址;未命中时,要按照替换原则决定主存的一块信息放到Cache存储器的哪一块里。
在多级Cache的计算机中,Cache分为一级(L1Cache)、二级(L2Cache)、三级(L3Cache)等
CPU访存时首先查找L1Cache,如果不命中,则访问L2Cache,直到所有级别的Cache都不命中,才访问主存
通常要求L1Cache的速度足够快,以赶上CPU的主频
如果Cache为两级,则L1Cache的容量一般都比较小,为几千字节到几十千字节
L2Cache则具有较高的容量,一般为几百字节到几兆字节,以使高速缓存具有足够高的命中率
2)高速缓存中的地址映像方法
地址映像:CPU工作时,从Cache存储器中读/写信息,而送出的是主存单元的地址,需要将主存地址转换成Cache存储器的地址
Cache的地址映像有如下3种方法
(1)直接映像
直接映像是指主存的块与Cache块的对应关系是固定的,主存中的块 只能存放在 Cache存储器的相同块号的块中
只要主存地址中的主存区号与Cache中记录的主存区号相同,则表明访问Cache命中
一旦命中,由主存地址中的区内块号立即可得到要访问的Cache存储器中的块,而块内地址就是主存地址中给出的低位地址。
直接映像方式的优点是地址 变换很简单,缺点是灵活性差 ,不同区号中块号相同的块无法同时调入Cache存储器
(2)全相联映像
主存与Cache存储器均分成大小相同的块
这种映像方式允许主存的任一块可以调入Cache存储器的任何一个块的空间中
例如:
主存为64MB,Cache为32KB,块的大小为4KB(块内地址需要12位)
因此主存分为16384块,块号从0~16383,表示块号需要14位
Cache分为8块,块号为0~7,表示块号需3位
【Cache相联存储器】需要有【Cache块个数相同数目】的单元,存储的是【主存块的块号】
(该例中相联存储器8个单元,每个单元应为14位)
地址变换时,用【主存地址高位表示的主存块号】与【Cache相联存储器所存储的主存块号】进行比较,若相同即为命中
此时【在相应的Cache块中】根据块内地址访问到相应的存储单元
(该例中块内地址是12位,Cache与主存的块内地址是相同的)
优点:主存的块调入Cache的位置不受限制,十分灵活。
缺点:无法从主存块号中直接获得Cache的块号,变换比较复杂,速度比较慢。
(3)组相联映像
这种方式是前面两种方式的折中
具体方法是将Cache中的块再分成组
例如,假定Cache有16块,再将每两块分为1组,则Cache就分为8组
主存同样分区,每区16块,再将每两块分为1组,则每区就分为8组
组相联映像:规定组采用直接映像方式而块采用全相联映像方式
组内的块:采用全相联映像方式,即一组内的块可以任意存放
3)替换算法
替换算法的目标就是使Cache获得尽可能高的命中率。常用算法有如下几种
(1)随机替换算法。就是用随机数发生器产生一个要替换的块号,将该块替换出去
(2)先进先出算法。就是将最先进入Cache的信息块替换出去
(3)近期最少使用算法。这种方法是将近期最少使用的Cache中的信息块替换出去
(4)优化替换算法。必须先执行一次程序,统计替换情况,在第二次执行该程序时便可以用最有效的方式来替换
4)Cache性能分析
Cache的性能是计算机系统性能的重要方面。
命中率是Cache的一个重要指标,但不是最主要的指标
Cache设计的目标是在成本允许的条件下达到较高的命中率,使存储系统具有最短的平均访问时间
等效加权平均访问
t
a
=
H
c
t
c
+
(
1
−
H
c
)
t
m
=
t
c
+
(
1
−
H
c
)
(
t
m
−
t
c
)
等效加权平均访问t_a=H_c t_c+(1-H_c)t_m=t_c+(1-H_c)(t_m-t_c)
等效加权平均访问ta=Hctc+(1−Hc)tm=tc+(1−Hc)(tm−tc)
其中,
H
c
:
C
a
c
h
e
的命中率
H_c:Cache的命中率
Hc:Cache的命中率
t
c
:
C
a
c
h
e
的存取时间
t_c:Cache的存取时间
tc:Cache的存取时间
t
m
:
主存的访问时间
t_m:主存的访问时间
tm:主存的访问时间
假设Cache访问和主存访问是同时启动的,Cache不命中时才启动主存
等效加权平均访问
t
a
=
t
c
+
(
1
−
H
c
)
t
m
等效加权平均访问t_a= t_c+(1-H_c)t_m
等效加权平均访问ta=tc+(1−Hc)tm
其中,
t
c
:
C
a
c
h
e
命中时的访问时间
t_c:Cache命中时的访问时间
tc:Cache命中时的访问时间
(
t
m
−
t
c
)
:
失效访问时间
(t_m-t_c):失效访问时间
(tm−tc):失效访问时间
Cache容量越大,则命中率越高
随着Cache容量的增加,其失效率接近0%(命中率逐渐接近100%)
增加Cache容量意味着增加Cache的成本和增加Cache的命中时间
当Cache容量比较小时,容量因素在Cache失效中占有比较大的比例。
降低Cache失效率的方法主要有选择恰当的块容量、提高Cache的容量和提高Cache的相联度等。
┈┈┈┈▕▔╲┈┈┈┈┈┈┈ ┈┈┈┈▕▔╲┈┈┈┈┈┈┈ ┈┈┈┈▕▔╲┈┈┈┈┈┈┈┈
┈┈┈┈┈▏▕┈┈┈┈┈┈┈ ┈┈┈┈┈▏▕┈┈┈┈┈┈┈ ┈┈┈┈┈▏▕┈┈┈┈┈┈┈ ┈
┈┈┈┈┈▏ ▕▂▂▂▂▂┈┈┈┈┈┈┈▏ ▕▂▂▂▂▂┈┈┈┈┈┈┈▏ ▕▂▂▂▂▂┈┈┈
▂▂▂▂╱┈┈▕▂▂▂▂▏┈ ▂▂▂▂╱┈┈▕▂▂▂▂▏┈ ▂▂▂▂╱┈┈▕▂▂▂▂▏┈┈
▉▉▉┈┈┈┈▕▂▂▂▂▏ ┈ ▉▉▉┈┈┈┈▕▂▂▂▂▏ ┈ ▉▉▉┈┈┈┈▕▂▂▂▂▏ ┈
▉▉▉┈┈┈┈▕▂▂▂▂▏ ┈ ▉▉▉┈┈┈┈▕▂▂▂▂▏ ┈ ▉▉▉┈┈┈┈▕▂▂▂▂▏ ┈
▔▔▔▔╲▂▂▕▂▂▂▂▏┈ ▔▔▔▔╲▂▂▕▂▂▂▂▏┈ ▔▔▔▔╲▂▂▕▂▂▂▂▏┈┈