计算机软考-软件设计师
一 进制转换和数据的表示
1.进制转换
常使用的进制包括二进制,八进制,十进制,十六进制。
各个进制之间可以使用”短除法“实现进制转换上,上低下高。
-
二进制:包含数字0,1。逢二进一。小数位计算:乘2取整
-
八进制:包含数字0,1,2,3,4,5,6,7。逢八进一
-
十进制
-
十六进制进制:包含0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F(A表示十进制的10,F表示十进制的15)
2.Java语言中的进制表示
// 二进制使用0b开头
int num1=0b100;
// 八进制使用0开头
int num2=0107423;
// 十六进制
int num3=0xB23A;
3.机器数
真值:即符合人类习惯的数字。
各种数据在计算机中的表现形式称为机器数,其特点为数的符号使用0或1表示。其中1表示负数,又叫有符号数;0表示正数,又叫无符号数。
1.原码
使用数值部分表示真值的绝对值,符号位使用0或1,对应正负。
示例1:
28的二进制是11100,原码为 00011100,一般情况下,使用8的位数长度,如果不够则需要补0
示例2:
-15的二进制是1111,原码为10001111,负数的最高位使用 1 表示。
特殊情况:+0=00000000,-0=10000000。
2.反码
若符号位为0,则反码与原码相同;若符号位为1,则数值位
全部取反(0变1,1变0)。
示例1:
+29的二进制是11101,原码为00011101,反码为00011101(无符号数的反码与原码相同)
示例2:
-37的二进制是100101,原码为10100101,反码为11011010(有符号的数,符号位不变,数值位取反)
对比:11011010
特殊情况:+0=00000000,-0=11111111。
3.补码
无符号数(正数)的补码与原码相同。
有符号数(负数)补码为反码+1。
现代计算机中实际使用的正是补码。
示例1:
+29的二进制是11101,原码为00011101,反码为00011101,补码为 00011101
示例2:
-37的二进制是100101,原码为10100101,反码为11011010,补码为 11011010+1=11011011
对比:11011010
4.移码
移码在计算机科学中用于简化比较。
补码的符号位取反,其余各位保持不变,按照这样的规则得到移码。
任意两个移码可以直接比较大小,这是移码最重要,也是最大的优点。
在移码中,最高位(从左往右第一位数)不再直接表示正负,所以移码是一个无符号正数(移码只能用于表示正数)。
5.定点数
定点数是计算机中用来表示实数(包括整数和小数)的一种方式,其特点是小数点的位置是固定的。也就是说,在数据格式设计时就已经规定了整数部分和小数部分各占多少位。小数点不会浮动。
假设我们用一个 16 位二进制数表示一个定点数:
- 比如:12 位整数 + 4 位小数,记作 Q12.4 格式
- 小数点固定在第 4 位之前(从右往左数)
二进制:0001 1010 . 1100 = 26.75(十进制)
定点数常使用Qm.n表示法:M表示整数部分位数(包含符号位),N 表示小数位
优点:计算效率高,精度可控并且稳定,确定性强
缺点:表示范围有限,灵活性差,乘法需要额外处理。
6.浮点数
浮点数是小数点不固定的数,它能够表示更大范围的数。
在浮点数的表示中,阶码通常为带符号的纯整数,位数为带符号的纯小数。
浮点数通常表示为:
N=M⋅RE
N=M·R^E
N=M⋅RE
其中,M为尾数,R为奇数,E为阶码。
阶码决定浮点数所能表示的数值范围。
尾数决定浮点数所能表示的数值精度。
7.校验码
用来检测传输的数据是否出错。
码距:指一个编码系统中任意两个合法编码之间至少有多少个二进制位不同。
1.奇偶校验码:通过在数据中增加一个额外的”校验位“,使得整个编码中1的个数
满足某种奇偶性,从而检测传输或者存储过程中是否发生了单比特
错误。
校验位通常增加在最高位
或者最低位
。
奇偶校验只能发现错误,不能修改错误。
2.循环冗余校验码:CRC广泛应用于数据通信领域和磁介质存储介质中。它利用生成多项式为k个数据位产生r个校验位来进行编码,其编码长度为k+r
。
CRC的核心思想是将数据看作一个系数为0或1的多项式,并通过这个多项式除以一个预定义的生成多项式(Generator Polynomial),得到一个余数作为校验码。发送方将这个校验码附加到原始数据后发送出去;接收方收到数据后,使用相同的生成多项式再次进行除法运算,如果结果为0,则认为数据没有错误。
优点:强大的检错能力,广泛应用于通信协议和存储介质
缺点:不能纠正错误,只能检查出错误的存在,无法确定是哪个比特出错。实现较为复杂。
3.海明码:在数据之间插入k个校验码,通过扩大码距来实现检错和纠错。广泛应用于需要高可靠性的数据传输和存储系统中。
海明码的核心思想是通过增加一些冗余位,使得接收端能够检测并且纠正单比特错误。海明码的设计目标是确保任意两个合法编码之间的汉明距离是3
,从而具备纠正单比特错误的能力。
信息位:原始要传输的数据位。
校验位:用于检测和纠正错误的额外位。
汉明距离:两个等长字符串对应位置上不同字符的个数。
在一个汉明距离位n的编码系统中,可以检测最多 n-1
位错误,可以纠正最多 |(n-1)/2|
位错误。
二 计算机系统组成
1.五大组件

冯诺依曼计算机五大组件:
-
输入设备:将信息转换为机器可识别的形式,常见的输入设备有键盘,鼠标,麦克风,扫描仪等。
-
运算器:算术运算,逻辑运算,CPU的核心部分之一,直接决定计算机的能力。
-
控制器:负责协调其他组件工作。
-
存储器:提供数据和指令的存储空间,支持快速访问以供处理器使用。
主存储器:包括RAM(内存存取存储器),用于临时存放正在运行的程序和数据。
辅助存储器:硬盘驱动器(HHD),固态硬盘(SSD),用于长期保存数据。
-
输出设备:用于展示处理或计算结果给用户,常见的包括显示器,扬声器,打印机。
2.主存储器
主存储器主要由一下组件构成:
- 存储体
- MAR:地址寄存器,存放要访问的内存单元的地址。
- MDR:内存数据寄存器,读操作:MRD接收从内存中读出的数据然后交给CPU,写操作:CPU将数据交给MDR,MDR将其写入内存
类比理解:MAR是地址,MDR是内容
相关介绍:
- 存储元:计算机中能够存储一个二进制位(bit)的最小物理单位,通常是一个触发器。每个存储元可存1bit(存储一个0或1)。
- 存储单元:存储单元是CPU可寻址的最小单位,在绝大多数现代计算机中,这个单位是 1 字节(Byte) = 8 bit,每个存储单元有一个唯一的地址
- 存储字:是指一个存储单元中存放的一组二进制代码。是一组连续的存储单元所共同存储的一个数据单位,其位数等于存储字长(即 CPU 字长)
- 存储字长:是 CPU 一次能处理的数据宽度,常见的有16位,32位,64位。一个存储字的位数,等于 CPU 字长(如32或64位),
3.运算器(CPU-运算器)
运算器的用途是用于实现算数运算,以及逻辑运算(或与非)。
运算器组成如下:
- ACC**(Accumulator)**:累加器,用于存放操作数或运算结果
- MQ**(Multiplier-Quotient Register)**:乘商寄存器,在乘除运算时,存放操作数或运算结果
- X**(Operand Register)**:通用操作数寄存器,专门用于存放操作数的寄存器
- ALU**(Arithmetic Logic Unit)**:算数逻辑单元,通过复杂的电路实现算数运算和逻辑运算
- DR**(Data Register)**:数据缓存寄存器,暂存从内存读出的数据,或准备写入内存的数据
- PSW**(Program Status Word)**:程序状态字寄存器,用来保存指令运行标志,存放当前处理器的状态信息,反映最近一次运算的结果特征。
4.控制器(CPU-控制器)
控制器是 CPU 的“指挥中心”,负责取指令、分析指令、执行指令,并协调计算机各部件协同工作。它通过发出一系列控制信号来控制数据通路、ALU、存储器、I/O 设备等的操作。
控制器的主要组成:
- CU**(Control Unit)**:控制单元,分析指令,给出控制信号。
- IR**(Instruction Register)**:指令寄存器,存放当前执行的指令。指令在执行期间一直保留在 IR 中,供译码和执行使用。
- PC**(Program Counter):程序计数器,也叫指令指针**,存放下一条指令地址,在取指令后,PC 自动加 1(+1 是指增加一个指令字长,如 32 位系统中 +4 字节)。
- AR**(Address Register)**:有时也叫 MAR(Memory Address Register,地址寄存器,保存当前CPU所访问的内存单元地址。
- ID**(Instruction Decoder)**:指令译码器,对操作码进行分析。
5.计算机体系结构分类
计算机体系结构可以按照不同的标准进行分类,其中最著名和广泛使用的分类方法是Flynn分类法
。
该分类法根据指令流和数据流的多倍性将计算机体系结构分为四类。
分别为:SISD,SIMD,MISD,MIMD
S=Single,单一的
M=Multiple,多个的
- SISD:单指令流单数据流。
- SIMD:单指令流多数据流,各处理器以异步形式执行同一条指令。
- MISD:多指令流单数据流,被证明不可能,至少是不实际。理论上存在,实际上极少应用。
- MIMD:能够实现作业,任务,指令等。各级全面并行。
6.指令系统
在计算机科学中,指令(Instruction) 是计算机硬件能够理解和执行的基本操作命令。它是构成程序的最小单位,每条指令告诉计算机执行一个特定的任务或操作。
一台计算机上的所有指令集合构成了该计算机的指令系统,也叫指令集。
(1)指令格式
一条指令就是计算机语言的一个语句,它是一组有意义的二进制代码。指令由操作码(Opcode) 和操作数(Operand) 组成,其中操作码指定要执行的操作类型,而操作数则提供操作所需的数据或数据的位置。
- 操作码(Opcode):操作码指定要执行的操作类型
- 操作数(Operand):也叫地址码,提供操作所需的数据或数据的位置
(2)寻址方式
寻址方式是指确定指令中操作数位置的方法。每条指令不仅需要指定要执行的操作(通过操作码),还需要明确操作数的位置或值。不同的寻址方式允许处理器以不同方式访问数据,从而影响程序的灵活性,效率和复杂性。
- 立即寻址:操作数直接包含在指令中。优点是速度快,无需额外访存。缺点是限制了操作数范围,通常是较小的数。
- 寄存器寻址:操作数存储在寄存器中,优点是访问寄存器比访问内存快,缺点是寄存器数量有限。
- 直接寻址:指令中包含操作数所在的内存地址,优点是简单直接,适合固定地址的数据,缺点是不灵活,无法处理动态数据。
- 间接寻址:指令中包含的是一个执行操作数地址的地址,优点是非常适合动态数据结构(如链表,数组),缺点是需要两次访存,速度较慢。
- 寄存器间接寻址:与间接寻址类似,但地址保存在寄存器中。优点是比间接寻址稍快,因为只有一次寄存器访问。
- 基址寻址:使用基址寄存器和偏移量来计算操作数地址。优点是便于分段管理内存。
- 变址寻址:使用基址寄存器和变址寄存器来计算操作数地址。优点是非常适合数组和表格操作
- 相对寻址:基于当前指令地址加上一个偏移量来计算操作数地址。优点是常用于控制转移指令(跳转,调用),便于代码重新定位。
- 堆栈寻址:利用堆栈指针(SP)进行操作。优点是简化函数调用和返回,局部变量管理。
- 自增自检寻址:在访问后自动修改地址寄存器的内容。优点是适合循环处理连续数据(如字符串、数组)。
(3) 复杂指令计算机CISC和精简指令计算机RISC
CISC(Complex) | RISC(Reduced) | |
---|---|---|
指令系统 | 复杂,庞大 | 简单,精简 |
指令数目 | 多且复杂(一般多于200条) | 少且简单(一般少于100条) |
指令字长 | 不固定 | 定长 |
可访存指令 | 不加限制 | 只有Load/Store指令 |
指令执行时间 | 相差较大 | 基本都在一个周期内完成 |
指令使用频率 | 相差较大 | 都比较常用 |
通用寄存器数量 | 较少 | 多 |
控制方式 | 绝大多数为微程序控制 | 绝大多数为组合逻辑控制 |
指令流水线 | 可以通过一定方式实现 | 必须实现 |
(4)指令的流水处理
指令控制方式主要有三种:
- 顺序方式:严格按照指令在程序中的顺序依次执行每一条指令,优点是实现简单,易于理解和设计,缺点是效率较低,必须等待前面的指令执行完成才能开始执行,无法充分利用处理器资源。
- 重叠方式:也称为“指令重叠”或“并行处理”,允许在一个指令执行的过程中提前启动下一个指令的部分阶段。优点是提高了处理器利用率和效率,缺点是需要解决数据依赖性和控制依赖性的问题,增加了设计复杂度。
- 流水方式:将指令的执行过程划分为若干个阶段,每个阶段专门负责指令执行的一个特定方面,优点是显著提高了指令的平均吞吐量,使得处理器可以高效工作。缺点是同样需要处理好数据相关、控制相关等问题,此外,初始填充和最后清空流水线会引入额外延迟。
指令流水处理(Instruction Pipelining)是计算机体系结构中用于提高处理器执行效率的一种关键技术。它通过将指令的执行过程分解为多个较小的阶段,使得多个指令可以在不同的阶段同时进行处理,从而实现并行计算,提升处理器的整体吞吐量。
一个典型的指令执行过程可以被分为以下几个阶段:
- 取指(Fetch):从内存中获取指令。
- 解码(Decode):确定指令的操作以及需要使用的寄存器或内存地址。
- 执行(Execute):根据指令类型执行相应的算术逻辑运算。
- 访存(Memory Access):如果需要的话,访问数据存储器以读取或写入数据。
- 写回(Write Back):将计算结果写回到寄存器或其他存储区域。
在流水线设计中,每个阶段的处理时间决定了整个流水线的周期。为了保证流水线能够连续不断地运行,每个阶段的处理时间必须相等或通过调整使得最长的那个阶段决定整个流水线的周期。因此,流水线周期由最耗时的阶段决定。
指令的流水线周期计算如下:
Δt=max(t∗1,t∗2,...,t∗k)
Δt=max(t*1,t*2,...,t*k)
Δt=max(t∗1,t∗2,...,t∗k)
流水线中多条指令执行时间计算公式为:
多条指令执行时间 = 1条指令执行时间 + (指令条数 - 1 ) * 流水线周期
T=T∗first+(n−1)×Δt
T=T*first+(n−1)×Δt
T=T∗first+(n−1)×Δt
(5)流水线的吞吐率
吞吐率是指单位时间内,流水线能够完成的指令条数。它是衡量流水线处理速度和效率的重要指标。
简单理解:每秒能执行多少条指令
流水线吞吐率基本计算公式如下:
吞吐率TP=完成的指令总数n总执行时间T
吞吐率 TP= \frac{完成的指令总数n}{总执行时间 T}
吞吐率TP=总执行时间T完成的指令总数n
(6)流水线的加速比
流水线的加速比(Speedup)是衡量流水线技术相对于非流水线执行方式性能提升的一个重要指标。它表示使用流水线技术后,程序执行速度相比未使用流水线技术时加快了多少倍。
加速比(S)定义为非流水线执行时间与流水线执行时间之比:
S=Tnon−pipeTpipe
S=\frac{T_{non-pipe}}{T_{pipe}}
S=TpipeTnon−pipe
其中:
- T_non-pipe表示在没有使用流水线的情况下完成所有指令所需的总时间。
- T_pipe 表示使用流水线后完成相同数量指令所需的总时间。
(7)输入输出技术(CPU和外设之间的数据传输方式)
输入输出(I/O)技术是计算机系统中用于实现CPU与外部设备之间数据传输的重要机制。不同的I/O技术适用于不同的场景,主要根据效率、成本和复杂度来选择合适的方案。
-
直接程序控制方式:在完成数据的输入输出时,整个过程都是在CPU执行程序的控制下进行,具体可以细分为两种:
(1)无条件传送方式:无条件地和CPU交换数据
(2)程序查询方式:先通过CPU查询外设状态,准备好之后再与CPU进行数据交换
-
中断驱动:当外设有数据准备好或需要服务时,它会向CPU发送中断信号。CPU响应中断,暂停当前任务去处理该I/O任务。CPU无需等待,也无需查询I/O状态。
-
直接访问内存(Direct Memory Access,DMA):又叫直接存储器存取,DMA允许某些硬件子系统直接与系统内存交换数据,而不需要经过CPU的干预,是一种完全由DMA硬件完成I/O操作的方式
-
通道程序:又叫I/O处理机方式,独立的处理器(称为I/O通道)负责执行专门设计的I/O指令序列(通道程序),以控制数据在主存储器和外围设备之间的传输。
7.存储系统(层次结构)
以下是存储系统示意图
层级结构与速度,容量以及价格的关系对照:
总结:速度越高,容量越小,价格越高,反之亦然。
存储系统中的数据流动方式:
主存—辅存:实现虚拟存储系统,解决主存容量不够的问题
Cache—主存:解决了主存与CPU速度不匹配的问题
8.存储系统的分类
(1)按位置分类:可分为内存和外存。
- 内存(主存):用来存储当前运行的程序和数据,速度快,容量小
- 外存(辅存):用来存储当前不运行的程序和数据,速度慢,容量大
(2)按材料分类,可分为磁存储器,半导体存储器和光存储器。
-
磁存储器:用磁性介质做成,例如磁芯,磁泡,磁盘,磁带等。例如传统的硬盘驱动器(HDD)。
-
半导体存储器:根据所使用的原件又可分为双极型和MOS型两类,根据是否需要刷新有可分为静态和动态两类
-
光存储器:由光学,电学和机械部件组成,如光盘存储器。
(3)按工作方式,可分为读写存储器和只读存储器
-
读/写存储器(RAM):既能读取数据,又能存入数据的存储器。
-
只读存储器(ROM):工作过程中只能读取数据。
根据数据的写入方式,又可细分为ROM,PROM,EPROM和EEPROM等类型。
(1)固定只读存储器(ROM):这种存储器在厂家出场时就写好了数据,其内容只能读出,不能改变,一般存放系统程序BIOS和用于微程序控制。
(2)可编程的只读存储器(PROM):其内容可以由用户一次性写入,写入后无法再修改。
(3)可擦除可编程的只读存储器(EPROM):其内容可以读出,也可以由用户写入,写入后用户可以修改。紫外线照射擦除信息。
(4)电擦除可编程的只读存储器(EEPROW):其内容可以读出,也可以由用户写入,写入后用户可以修改。使用电擦除的方式进行数据改写
(5)闪速存储器(Flash Memory ):简称闪存,闪存的特性介于EPROW和EEPROM之间。类似EEPROM,使用电信号进行数据信息的擦除操作。闪存的擦除速度远快于EPROM。
9.高速缓存Cache
(1)高速缓存(Cache)是位于CPU和主存之间的高速存储子系统。
使用高速缓存的主要目的是:提高存储器的平均访问速度,使存储器的速度与CPU的速度相匹配。
Cache的存在对程序员是透明的,其地址变换和数据块的替换算法由硬件实现。
通常Cache被集成到CPU内,以提高访问速度。高速缓存的主要特点:容量小,速度快,成本高。
(2)Cache的组成:
- Cache存储器部分:用来存放主存的部分复制信息。
- 控制部分:判断CPU需要的数据是否在Cache中。
(3)Cache的三种地址映像
- 直接映像:主存中的块与Cache中的特定块一一对应。查找时只需要按照主存中的块去Cache中查找即可。优点是地址变换简单,缺点是灵活性差
- 全相联映射:全相联映射允许一个内存块被放置在Cache中的任何一个行。这种灵活性减少了冲突的可能性,且不受限制,十分灵活,提高了缓存的利用率和命中率。然而,它的缺点在于查找效率较低,因为需要比较所有可能的位置来确定是否命中,这增加了硬件设计的复杂性和成本。
- 组相联映像:组相联映射结合了直接映射和全相联映射的优点,将Cache划分为多个组,每个组包含若干行。每个内存块可以放置在其对应的组内的任意一行。这样既减少了冲突的概率,又比全相联映射更容易实现和管理。常见的变种包括2路组相联、4路组相联等,指的是每组中有多少个行可供选择。组之间采取组相联的方式,组内的块采取的是全相联的方式。
10.主存的扩展
在计算机组成原理中,位扩展和字扩展是两种用于构建所需容量和字长的主存储器系统的基本方法,通常通过组合多个较小容量或较窄字长的存储芯片来实现。它们主要用于存储器的硬件设计与扩展。
- 位扩展:保持存储器的字数(地址空间)不变,扩展每个存储单元的位数(即字长)。换句话说,增加存储器的数据宽度。当单个存储芯片的字长小于 CPU 数据总线宽度时,需要进行位扩展。
- 字扩展:保持存储器的字长不变,扩展存储单元的数量(即地址空间)。即增加存储器的容量(更多地址)。当单个存储芯片的地址空间小于所需容量时,需要进行字扩展。
经典例题:
11.虚拟存储器
虚拟存储器是由主存,辅存,存储管理单元及操作系统中的存储管理软件组成的存储系统。程序员使用该存储系统时,可以使用的内存空间可远远大于主存的物理空间,但实际上并不存在那么大的主存,所以称为虚拟存储器。
虚拟存储器使存储系统既具有相当于外存的容量又具有接近主存的访问速度。
12.磁盘存储器
存取时间=寻道时间+等待时间(平均定位时间+转动延迟)
注意:寻道时间指磁头移动到磁道所需的时间,等待时间等待读写的扇区转到磁头下方所用的时间。
13.总线系统
(1)片内总线
片内总线是芯片内部的总线,它是CPU芯片内部寄存器与寄存器之间,寄存器与ALU之间的公共连接线。
(2)系统总线
系统总线是计算机内部各功能部件(CPU,主存,I/O接口)之间相互连接的线。按系统总线传输信息内容的不同,又可以分为三类:数据总线,地址总线和控制总线。
(3)通行总线(外部总线)
用于设备一级的连接,计算机可通过该总线与其他设备进行数据交换。
14.磁盘阵列技术(RAID)
磁盘阵列技术(Redundant Array of Independent Disks,简称RAID)是一种通过组合多个硬盘驱动器来提供数据冗余、提高性能或两者兼备的数据存储虚拟化技术。RAID技术旨在通过不同的配置方案满足不同应用场景下的需求,从增强数据安全性到提升读写速度不等。
它是一种快速,大容量且高可靠的外存子系统。
RAID 级别 | 类型 | 冗余 | 最少磁盘数 | 容量利用率 | 优点 | 缺点 | 适用场景 |
---|---|---|---|---|---|---|---|
RAID 0 | 条带化(Striping) | 无 | 2 | 100% | 高读写性能,简单实现 | 没有冗余,任一磁盘故障即数据丢失 | 性能优先的应用如视频编辑、游戏等 |
RAID 1 | 镜像(Mirroring) | 有(完全复制) | 2 | 50% | 数据安全性高,快速恢复 | 成本较高,容量利用率低 | 关键数据存储、操作系统盘 |
RAID 2 | 位级条带化加海明码校验 | 有 | 不常用 | 较低 | 理论上提供良好的错误检测与纠正能力 | 实现复杂,效率低下,现代硬盘技术已不再采用 | 基本不使用 |
RAID 3 | 字节级条带化加专用奇偶校验盘 | 有(单盘容错) | 3 | (N-1)/N | 高效的数据传输速率,适合处理大量连续数据 | 写操作时对校验盘的压力大,成为瓶颈 | 对大量连续数据处理要求高的应用 |
RAID 4 | 块级条带化加专用奇偶校验盘 | 有(单盘容错) | 3 | (N-1)/N | 支持随机访问,比RAID 3更灵活 | 同样存在写操作时对校验盘的依赖问题,影响性能 | 特定环境下用于提高随机读取性能 |
RAID 5 | 分布式奇偶校验 | 有(单盘容错) | 3 | (N-1)/N | 提供较好的读写性能以及一定的数据冗余能力,允许一个磁盘故障而不丢失数据 | 重建时间较长,如果在重建过程中有第二块磁盘故障,则数据丢失 | 文件服务器、Web服务器 |
RAID 6 | 双重分布式奇偶校验 | 有(双盘容错) | 4 | (N-2)/N | 在两块磁盘同时故障的情况下保证数据的安全性 | 相比RAID 5,写入性能稍差,因为需要计算额外的奇偶校验信息 | 大型数据库系统 |
15.计算机系统的可靠性
计算机系统的可靠性是指从它开始运行(t=0)
到某个时刻 t
这段时间内能正常运行的概率。使用R(t)
表示。
部件失效率=1-可靠度
串联部件的可靠性=各部件的可靠度的乘积
并联部件的可靠性=1-部件失效率的乘积