计算机网络概述
一、计算机系统基础知识
1.1 计算机系统硬件基本组成
计算机系统是由硬件和软件组成的。基本硬件系统由 运算器
控制器
存储器
输入设备
输出设备
。
1.1.1 中央处理单元(CPU)
运算器
、控制器
、寄存器
和内部总线
等部件被集成在一起统称为中央处理单元(CPU)
(硬件系统的核心)。CPU 用于数据加工处理,完成各种算术、逻辑运算及控制能力。
1、功能
- 程序控制(重要功能):通过执行指令来控制程序的顺序。
- 操作控制:生产指令操作信号–>把操作信号送往对应的部件–>控制相应的部件按指令的功能要求进行操作。
- 时间控制:指令执行过程中操作信号的出现时间、持续时间以及出现的时间顺序都需要进行严格控制。
- 数据处理(根本任务):对数据进行算术运算及逻辑运算等方式对数据进行加工处理。
2、组成
运算器
由算术逻辑单元
、累加寄存器
、数据缓冲寄存器
、状态条件寄存器
组成。是数据加工处理部件。
注意:运算器所进行的全部操作都是由控制器发出的控制信号来指挥的,so 它是执行部件。
1、算术逻辑单元(ALU):负责数据处理,实现对数据的算术运算和逻辑运算。
2、累加寄存器(AC): 为 ALU 提供一个工作区。例如:在执行一个减法运算前,先将被减数取出暂存在 AC 中,再从内存存储器中取出减数,然后同 AC 的内容相减,将所得的结果送回 AC 中
。
注意:运算器中至少要有一个累加器寄存器。
3、数据缓冲寄存器(DR):作为 CPU 和内存、外部设备之间数据传送的中转站。作为 CPU 和内存、外围设备之间在操作速度上的缓冲。
注意:在单累加器结构的运算器中,数据缓冲寄存器还可兼作为操作数寄存器。
4、状态条件寄存器(PSW):状态条件寄存器保存由算术指令和逻辑指令运行或测试或测试的结果建立的各种条件码内容,主要分为状态标志和控制标志。
功能
1、执行所有的算术运算
2、执行所有的逻辑运算并进行逻辑测试
控制器
用于控制整个 CPU 的工作,它决定了计算机运行过程的自动化。控制器一般包括指令控制逻辑
、时序控制逻辑
、总线控制逻辑
和中断控制逻辑
等几个部分。
指令控制逻辑过程:取指令–>指令译码–>按指令操作执行–>形成下一条指令地址。
1、指令寄存器(IR):当 CPU 执行一条指令时,先把它从内存储器取到缓冲寄存器中,再送入 IR 暂存,指令译码器根据 IR 的内容产生各种微操作指令,控制其他的组成部件工作,完成所有的功能。
2、程序计数器(PC):具有寄存信息
和计数
功能,即又称指令计数器
。程序的执行一般分为两种,一种是顺序执行,一种是转移执行。由于大多数指令都是按顺序来执行的,所以修改的过程通常只是简单地对 PC 加 1。当遇到转移指令时,后继指令的地址根据当前指令的地址加上一个向前或向后的位移的位移得到,或者根据转移指令给出直接转移的地址得到。
3、地址寄存器(AR): 保存当前 CPU 所访问的内存单元的地址。
4、指令译码器(ID):指令包含操作码和地址码。指令译码器是对指令中的操作码字段进行分析解析,识别该指令规定的操作,向操作控制器发出具体的控制信号,控制各部件工作,完成所需的功能。
时序控制逻辑–>为每条指令按时间顺序提供有应有的控制信号。
总线逻辑–>为多个功能部件服务的信息通路的控制电路。
中断控制逻辑–>用于控制各种中断请求,并根据优先级的高低对中断请求进行排队,逐个交给 CPU 处理。
寄存器
分为专用寄存器
和通用寄存器
。运算器和控制器中的寄存器是专用寄存器,其作用是固定的。
多核CPU
核心又称为内核,是 CPU 最重要的组成部分。CPU 所有的计算、接受/存储命令、处理数据都由核心执行。各种 CPU 核心都是具有固定的逻辑结构,一级缓存、二级缓存、执行单元、指令级单元和总线接口等逻辑单元都会有合理的布局。
多核即在一个单芯片上面集成两个甚至更多个处理器内核,其中每一个内核都有自己的逻辑单元、控制单元、中断处理器、运算单元,一级缓存、二级 Cache 共享独有,其中部件的完整性和单核处理器内核相比完全一样。
多核 CPU 最大的优点是可以满足用户同时进行多任务处理的要求。
要发挥 CPU 的多核性能,就需要操作系统能够及时、合理得给各个核分配任务和资源(如:缓存、总线、内存等),也需要应用软件在运行时可以把并行的线程同时交付给多个核心分别处理。
-
存储器
存储器
是计算机系统中的记忆设备,分为内部存储器
和外部存储器
。内部存储器速度高、容量小。一般用于临时存放程序,数据及中间结果。;外部存储器容量大、速度慢。可以长期保存程序和数据。 -
外部设备
输入和输出设备合称为外部设备
1.1.2 数据表示
各种数值在计算机中表示的形式称为机器数
。
机器数分为:无符号数
和 带符号数
无符号数
表示正数,在机器数中没有符号位。
带符号数
机器数的最高位是表示正、负的符号位,其余位则表示数值。为了便于运算,带符号的机器数采用原码、反码、补码等不同的编码方法,机器数的这些编码方法称为码制
。
原码、反码、补码和移码
原码表示法
n为机器字长
最高位是符号位,0表示正数,1表示负数
,其余的 n-1 位表示数值的绝对值
。
example
:若机器字长为8位
反码表示法
n为机器字长
example:若机器字长为8位
补码表示法
n为机器字长
正数的补码与其原码和反码相同,负数的补码等于其反码的末尾加1。
example:若机器字长为8位
移码表示法
将补码的符号位取反
定点数和浮点数
定点数
小数点的位置固定不变的数。小数点的位置通常有两种约定方式:定点正数
、定点小数
浮点数
小数点的位置不确定
一个二进制 N 可以表示为更一般的形式
N
=
2
E
t
i
m
e
s
F
N=2^{E}\\times F
N=2EtimesF ,其中 E 称为阶码,F称为尾数。用阶码和尾数表示的数称为浮点数,表示方法称为浮点表示法
。
在浮点表示法中,阶码为带符号的纯正数,尾码为带符号的纯小数。
浮点数的表示格式:
浮点数所能表示的数值范围
有由阶码
决定,精度
由于尾数
决定
规范化就是将位数的绝对值限定在区间[0.5,1]。
当尾数用补码表示时,要注意:
若为数 M ≥ 0 M\geq 0 M≥0 ,规格化的尾数形式为 M=0.1XXX…X ,X 可为0,也可为1,即将尾数限定在区间[0.5,1]。
若为数 M < 0 M <0 M<0,…………即将尾数限定在区间[-1,-0.5]。
当浮点数的阶码用 R 位的移码表示,尾数用 M 位的补码表示,浮点数表示的数值范围:
最大: + ( 1 − 2 − m + 1 ) × 2 ( 2 r − 1 − 1 ) +( 1-2^{-m+1}) \times 2^( 2^{r-1}-1) +(1−2−m+1)×2(2r−1−1)
最小: − 1 × 2 ( 2 r − 1 − 1 ) -1\times 2^( 2^{r-1}-1) −1×2(2r−1−1)
工业标准-IEEE754
标准的表示形式为: ( − 1 ) S 2 E ( b 0 b 1 b 3 … b p − 1 ) ( -1) ^{S}2^{E}( b_{0}b_{1}b_{3}\ldots b_{p-1}) (−1)S2E(b0b1b3…bp−1)
其中, ( − 1 ) S ( -1) ^{S} (−1)S 浮点数的数符,当 S 为 0 时表示正数,S 为 1 时表示负数;E 为指数(阶码),用移码表示;
( b 0 b 1 b 3 … b p − 1 ) ( b_{0}b_{1}b_{3}\ldots b_{p-1}) (b0b1b3…bp−1)为尾数,长度为 p 位,用原码表示。
根据 IEEE754 标准,被编码的值分为 3 种不同的情况:规范化的值
、非规范化的值
和特殊值
。
【1】规范化的值:当阶码部分的二进制值不全为0,也不全为1时。
example:利用 IEEE754 标准将数 176.0625 表示为单精度浮点数。
1、十进制数–>转成二进制 (转换过程访问:https://www.cnblogs.com/xkfz007/articles/2590472.html)
( 176.065 ) 10 = ( 10110000.001 ) 2 ( 176.065) _{10}=( 10110000.001) _{2} (176.065)10=(10110000.001)2
2、规格化处理
10110000.001 10110000.001 10110000.001 = 1.0110000001 × 2 7 1.0110000001\times 2^{7} 1.0110000001×27
将 b 0 b_{0} b0 去掉并扩展为单浮点数所规定的 23 位尾数。
01100000010000000000000
3、求阶码
1.01100000001
×
2
7
1.01100000001\times 2^{7}
1.01100000001×27的指数为 7 ,单精度浮点数规定指数的偏移量为 127
。
所有 E = 7 + 127 = 134 ,求得移码为 10000110。
0 10000110 01100000010000000000000
【2】非规范化的值
阶码的二进制全为 0 。指数的真值为1–偏移量(对于单精度浮点数为-126,双精度浮点数为-1022),尾数的值就是二进制形式对应的小数,不包含隐含的1。
用途:①表示数值0;②表示那些非常接近于0的数。
【3】特殊值
阶码的二进制全为1;
尾数部分全为0时表示无穷大;符号为为0表示 + ∞ +\infty +∞,为1时表示 − ∞ -\infty −∞;
尾数部分不全为0表示 N a N NaN NaN。
浮点数的运算
设有浮点数 X = M × 2 j X=M\times2^j X=M×2j, Y = N × 2 j Y=N\times2^j Y=N×2j
- 对阶:使两个数阶码相同。令 k = ∣ i − j ∣ k=|i-j| k=∣i−j∣,把阶码小的数的尾数右移k位,使其阶码加上k
- 求尾数和/差
- 结果规格化并判溢出:若运算结果所得的尾数不是规格化数,则进行规格化处理。当尾数溢出时,需调整阶码
- 舍入处理:在对结果右归时,尾数的最低位将因被移出而丢弃。另外在对阶过程中也会将尾数右移使最低位丢掉。因此需要进行舍入处理,以求得最小运算误差
- 溢出判别:以阶码为准,若阶码溢出,则运算结果溢出;若阶码下溢(小于最小值),则结果为0;否则结果正确,无溢出。
浮点数相乘:其积的阶码等于两乘数的阶码相加,尾数等于两乘数的尾数相乘。
浮点数相除:其商的阶码等于被除数的阶码减去除数的阶码,尾数等于被除数的尾数减去除数的尾数。
注意:乘除运算的结果都需要进行规格化处理并判断阶码是否溢出。
1.1.3 校验码
使用校验码的方法来检测传送的数据是否出错。
码距
指一个编码系统中任意两个合法编码之间至少有多少个二进制位不同。例如:4 位 8421 码的码距为1 ,在传输过程中,该代码的一位或多位发生错误,都将变成另一个合法的编码,因此这样编码无检错能力。
奇偶校验码
在编码中增加一位校验位来使编码中 1 的个数为奇数(奇校验)或者为偶数(偶校验),从而时码距变为2。奇校验,可以检测代码中奇数位出错的编码,但不能发现偶数位出错的情况,即当合法编码中的奇数位发生了变化,即当编码中的0变成了1或1变成了0,则该编码中1 的个数的奇偶性就发生了变化。
常用的奇偶检验码有:水平奇偶检验码
、垂直奇偶校验码
、水平垂直奇偶校验
海明码
构成方法是在数据位之间的特定位置上插入 k 个校验位,通过扩大码距来实现检错和纠错。
设数据位是 n 位, 校验位是 k 位,则 n 与 k 必须满足以下关系: 2 k − 1 ≥ n + k 2^{k}-1\geq n+k 2k−1≥n+k
设k个校验位为 P k P k − 1 , … , P 1 P_kP_{k-1},\dots, P_1 PkPk−1,…,P1,n个数据位为 D n − 1 D n − 2 , … , D 1 D 0 D_{n-1}D_{n-2},\dots, D_1D_0 Dn−1Dn−2,…,D1D0,对应的海明码为 H n + k H n + k − 1 , … , H 1 H_{n+k}H_{n+k-1},\dots, H_1 Hn+kHn+k−1,…,H1,则
- P i P_i Pi在海明码第 2 i − 1 2^{i-1} 2i−1个位置,数据为=位从低到高占据海明码中剩余位置
- 海明码中的任何一位都是由若干个校验位来校验的。其对应关系如下:被校验的海明位的下标等于所有参与校验该位的校验位的下标之和,而校验位由自身校验。
对千 8 位的数据位,进行海明校验需要 4 个校验位 (23—1=7, 24-1=15>8+4) 。令数据位为
D
7
,
D
6
,
D
5
,
D
4
,
D
3
,
D
2
,
D
1
,
D
0
D_7,D_6,D_5,D_4,D_3,D_2,D_1,D_0
D7,D6,D5,D4,D3,D2,D1,D0,校验位为
P
4
,
P
3
,
P
2
,
P
1
P_4,P_3,P_2,P_1
P4,P3,P2,P1,形成的海明码为
H
1
2
,
H
1
1
,
…
,
H
3
,
H
2
,
H
1
H_12,H_11, …,H_3,H_2,H_1
H12,H11,…,H3,H2,H1,则编码过程如下:
循环冗余校验码CRC
利用生成多项式为k个数据位产生r个校验码来进行编码,其编码长度为
k
+
r
k+r
k+r,代码格式为:
在求CRC编码时,采用的是模2运算,按位运算,不发生借位和进位。
1.2 计算机体系结构
1.2.1 计算机体系结构的发展
概述
计算机体系结构
、计算机组织
和计算机实现
的关系:
-
体系结构:计算机的概念性结构和功能属性。
-
组织:计算机组成原理(计算机体系结构的逻辑实现,包括计算机内的数据流和控制流的组成以及逻辑设计等)。
-
实现:计算机组织的物理实现。
分类
1、(宏观)按处理机的数量分:单处理系统
、并行处理与多处理系统
、分布式处理系统
2、(微观)按并行程度分:Flynn 分类法
、冯泽云分类法
、Handler 分类法
、Kuck分类法
-
Flynn :按指令流和数据流的多少分类(单/多指令:单/多数据流,4种)
-
冯泽云:按并行度分类(字串/并行:位串/并行,4种)
-
Handler:提出一个基于硬件并行程度计算并行度的方法(处理机级、每个处理机中的算逻辑单元、每个算逻辑单元中逻辑门电路级),分别计算这三级中可以并行或流水处理的程序,即可算出某系统饿并行度
-
Kuck:按指令流和执行流及其多重性分(单/多指令:单/多执行流,4种)
注:
- 指令流:机器执行的指令序列;
- 数据流:指令调用的数据序列;
- 并行度:计算机系统在单位时间内能够处理的最大二进制位数。
指令系统
指令集体系结构:一个处理器支持的指令和指令的字节级编码
不同的处理器族支持不同的指令集体系结构。
指令集体系结构的分类
从体系结构的观点分
1、操作数在 CPU 中的存储方式
2、显式操作数的数量
3、操作数的位置
4、指令的操作
5、操作数的类型与大小
按暂存机制分
根据在CPU内部存储操作数的区别:堆栈(Stack)、累加器(Accumulator)、寄存器组
注意:通用寄存器(GPR)的关键性优点是编译程序能有效地使用寄存器,无论是计算表达式的值,还是从全局的角度使用寄存器来保存变量的值。寄存器能保存变量,当变量分配给寄存器时,访存流量会减少,程序运行会加速,而且代码密度也会得到改善。
CISC和RISC
CISC(复杂 指令集)和 RISC(精简指令集)是指令集发展的两种途径。
CISC:用更为复杂的新指令取代原先由软件子程序完成的功能,实现软件的硬件化,导致机器的指令系统越来月庞大、复杂。
RISC:通过减少指令总数和简化指令功能降低硬件设计的复杂度,使用指令能够单周期执行,并通过优化编译提高指令的执行速度。采用硬布线控制逻辑优化编译程序。
优化:
- 提高目标程序的实现效率:对动态和静态使用频率进行优化,既可以减少程序所需的存储空间,又可以提高程序的执行速度。
- 面向高级程序语言:缩小高级语言与机器语言之间的语义差距。
- 面向操作系统:缩小操作系统与体系结构之间的语义差异。