冯诺依曼计算机
![冯·诺伊曼体系结构](https://i-blog.csdnimg.cn/blog_migrate/c75962bf55f304140ace41396e76503d.png)
- 计算机硬件系统由运算器、控制器、存储器、输入设备和输出设备五大部件组成。
- 指令和数据以同等地位存于同一存储器,可按地址寻访。
- 指令和数据用二进制表示。
- 指令由操作码和地址码组成。
- “存储程序”:将指令以二进制代码的形式事先输入计算机的主存储器,然后按其在存储器中的首地址执行程序的第一条指令,以后就按该程序的规定顺序执行其他指令,直至程序执行结束。
- 以运算器为中心,输入/输出设备与存储器之间的数据传送通过运算器完成。
CPU
CPU 的功能
CPU 的功能:程序控制、操作控制、时间控制、数据处理。
- 程序控制:通过执行指令来控制程序的执行顺序,是 CPU 的重要功能。
- 操作控制:一条指令功能的实现需要若干操作信号配合完成,CPU 产生每条指令的操作信号并将操作信号送往不同的部件,控制相应的部件按指令的功能要求进行操作。
- 时间控制:CPU 对各种操作进行时间上的控制,即在指令执行过程中操作信号的出现时间、持续时间及出现的时间顺序都需要进行严格的控制。
- 数据处理:CPU 通过对数据进行算术运算及逻辑运算等方式进行加工处理,数据加工处理的结果被人们所利用。所以,对数据的加工处理也是 CPU 最根本的任务。
CPU 的组成
![202403301534607](https://i-blog.csdnimg.cn/blog_migrate/deecb9dbf82736f79aec44b804093f94.png)
CPU 主要由运算器、控制器、寄存器组和内部总线等部件组成。
运算器:执行算术运算和逻辑运算。组成部分如下:
- 算术逻辑单元(ALU):负责处理数据,实现对数据的算术运算和逻辑运算。
- 累加寄存器(ACC):也称为累加器,是一个通用寄存器,功能是为 ALU 提供一个工作区。
- 数据缓冲寄存器(DR):作为 CPU 和内存、外部设备之间数据传送的中转站;为 CPU 和内存、外围设备之间在操作速度上的缓冲;在单累加器结构的运算器中,数据缓冲寄存器还可兼作为操作数据寄存器。
- 状态条件寄存器(PSW):由指令运行的结果建立的各种条件码内容,主要分为状态标志和控制标志。
控制器:“指挥”CPU 各部件自动协调地进行工作。组成部分如下:
- 指令寄存器(IR):用于暂存当前正在执行的指令。
- 程序计数器(PC):用于存放将要执行的下一条指令的地址。
- 地址寄存器(AR):保存当前 CPU 所访问的内存单元的地址。
- 指令译码器(ID):对现行指令分析,确定要完成的操作及寻址方式。
寄存器组:分为专用寄存器和通用寄存器。运算器和控制器中的寄存器是专用寄存器,其作用是固定的。
注:
程序员可见:通用寄存器组、状态条件寄存器(PSW)、程序计数器(PC)、累加寄存器(ACC)
程序员不可见:数据缓冲寄存器(DR)、指令寄存器(IR)、地址寄存器(AR)
数据表示
各种数值在计算机中表示的形式称为机器数,其特点是采用二进制计数制,数的符号用 0(正)和 1(负)表示,小数点隐含,表示不占位置。机器数对应的实际数值称为数的真值。
机器数有无符号数和带符号数之分。
进制转换
进制 | 描述 |
---|---|
二进制(Binary) | 只包含 0 和 1 两个数字,逢 2 进 1 |
八进制(Octal) | 包含 0、1、2、3、4、5、6、7 这 8 个数字,逢 8 进 1 |
十进制(Decimal) | 包含 0、1、2、3、4、5、6、7、8、9 这 10 个数字,逢 10 进 1 |
十六进制(Hexadecimal) | 包含 0、1、2、3、4、5、6、7、8、9 、A、B、C、D、E、F 这 16 个数字,逢 16 进 1 |
单位换算
计算机中常见的单位及其换算关系:
单位 | 表示 | 换算关系 |
---|---|---|
位 | bit,b | 1 b = 二进制的一位 |
字节 | Byte,B | 1 B = 8 b |
千字节 | KB | 1 KB = 1024 字节 |
兆字节 | MB | 1 MB = 1024 KB |
吉字节 | GB | 1 GB = 1024 MB |
太字节 | TB | 1 TB = 1024 GB |
拍字节 | PB | 1 PB = 1024 TB |
定点数
表示方式:原码、反码、补码、移码。
在正数和负数情况下,原码、反码、补码和移码的转换规则如下:
类型 | 正数 | 负数 | 特点 |
---|---|---|---|
原码 | 最高位为 0,其余位表示数值 | 最高位为 1,其余位表示数值 | 零的表示不唯一 |
反码 | 与原码相同 | 符号位不变,其余位取反 | 零的表示不唯一 |
补码 | 与原码相同 | 符号位不变,其余位取反后加1 | 零的表示唯一,符号位参与运算 |
移码 | 补码符号位取反 | 补码符号位取反 | 符号位 0 负 1 正,相同真值的移码和补码数值位相同,符号位相反 |
Tips:
补码求原码:保持符号位不变,从右向左找到第一个 1,然后将这个 1 左边的所有位取反。
当机器字长为 n
,各种码制表示的有符号数的范围下:
码制 | 定点整数 | 定点小数 |
---|---|---|
原码 | − ( 2 n − 1 − 1 ) ∼ + ( 2 n − 1 ) -(2^{n-1}-1)\sim+(2^{n-1}) −(2n−1−1)∼+(2n−1) | − ( 1 − 2 − ( n − 1 ) ) ∼ + ( 1 − 2 − ( n − 1 ) ) -(1-2^{-(n-1)})\sim+(1-2^{-(n-1)}) −(1−2−(n−1))∼+(1−2−(n−1)) |
反码 | − ( 2 n − 1 − 1 ) ∼ + ( 2 n − 1 ) -(2^{n-1}-1)\sim+(2^{n-1}) −(2n−1−1)∼+(2n−1) | − ( 1 − 2 − ( n − 1 ) ) ∼ + ( 1 − 2 − ( n − 1 ) ) -(1-2^{-(n-1)})\sim+(1-2^{-(n-1)}) −(1−2−(n−1))∼+(1−2−(n−1)) |
补码 | − 2 n − 1 ∼ + ( 2 n − 1 ) -2^{n-1}\sim+(2^{n-1}) −2n−1∼+(2n−1) | − 1 ∼ + ( 1 − 2 − ( n − 1 ) ) -1\sim+(1-2^{-(n-1)}) −1∼+(1−2−(n−1)) |
移码 | − 2 n − 1 ∼ + ( 2 n − 1 ) -2^{n-1}\sim+(2^{n-1}) −2n−1∼+(2n−1) | − 1 ∼ + ( 1 − 2 − ( n − 1 ) ) -1\sim+(1-2^{-(n-1)}) −1∼+(1−2−(n−1)) |
浮点小数
一个二进制数 N 的一般形式:
N
=
2
E
∗
M
N=2^E*M
N=2E∗M
其中
E
E
E 称为阶码,决定二进制数的表示范围,
M
M
M 称为尾数,决定二进制数的精度。
用阶码和尾数表示的数称为浮点数,这种表示数的方法称为浮点表示法。在浮点表示法中,阶码为带符号的纯整数,尾数为带符号的纯小数。浮点数的表示格式为:
![202402192247066](https://i-blog.csdnimg.cn/blog_migrate/541e6b89b5dbe0df3e12240979543615.png)
浮点数所能表示的数值范围主要由阶码决定,所表示数值的精度则由尾数决定。为了充分利用尾数来表示更多的有效数字,通常采用规格化浮点数。当尾数用补码表示时,需要注意如下问题:
- 若尾数 M ≥ 0 M \ge 0 M≥0,则其规格化的尾数形式为 M = 0.1 X X X ⋅ ⋅ ⋅ X X M=0.1XXX···XX M=0.1XXX⋅⋅⋅XX,其中, X X X 可为0,也可为1,即将尾数限定在区间 [ 0.5 , 1 ] [0.5,1] [0.5,1]。
- 若尾数 M < 0 M<0 M<0,则其规格化的尾数形式为 M = 1.0 X X X ⋅ ⋅ ⋅ X X M=1.0XXX···XX M=1.0XXX⋅⋅⋅XX,其中, X X X 可为0,也可为1,即将尾数限定在区间 [ − 1 , − 0.5 ] [-1,-0.5] [−1,−0.5]。
如果浮点数的阶码(包括 1 位阶符)用 R 位的移码表示,尾数(包括1位数符)用M位的补码表示,则所能表示的范围为:
- 最大正数: + ( 1 − 2 − M + 1 ) × 2 2 R − 1 − 1 +(1-2^{-M+1})\times2^{2^{R-1}-1} +(1−2−M+1)×22R−1−1
- 最小负数: − 1 + 2 2 R − 1 − 1 -1+2^{2^{R-1}-1} −1+22R−1−1
IEEE 754标准
IEEE 754标准的表示形式如下:
(
−
1
)
S
2
E
(
b
0
b
1
b
2
b
3
⋅
⋅
⋅
b
n
)
\left ( -1 \right ) ^{S} 2^{E} \left ( b_{0} b_{1} b_{2} b_{3}···b_{n}\right )
(−1)S2E(b0b1b2b3⋅⋅⋅bn)
- ( − 1 ) S \left ( -1 \right ) ^{S} (−1)S 为该浮点数的数符,当 S 为 0 时表示正数,S 为 1 时表示负数;
- E E E 为指数(阶码),用移码表示。 E = e + 偏移量 E=e+偏移量 E=e+偏移量。
- $\left ( b_{0} b_{1} b_{2} b_{3}···b_{n}\right ) $为尾数,其长度为 M 位,用原码表示。对于尾数部分,由于约定小数点左边隐含有一位,通常这位数就是 1。
目前,计算机中主要使用的 IEEE 754浮点数形式如下:
参数 | 单精度浮点数(32位) | 双精度浮点数(64位) |
---|---|---|
浮点数字长 | 32 | 64 |
尾数长度 M | 23 | 52 |
符号位 S | 1 | 1 |
指数长度 E | 8 | 11 |
最大指数 | +127 | +1023 |
最小指数 | -126 | -1022 |
偏移量( 2 E − 1 − 1 2^{E-1} -1 2E−1−1) | 127 | 1023 |
浮点数的运算
浮点数的运算步骤如下:
- 对阶。使两个数的阶码相同。小阶向大阶看齐。
- 求尾数和(差)。
- 规格化处理。
- 舍入处理。在对结果右规时,尾数的最低位将因移出而丢掉。
- 溢出判别。以阶码为准,若阶码溢出,则运算结果流出:若阶码下流(小于最小值),则结果为0:否则结果正确,无流出。
校验码
奇偶校验码
通过在数据中增加一个额外的比特位(称为校验位),使得数据中所有位的总数为奇数或偶数,从而实现对数据的错误检测。
- 奇校验:在数据位中增加一个校验位,使得数据位加上校验位中 1 的个数为奇数。
- 偶校验:与奇校验相反,数据位加上校验位中 1 的个数为偶数。
常用的奇偶校验码有 3 种:水平奇偶校验码、垂直奇偶校验码和水平垂直校验码。
注:奇偶校验码只能检出一位错误,不能确定出错的位置;且只能发现奇数个位出错的情况,不能检测出偶数个位的出错。
海明码
海明码(Hamming Code)是一种利用奇偶性来检错和纠错的校验方法。
设数据位是
n
n
n 位,校验位是
k
k
k 位,则
n
n
n 和
k
k
k 必须满足以下关系:
2
k
≥
n
+
k
+
1
2^{k}\ge n+k+1
2k≥n+k+1
海明码长度为
n
+
k
n+k
n+k。
循环冗余校验码(CRC)
主要用于数据链路层的错误检测。
指令系统
指令格式
![202402202134432](https://i-blog.csdnimg.cn/blog_migrate/50e56a182849f1c8742b8e6c09fd63b7.png)
操作码指定要完成的操作或功能,地址码指定参与操作的操作数的地址。
寻址方式
指令的寻址方式
- 顺序寻址:下一条指令的地址由程序计数器 PC 给出,PC 每次自增+1;
- 跳跃寻址:下一条指令的地址由指令本身给出。
操作数的寻址方式
- 立即寻址:指令的地址码字段不是操作数的地址,而是操作数本身,速度最快
- 直接寻址:指令的地址码字段给出操作数内存的地址(操作数在内存中)
- 间接寻址:指令的地址码字段给出操作数在内存的地址的地址(操作数在内存中)
- 寄存器寻址:指令的地址码字段给出操作数在寄存器的编号(操作数在寄存器中)
- 寄存器间接寻址:指令的地址码字段给出寄存器的编号,寄存器中所存的内容为操作数在内存的地址(操作数在内存中)
- 相对寻址:指令的地址码字段是一个偏移量,这个偏移量加上程序计数器的值即为操作数在内存的地址:
- 基址寻址:指令的地址码字段是一个偏移量,这个偏移量加上基址寄存器的值即为操作数在内存的地址:
- 变址寻址:指令的地址码字段是一个偏移量,这个偏移量加上变址寄存器的值即为操作数在内存的地址。
寻址方式速度对比如下:
![计算机系统的多级层次结构](https://i-blog.csdnimg.cn/blog_migrate/3add87f52df29e675b81a1cd0ee9745e.png)
指令集
- CISC 复杂指令集(Complex Instruction Set Computer):各条指令按顺序串行执行。
- RISC 精简指令集(Reduced Instruction Set Computer):减少指令总数,采用优化编译、硬布线、重叠寄存器窗口等技术。
特性 | CISC | RISC |
---|---|---|
指令数目 | 多 | 少 |
指令长度 | 可变长指令 | 大部分等长指令 |
控制器复杂性 | 复杂 | 简单 |
寻址方式 | 较丰富,提高编程灵活性 | 较少,以提高效率 |
编程便利性 | 指令多,编程灵活 | 编程量更大,采用较多通用寄存器 |
实现方式 | 微程序控制技术 | 采用硬布线逻辑控制优化编译程序,采用流水线技术 |
指令流水线
指令控制方式:顺序方式,重叠方式,流水方式。
流水线性能公式:
- 非流水执行时间:一条指令执行的时间×指令总数
- 流水执行时间:一条指令执行的时间+最长流水段时间×(n-1),n为指令总数
- 加速比:非流水方式与流水方式所用时间之比
- 流水线的操作周期:为最长流水段时间
- 流水线的吞吐率:为最长流水段时间的倒数
- 连续 n 条指令的吞吐率:指令总数/总时间
存储系统
存储器的层次化结构
在计算机系统中,通常采用多级存储器结构,如图所示:
![计算机系统的多级层次结构](https://i-blog.csdnimg.cn/blog_migrate/278481d405232b7cf3c53cc3c75e837e.png)
在图中由上至下,位价越来越低,速度越来越慢,容量越来越大,CPU 访问的频率也越来越低。
实际上,存储系统层次结构主要体现在 Cache- 主存层次和主存- 辅存层次:
- Cache- 主存:主要解决CPU和主存速度不匹配的问题,
- 主存- 辅存:主要解决存储系统的容量问题。
在存储体系中,Cache、主存能与 CPU 直接交换信息,辅存则要通过主存与 CPU 交换信息;主存与CPU、Cache、辅存都能交换信息。
注:
在“Cache-主存”和“主存辅存”层次中,上一层中的内容都只是下一层中的内容的副本,即 Cache(或主存)中的内容只是主存(或辅存)中的内容的一部分。
存储器的分类
按存储器的所处位置分:内存、外存。
按存储器的构成材料分:磁存储器、半导体存储器、光存储器。
按存储器的工作方式分:读/写存储器(RAM)、只读存储器(ROM)。
按访问方式分:按地址访问的存储器、按内容访问的存储器。
按寻址方式分:随机存储器、顺序存储器(磁带)、直接存储器(磁盘、光盘)。
相联存储器
相联存储器是一种按内容访问的存储器。
随机存储器
SRAM(静态随机存储器) | DRAM(动态随机存储器) | |
---|---|---|
优点 | 无须定期刷新、存取速度快 | 集成度高、功耗小 |
缺点 | 元件多、集成度低;功耗大;体积大 | 电容需要定期刷新;存取速度慢 |
应用 | 缓存 | 内存 |
Cache 高速缓冲存储器
局部性原理
- 时间局部性:程序中存在着大量的循环操作,一条指令执行后 ,不久之后指令可能被再次执行。(循环)
- 空间局部性:指令通常是顺序存放,顺序执行的,一旦程序访问了 某个存储单元,不久之后附近的存储单元也将被访问
Cache 的基本工作原理
![2021060619562887](https://i-blog.csdnimg.cn/blog_migrate/930288e1d8e16f1fba802d5efad4525d.png)
-
为便于 C a c h e \color{purple}{Cache} Cache 和主存之间交换信息, C a c h e \color{purple}{Cache} Cache 和主存都被划分为相等的块, C a c h e 块 \color{purple}{Cache块} Cache块 又称为 C a c h e 行 \color{purple}{Cache行} Cache行 ,每块由若干字节组成,块的长度称为块长( C a c h e 行长 \color{purple}{Cache行长} Cache行长 )。主存中的一个块也称为一个页/页面/页框。
-
每次被 C P U \color{blue}{CPU} CPU 访问的主存块,一定会被立即调入 C a c h e 块 \color{purple}{Cache块} Cache块 中(复制)。
-
CPU 与 Cache 之间的数据交换以字为单位,而 Cache 与主存之间的数据交换则以 Cache 块为单位。
-
C P U CPU CPU 欲访问的信息已在 C a c h e Cache Cache 中的比率称为 C a c h e Cache Cache 的命中率。
设一个程序执行期间,
C
a
c
h
e
\color{purple}{Cache}
Cache 的总命中次数为
N
c
\color{blue}{N_c}
Nc,访问主存的总次数为
N
m
\color{blue}{N_m}
Nm,则命中率
H
\color{blue}{H}
H,为
H
=
N
c
(
N
c
+
N
m
)
{H=} {\frac{N_c}{\left ( N_c+N_m\right )}}
H=(Nc+Nm)Nc
设
t
c
\color{blue}{t_c}
tc 为命中时的
C
a
c
h
e
\color{purple}{Cache}
Cache 访问时间,
t
m
\color{blue}{t_m}
tm 为未命中时的访问时间,
1
−
H
\color{blue}{1-H}
1−H 表示未命中率,则:
-
同时访问 Cache 和主存时, C a c h e \color{purple}{Cache} Cache 主存系统的平均访问时间 T a \color{blue}{T_a} Ta 为:
T a = H t c + ( 1 − H ) t m {T_a=} { {Ht_c} + {\left ( 1-H\right )}t_m} Ta=Htc+(1−H)tm -
先访问 Cache 再访问主存时, C a c h e \color{purple}{Cache} Cache 主存系统的平均访问时间 T a \color{blue}{T_a} Ta 为:
T a = H t c + ( 1 − H ) ( t c + t m ) {T_a=} { {Ht_c} + {\left ( 1-H\right )}(t_c+t_m)} Ta=Htc+(1−H)(tc+tm)
Cache 和主存的映射方式
C a c h e Cache Cache 块中存放的是主存中某个块的副本,地址映射是指把主存地址空间映射到 Cache 地址空间,即把存放在主存中的信息按照某种规则装入 C a c h e Cache Cache。
由于 C a c h e Cache Cache 块数比主存块数少很多,因此主存中只有一部分块的信息可放在 C a c h e Cache Cache 中,因此在 C a c h e Cache Cache 中要为每块加个**标记**, 指明它是主存中哪块的副本。该标记的内容相当于主存中块的编号,为了说明 C a c h e Cache Cache 行中的信息是否有效每个 C a c h e \color{red}Cache Cache 行需要一个有效位。
直接映射
![2021060710472044](https://i-blog.csdnimg.cn/blog_migrate/2418afae3ea38472f650edd197128a98.png)
主存中的每一块只能装入 C a c h e Cache Cache 中的唯一位置。 若这个位置已有内容,则原来的块将无条件地被替换出去(无须使用替换算法)。
直接映射的关系可定义为 :
j
=
i
%
2
n
j= i\%2^n
j=i%2n
式中,
j
\textcolor{blue}{j}
j 是
C
a
c
h
e
的块号
\color{red}{Cache 的块号}
Cache的块号,
i
\textcolor{blue}{i}
i 是
主存的块号
\color{red}{主存的块号}
主存的块号,
2
n
\color{blue}{2^n}
2n 是
C
a
c
h
e
的总块数
\color{red}{Cache 的总块数}
Cache的总块数。主存块号的低
n
\color{red}n
n 位正好是要装入的
C
a
c
h
e
Cache
Cache 行号。给每个
C
a
c
h
e
Cache
Cache 行设置一个长为 KaTeX parse error: Invalid color: '' at position 7: \color{̲}̲
t
=
m
−
c
\textcolor{#E91E63}{t=} \textcolor{#9933FF}{m-c}
t=m−c 的标记(tag):
![20210606215042350](https://i-blog.csdnimg.cn/blog_migrate/5abc9e6e270af30a5adb326573e06c58.png)
CPU访存过程如下:
![20210607191949608](https://i-blog.csdnimg.cn/blog_migrate/1a67a031049612c1e321969da73dbcbf.png)
首先根据访存地址中间的 n n n 位,找到对应的 C a c h e Cache Cache 行,将对应 C a c h e Cache Cache 行中的标记和主存地址的高 t t t 位标记进行比较,若相等且有效位为1,则访问 Cache“命中”,此时根据主存地址中低位的块内地址,在对应的 C a c h e Cache Cache 行中存取信息;若不相等或有效位为 0,则“不命中”,此时 CPU 从主存中读出该地址所在的一块信息送到对应的 C a c h e Cache Cache 行中,将有效位置 1,并将标记设置为地址中的高 t t t 位,同时将该地址中的内容送 C P U CPU CPU。
全相联映射
主存中的每一块可以装入 Cache 中的任何位置,每行的标记用于指出该行取自主存的哪一块,所以 CPU 访存时需要与所有 Cache 行的标记进行比较。全相联映射方式的优点是比较灵活,Cache 块的冲突概率低,空间利用率高,命中率也高;缺点是标记的比较速度较慢,实现成本较高,通常需采用昂贵的按内容寻址的相联存储器进行地址映射,如图所示。
![20210607191004396](https://i-blog.csdnimg.cn/blog_migrate/e903c5d0436d6f1d665ac4a55ba2fb68.png)
全相联映射的地址结构为:
![20210607105301857](https://i-blog.csdnimg.cn/blog_migrate/b725deb256724593cbc8826d7b9d010c.png)
组相联映射
![20210607190742744](https://i-blog.csdnimg.cn/blog_migrate/9f2cf5b919b90e93a615e469d1380e2d.png)
将 C a c h e Cache Cache 空间分成大小相同的组,主存的一个数据块可以装入组内的任何个位置, 即组间采取直接映射,而组内采取全相联映射。它是对直接映射和全相联映射的一种折中, 当 Q = 1 \textcolor{#E91E63}{Q=} \textcolor{#9933FF}{1} Q=1 时变为全相联映射,当 Q = C a c h e 块数 \textcolor{#E91E63}{Q=} \textcolor{#9933FF}{Cache块数} Q=Cache块数 时变为直接映射。假改每组有 r r r 个 C a c h e Cache Cache行,则称之为 r r r 路组相联。
组相联映射的关系可以定义为:
j
=
i
%
Q
{j=} {i\% Q}
j=i%Q
式中,
j
\textcolor{blue}{j}
j 是
C
a
c
h
e
行的组号
\color{red}{Cache 行的组号}
Cache行的组号,
i
\textcolor{blue}{i}
i 是
主存的块号
\color{red}{主存的块号}
主存的块号,
Q
\color{blue}{Q}
Q 是
C
a
c
h
e
的组数
\color{red}{Cache 的组数}
Cache的组数。
![20210607105912110](https://i-blog.csdnimg.cn/blog_migrate/779392af884c68800b93c315cb761674.png)
Cache 中主存块的替换算法
在采用全相联映射或组相联映射方式时,从主存向 C a c h e \color{purple}{Cache} Cache 传送一个新块, 当 C a c h e \color{purple}{Cache} Cache 或 C a c h e \color{purple}{Cache} Cache 组中的空间已被占满时,就需要使用替换算法置换 C a c h e \color{purple}{Cache} Cache 行。而直接映射无须考虑替换算法,直接新块替换旧块。
- 随机算法:随机地确定替换的 Cache 块。
- 先进先出算法(FIFO):选择最早调入的行进行替换。
- 近期最少使用算法(LRU):选择近期内长久未访问过的 Cache 行作为替换的行,平均命中率要比 F I F O FIFO FIFO 的高,是堆栈类算法。
- 最不经常使用算法(LFU):将一段时间内被访问次数最少的存储行换出。
虚拟存储器
虚拟存储器将主存或辅存的地址空间统一编址, 形成一个庞大的地址空间,在这个空间内,用户可以自由编程,而不必在乎实际的主存容量和程序在主存中实际的存放位置。
虚拟存储器管理方式分为:页式虚拟存储器、段式虚拟存储器、段页式虚拟存储器。
![20210607214430483](https://i-blog.csdnimg.cn/blog_migrate/edc62f8be8e778eb8e0459980fad3fb2.png)
页式虚拟存储器
-
以页为基本单位的虚拟存储器称为页式虚拟存储器。
-
虚拟空间与主存空间都被划分成同样大小的页,主存的页称为实页,虚存的页称为虚页。
-
把虚拟地址分为两个字段:虚页号和页内地址。
页表
虚拟地址到物理地址的转换是由页表实现的,页表是一张存放在主存中的虚页号和实页号的对照表。页表记录程序的虚页调入主存时被安排在主存中的位置。
![20210607214430483](https://i-blog.csdnimg.cn/blog_migrate/3117368f1615a4aa87384115728d309b.png)
-
有效位
也称装入位,用来表示对应页面是否在主存,若为1,则表示该虚拟页已从外存调入主存,此时页表项存放该页的物理页号;若为0,则表示没有调入主存,此时页表项可以存放该页的磁盘地址。
-
脏位
也称修改位,用来表示页面是否被修改过,虚存机制中采用回写策略,利用脏位可判断替换时是否需要写回磁盘。
-
引用位
也称使用位,用来配合替换策略进行设置,例如是否实现最先调入( F I F O FIFO FIFO 位)或最近最少用( L R U LRU LRU位)策略等。
地址变换的过程:
![20210608082556497](https://i-blog.csdnimg.cn/blog_migrate/350479a185342a5e5e08567ab2c710dd.png)
- CPU 执行指令时,需要先将虚拟地址转换为主存物理地址。
- 每个进程都有一个页表基址寄存器,存放该进程的页表首地址,然后根据虚拟地址高位部分的虚拟页号找到对应的页表项,若装入位为 1,则取出物理页号,和虚拟地址低位部分的页内地址拼接,形成实际物理地址;若装入位为 0,则说明缺页,需要操作系统进行缺页处理。
段式虚拟存储器
段式虚拟存储器中的段是按程序的逻辑结构划分的,各个段的长度因程序而异。由于段的长度可变,所以段表中要给出各段的起始地址与段的长度。
虚拟地址分为两部分:段号和段内地址
虚拟地址到实地址之间的变换是由段表来实现的。段表是程序的逻辑段和在主存中存放位置的对照表。段表的每行记录与某个段对应的段号、装入位、段起点和段长等信息。
![20210608195508397](https://i-blog.csdnimg.cn/blog_migrate/3048145b58b094effe267a988eec5884.png)
CPU 根据虚拟地址访存时,首先根据段号与段表基地址拼接成对应的段表行,然后根据该段表行的装入位判断该段是否已调入主存(装入位为“1”,表示该段已调入主存;装入位为“0”,表示该段不在主存中)。已调入主存时,从段表读出该段在主存中的起始地址,与段内地址(偏移量)相加,得到对应的主存实地址。
段页式虚拟存储器
把程序按逻辑结构分段,每段再划分为固定大小的页,主存空间也划分为大小相等的页,程序对主存的调入、调出仍以页为基本传送单位,这样的虚拟存储器称为段页式虚拟存储器。
段页式虚拟存储器中,每个程序对应一个段表, 每段对应一个页表,段的长度必须是页长的整数倍,段的起点必须是某一页的起点。
虚地址分为段号、段内页号、页内地址三部分。
CPU 根据虚地址访存时,首先根据段号得到段表地址;然后从段表中取出该段的页表起始地址,与虚地址段内页号合成,得到页表地址;最后从页表中取出实页号,与页内地址拼接形成主存实地址。
虚拟存储器 VS Cache
相同点
- 都是为了提高系统性能,两者都有容量、速度、价格的梯度。
- 都把数据划分为小信息块,并作为基本的传递单位,虚存系统的信息块更大。
- 都有地址的映射、替换算法、更新策略等问题。
- 依据程序的局部性原理应用“ 快速缓存的思想”,将活跃的数据放在相对高速的部件中。
不同点
- C a c h e Cache Cache 主要解决系统速度;虚拟存储器为了解决主存容量。
- C a c h e Cache Cache 全由硬件实现,是硬件存储器,对所有程序员透明;而虚拟存储器由OS和硬件共同实现,是逻辑上的存储器,对系统程序员不透明,但对应用程序员透明。
- 虚拟存储器系统不命中时对系统性能影响更大:CPU 与 Cache 和主存都建立了直接访问的通路,而辅存与 CPU 没有直接通路。也就是在 Cache 不命中时主存能和 CPU 直接通信,同时将数据调入 Cache;而虚拟存储器系统不命中时,只能先由硬盘调入主存,而不能直接和CPU通信。
磁盘
-
组成:磁道,磁头,扇区,盘面
-
地址结构:柱面号:盘面号:扇区号(块号)
-
读写时间:一次磁盘读写操作时间,由寻找时间、延迟时间和传输时间决定:
- 寻找时间:将磁头移动到指定磁道需要的时间: T s = m × n + s Ts=m \times n+s Ts=m×n+s
- 延迟时间:磁头定位到某一磁道扇区需要的时间: T r = 1 2 r ( 转速 r ) Tr=\frac{1}{2r}\left ( 转速r \right ) Tr=2r1(转速r)
- 传输时间:从磁盘读出或写入数据的时间: T r = b r N Tr=\frac{b}{rN} Tr=rNb
注:磁头在读写个物理块后需要经过短暂的处理时间才能开始处理下一块,对盘面交替编号可以减少延迟时间
磁盘调度算法
- 先来先服务算法(FCFS):按照进程请求访问磁盘的先后顺序进行调度,会产生“抖动”现象。。
- 最短寻找时间有限算法(SSTF):选择调度处理的磁道与当前磁头所在磁道距离最近的磁道,会产生饥饿现象。
- 扫描(SCAN)算法:在磁头当前移动方向上选择与当前磁头所在的磁道距离最近的请求作为下一次服务对象。
- 循环扫描算法(C-SCAN):磁头单向移动,回返时直接回到起始端。
- LOOK算法:在扫描算法的基础上改进为磁头不需要到达磁盘端点。
- C-LOOK算法:磁头单向移动,回返时直接回到左边第一个进程。
磁盘格式化
低级格式化(物理分区)、逻辑格式化(创建文件管理系统)
磁盘阵列技术
磁盘阵列是由多台磁盘存储器组成的一个快速、大容量、高可靠的外存子系统,常见的磁盘阵
列称为廉价冗余磁盘阵列(RAD)。常见的RAD如表1-2所示。
RAID级别 | 说明 | 用户空间 |
---|---|---|
RAID-0 | RAID-0 是一种不具备容错能力的磁盘阵列。由个磁盘存储器组成的0级阵列,其平均故障间隙时间(MTBF)是单个磁盘存储器的 n 分之一,但数据传输率是单个磁盘存储器的 n 倍 | |
RAID-1 | RAID-1 是采用镜像容错改善可靠性的一种磁盘阵列 | 50% |
RAID-2 | RAID-2 是采用海明码进行错误检测的一种磁盘阵列 | |
RAID-3 | RAID-3 减少了用于检验的磁盘存储器的个数,从而提高了磁盘阵列的有效容量(一般只有一个检验盘) | |
RAID-4 | RAID-4 是一种可独立地对组内各磁盘进行读/写的磁盘阵列,该阵列也只用一个检验盘 | |
RAID-5 | RAID-5 是对 RAID-4 的一种改进,它不设置专门的检验盘,同一个磁盘既记录数据,也记录检验信息,这就解决了前面多个磁盘机争用一个检验盘的问题。 | 当有 n 块阵列盘时,用户空间为 n-1 块盘容量,以较小盘的容量为主。 |
RAID-6 | RAID-6 磁盘阵列采用两级数据冗余和新的数据编码以解决数据恢复问题,使其在两上磁盘出现故障时仍然能够正常工作。在进行写操作时,RAID-6 分别进行两个独立的检验运算,形成两个独立的冗余数据,写入两个不同的磁盘 | 当有 n 块阵列盘时,用户空间为 n-2 块盘容量,以较小盘的容量为主。 |
输入/输出技术
内存与接口地址编址
独立编址
两者是完全独立的两个地址空间,它们是完全独立且相互隔离的。
- 缺点:用于接口的指令太少、功能太弱。
统一编址
内存地址和接口地址统一在一个公共的地址空间里,即内存单元和接口共用的地址空间。
-
优点:原则上用于内存的指令全部可以用于接口,大大增强了对接口的操作工程,而且在指令上不再区分内存或接口指令。
-
缺点:整个地址空间被分成两部分,其中一部分分配给接口使用,剩余的为内存所用,导致内存地址不连续。由于用于内存的指令和用于接口的指令是完全一样的,维护程序时需要根据参数定义表加以辨认。
输入/输出控制方式
程序直接控制方式
直接程序控制是指外设数据的输入/输出过程是在 CPU 执行程序的控制下完成的。
- 无条件传送:在此情况下,外设总是准备好的,它可以无条件地随时接收 CPU 发来的输出数据,也能够无条件地随时向CPU 提供需要的输入数据。
- 程序查询方式:在此情况下,利用查询方式进行输入/输出,就是通过 CPU 执行程序来查询外设的状态,判断外设是否准备好接收数据或准备好向 CPU 输入数据。
中断方式
中断方式允许 I/O 设备主动打断 CPU 的运行并请求服务,进而解放 CPU,使其向 I/0 控制器发送读命令后可以继续做其他工作。
中断处理方法:多中断信号线法、中断软件查询法、菊花链法、总线仲裁法、中断向量表法。
DMA 直接存储器存储方式
CPU 接收到 I/O 设备的 DMA 请求时,给 I/O 控制器发出一条命令,启动 DMA 控制器,然后继续其他工作。DMA 控制器直接与存储器交互,传送整个数据块。传送完成后,DMA 控制器发送一个中断信号给处理器。
CPU 仅在过程开始和结束时有处理,过程中 DMA 占用系统总线传送数据。
通道控制
设置一个专门负责输入/输出的处理机(IOP),实现对一组数据块的读写以及相关控制和管理。
总线结构
按照功能分为:地址总线、数据总线、控制总线。
按与 CPU 的位置可划分为:
- 内部总线是微机内部芯片与处理器之间的连接;
- 系统总线是 CPU 与内存、接口等之间连接;
- 外部总线则是微机和外部设备之间的连接。
按照总线中数据线的多少可划分为:并行总线和串行总线。
计算机安全
信息安全的基本五要素
- 机密性:确保信息不暴露给未授权的实体或进程。
- 完整性:只有被允许的人才能修改数据,并能判断数据是否已被篡改。
- 可用性:得到授权的实体在需要时可访问数据。
- 可控性:可控制授权范围内的信息流向及行为方式。
- 可审查性:对出现的安全问题提供调查的依据和手段。
加密技术
对称加密(私人密钥加密)
- 数据加密标准(DES):主要采用替换和移位的方法加密。
- 三重DES(3DES,又称 TDEA):在 DES 的基础上采用三重 DES,效果相当于将密钥的长度加倍。
- RC-5:RC-5 是在 RCF2040 中定义的,RSA 数据安全公司的很多产品都在使用 RC-5。
- 国际数据加密算法(IDEA):在 DES 算法的基础上发展起来的,类似于三重 DES。
- 高级加密标准(AES):基于排列和置换运算。排列是对数据重新进行安排,置换是将一个数据单元替换为另一个数据单元。
非对称加密(公开密钥加密)
非对称加密算法需要两个密钥:公开密钥和私有密钥。如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法称为非对称加密算法。如 RSA 算法。
非对称加密算法有两个不同的模型:
![20210608195508397](https://i-blog.csdnimg.cn/blog_migrate/5049ff925ffb6e3e1a990ad40ee6a6c8.png)
数字签名(非对称加密)
数字签名的主要过程:
- 信息发送者使用一个单项散列函数(Hash 函数)对信息生成信息摘要;
- 信息发送者使用自己的私钥签名信息摘要;
- 信息发送者把信息本身和已签名的信息摘要一起发送出去;
- 信息接收者使用与发送者相同的单项散列函数(Hash 函数)对接收的信息生成新的信息摘要,再使用发送者的公钥对信息进行验证,来确认信息发送者的身份和信息是否被修改。
数字加密(对称加密+非对称加密)
数字加密的主要过程:
- 当信息发送者需要发送信息时,首先生成一对对称密钥,用该对称密钥加密要发送的报文;
- 信息发送者用信息接收者的公钥加密上述对称密钥;
- 信息发送者将上述两个步骤的结果集合在一起传给信息接收者,称为数字信封;
- 信息接收者使用自己的私钥解密被加密的对称密钥,再用此对称密钥解密被发送方加密的密文,得到真正的报文。
注:
数字签名使用的是发送方的密钥对(让别人看):发送方用自己的私钥进行加密,接收方用发送方的公钥进行解密。
数字加密使用的是接收方的密钥对(让指定人看):发送方用接收方的公钥进行加密,接收方用自己的私钥进行解密。
计算机可靠性
平均无故障时间(MTBF):两次故障之间系统能正常工作的时间的平均值。
M
T
B
F
=
1
/
λ
=
系统总运行时间
/
故障次数
MTBF=1/\lambda=系统总运行时间/故障次数
MTBF=1/λ=系统总运行时间/故障次数
平均修复时间(MTRF):可维修性,指从故障发生到机器修复平均所需要的时间。
M
T
R
F
=
系统总修复时间
/
故障次数
MTRF=系统总修复时间/故障次数
MTRF=系统总修复时间/故障次数
计算机可用性:
A
=
M
T
B
F
M
T
B
F
+
M
T
R
F
A=\frac{MTBF}{MTBF+MTRF}
A=MTBF+MTRFMTBF
串联系统
系统的可靠性 R R R 为: R = R 1 R 2 R 3 ⋅ ⋅ ⋅ R n R=R_1R_2R_3···R_n R=R1R2R3⋅⋅⋅Rn
系统的失效率 λ \lambda λ 为: λ = λ 1 λ 2 λ 3 ⋅ ⋅ ⋅ λ n \lambda=\lambda_1\lambda_2\lambda_3···\lambda_n λ=λ1λ2λ3⋅⋅⋅λn
并联系统
系统的可靠性 R R R 为: R = 1 − ( 1 − R 1 ) ( 1 − R 2 ) ⋅ ⋅ ⋅ ( 1 − R n ) R=1-(1-R_1)(1-R_2)···(1-R_n) R=1−(1−R1)(1−R2)⋅⋅⋅(1−Rn)
系统的失效率
λ
\lambda
λ 为:
1
1
λ
j
∑
j
=
1
n
1
j
\frac{1}{\frac{1}{\lambda_j }\sum_{j=1}^{n} \frac{1}{j} }
λj1∑j=1nj11
计算机系统性能评测
评测常用方法:时钟频率、指令执行速度、等效指令速度法、数据处理速率(PDR)。