软考中级嵌入式系统设计师-个人笔记
1. 计算机基础
1.1 数值转换
1.1.1 进制
概念 | 示例 |
---|---|
数制 | x进制 |
数码 | 如十六进制,有0123456789ABCDEF |
基数 | r=x,如 10 进制 r=10 |
位权 | 如十六进制,16^n,n是权重,从右往左就是0/1/2/3… |
形式表示符 | 十六进制H/0x…、10进制D、8进制O/0…、二进制B |
1.1.2 进制转换
任意进制转换:R进制 -> 10进制 -> X进制
① R进制 -> 10进制
按权展开法
如二进制,10100.01 = 1x2^4 + 0x2^3 + 1x2^2 + 1x2^0 + 0x2^(-1) + 1x2^(-2)
= 16 + 4 + 1/4
= 20.25
② 10进制 -> X进制
短除法:一直短除至 商比左边小
特殊:2进制 < - > 8进制
每 3 位转 10 进制
如 10001110 -> 010 001 110 -> 2 1 6
所以 8 进制就是:216
8 转 2相同,逆推
特殊:2 进制 < - > 16进制
每 4 位转 数值,要用 16 进制的数值!!(0123…ABCDEF)
单位
位、b、Bit、比特 | |
字节、B、Byte、拜特 | 1B = 8 bit |
1KB = 1024 B | |
1MB = 1024KB | |
字 words | 16、32或64个位 |
逻辑运算
与:and、∧、· (一个点)、x(乘号)
或:OR 、∨、+
异或:⊕,两个数不一样 = 1
注意,遇到计算地址个数的题目,相减后 + 1,然后转成 10进制
1.2 数据的表示
计算
计算机计算时,使用 补码 计算,计算后转换回 原码
用反码计算后,会出现 +0 和 -0,解决这个问题就诞生了补码
原码:符号位 + 数值
反码:正数 不变,负数 符号位以外取反
补码:正数 不变,负数 符号位以外 反码+1
移码:补码的 符号位 取反(用于浮点数的阶码)
数值表示范围:
定点数与浮点数
定点数:小数点位置不变
浮点数:N = 2^e * M
阶符:阶码的符号
阶码:决定数值的范围
数符:N 的 符号
尾数:决定数值的精度(考察:尾数左移1位,阶码数值+1)
浮点数计算:对阶 -> 尾数计算 -> 结果格式化
(1.27 * 10^3 ) + (15.66 * 10^4)
①对阶
(1.27 * 10^3 ) + (15.66 * 10^4)
↓
(1.27 * 10^3 ) + (156.6 * 10^3)
②尾数计算
1.27 + 156.6 = 157.87
③格式化
变成 0.xxxx * 10^y 格式
结果:0.15787 x 10^6
1.3 计算机的组成
冯诺依曼结构
外设(数据)
输入设备:将数据发送到 主机,键盘、鼠标
输出设备:显示器、打印机
存储器:
主存储器:内存
辅助存储器:硬盘
主机
控制器(地址或指令)
算术逻辑单元 ALU:数据的算术运算和逻辑运算
累加寄存器 AC:由通用寄存器组成,为ALU提供工作区,用于暂存数据
数据缓冲寄存器 DR:写内存时,暂存指令
状态条件寄存器 PSW:存状态标志和控制标志
运算器(数据)
程序计数器 PC:存储下一条要执行的指令的地址
指令寄存器 IR:存储即将执行的指令
指令译码器 ID:译码,解析成操作数(指令由操作码和地址码组成)
时序部件:提供时序控制信号指令中的操作码字段
计算机系统基本概念
- CPU性能指标:主频(Hz 、1/x秒)、字长、CPU缓存、核心数量
- 总线的分类:数据总线、控制总线、地址总线
- 总线的性能指标:带宽、位宽、工作频率(带宽 = 位宽 * 工作频率)
- BIOS(一个程序,ROM),CMOS(一个RAM芯片,存储BIOS一些配置存储)
- 系统性能指标评测方法:时钟频率、指令执行、等效指令速度法、数据处理速率(PDR)、核心程序法、基准测试程序
总线系统
一条总线同时仅允许一个设备发送,但允许多个设备接收。
总线的性能指标:带宽、位宽、工作频率(带宽bit/s = 位宽bit * 工作频率Hz)
- 数据总线(双向):CPU与RAM来回传输需要处理的数据
- 地址总线(单向,CPU -> RAM):传输RAM中数据的地址
- 控制总线(双向):微处理器控制单元(Control Unit)数据传送到周边设备
带宽bit/s = 位宽bit * 工作频率Hz
带宽 = 数据总量bit / 总时间 1/x秒
计算机指令
一条指令就是一句机器语言,是一组有意义的二进制代码
指令 = 操作码 + 地址码
- 操作码OP:计算机要执行什么性质的操作
- 地址码A:各操作数的地址及其结果的存放地址等等
寻址方式
- 立即寻址:指令中是操作数,速度快,灵活性差
- 直接寻址:指令存储的是操作数的地址
- 间接寻址:指令存储的是一个地址,这个地址存储的是操作数的地址
上面的是内存,这里是寄存器,更快
- 寄存器寻址:拿寄存器来存放操作数
- 寄存器间接存储:拿寄存器来存放操作数的地址
1.4 流水线
流水线
流水线:多条指令重叠操作的一种准并行处理技术
取指 -> 分析 -> 执行
需要记 公式!!
1.5 多级存储结构
Cache,掌握3种类型的优点与缺点
1.6 I/O控制方式
输入输出设备管理
- 直接程序控制:无条件传送方式、程序查询方式
- 中断方式
- 直接存储器存取方式 DMA:传输数据块中不需要CPU干涉
- 输入输出机机 IOP(通道,大型设备用)
1.7 可靠性、校验码
可靠性、校验码
系统可靠性,可靠率 = 1 - 失效率
需要记 公式!!
校验码
码距:两个合法编码的码字最小距离(两个二进制数据不同的位数)
如:111 和 010,不同的有2位,码距为2
检错和纠错:利用码距可以检错,但是不能纠错
奇偶校验码:检错1位,可检查1位奇数位错,不能纠错
循环冗余 CRC:可检错可多位,不能纠错
海明码:可检错,可纠错1位
奇偶校验:增加一位校验码,使 1 的个数为 奇/偶
CRC:生成多项式为 K 个数据位增加 R 个校验位,编码长度为 K + R,使用模 2 运算
海明码:在数据位之间插入 K 个校验位。数据位n位,校验位k位,需满足(2^K)-1 >= n + K
2. 嵌入式系统
- 嵌入式软件概述(★)
- 嵌入式软件分类(★★)
- 嵌入式软件的体系结构(★★★)
- 设备驱动层BSP(★★★)
- 软件中间件(★★)
2.1 嵌入式系统软件基础
嵌入式软件特点:
规模小
开发难度大
硬件资源有限
设计底层软件开发,需要软硬件基础
开发环境和运行环境不同
实时性、可靠性要求高
固化存储
嵌入式软3件分类:
嵌入式软件体系结构
无操作系统
硬件配置低,系统应用集中在控制领域
嵌入式软件的设计以应用为核心,应用软件直接建立在硬件上
实现方式:
循环轮转(轮询)
一个 while(1)
优点:简单直观、开销少
缺点:过于简单,代码必须顺序执行,无法处理异步事件,缺乏并行处理能力
前后台系统(轮询基础上增加中断处理)
前台中断,处理异步事件
后台while(1),负责资源分配,管理和系统调度
优点:能处理部分异步事件
缺点:实时性较差
有操作系统
不再硬件层面上开发应用,而是在操作系统上编写
优点:
- 提高系统可靠性
- 提高开发效率,降低开发成本,缩短开发周期
- 利于系统扩展(或裁剪)与移植
设备驱动层-BSP
BSP 也叫板级支持包,包含嵌入式系统中所有与硬件相关的代码。负责与硬件打交道,对硬件进行管理和控制,为上层应用提供驱动支持。
BSP 一般组成:
Boot Loader
设备驱动程序
Boot Loader
- 片级初始化:完成微处理器初始化,把上电默认状态设置成系统要求的工作状态
- 板级初始化:软件和硬件的初始化
- 加载内核:将操作系统映像从Flash复制到内存中,然后跳转到内核第一条指令继续执行
设备驱动程序
基础支持功能:启动、关闭、停用、读写操作等等
设备驱动程序的分层结构:
硬件接口:直接操作和控制硬件
上层接口:不与硬件打交道,调用硬件接口的函数
设备驱动程序的混合结构:
没有明确的层次关系,上层和接口混在一起,相互调用
中间件
操作系统内核、设备驱动程序和应用软件之外的所有系统软件都是中间件。即,软件层的一些通用模块抽取出来,形成独立的一层,提供更好的移植性。
- 优点:有效得复用,降低软件复杂性,提高开发效率,降低开发周期,节约开发成本和维护费用,保障了系统的高伸缩性,易升级性、稳定性
- 缺点:带来额外的开销
嵌入式软件运行流程
2.2 嵌入式操作系统概述
嵌入式操作系统的基本概念(★★)
嵌入式操作系统的分类(★★★)
常见的嵌入式操作系统(★★)
嵌入式操作系统的基本概念
嵌入式操作系统(Embedded Operating System,EOS):工作在嵌入式环境中的操作系统
通用功能
- 从软件开发的角度,可以把EOS看成是一种扩展机或虚拟机
- 将底层的硬件细节封装起来,为运行在它上面的软件提供了一个抽象的编程接口,即从系统管理的角度,可以把EOS看成是系统资源的管理者,负责管理系统当中的各种软硬件资源。
特有功能
- 非通用型操作系统
- 在性能和实时性方面可能有严格的限制
- 能源、成本和可靠性通常是影响设计的重要因素
- 占用资源少
- 可剪裁、可配置
内核
是操作系统中的一个组件,它包含了OS的主要功能
内核功能
任务管理:对系统中运行的软件进行描述和管理,并完成处理器资源分配和调度存储管理:提高内存的利用率,方便用户使用,提供足够的存储空间。
IO设备管理:方便设备的使用,提高CPU和V/O设备的利用率。
文件管理:解决文件资源存储、共享、保密和保护等问题。
EOS分类
按系统类型分
商用系统:商业化的嵌入式操作系统。
功能强大、性能稳定、应用范围相对较广、辅助软件工具齐全价格较贵
如VxWorks、Windows CE、Palmos
专用系统:专业厂家为本公司产品特制的嵌入式操作系统
开源系统:开放源代码的嵌入式操作系统。
免费、开源、性能优良、资源丰富、技术支持强如uc/os、Linux系统
按响应时间分
硬实时系统:系统对响应时间有严格要求,若响应时间不能满足,是绝对不允许的,会引起系统的崩溃或致命的错误
软实时系统:系统对响应时间有要求,若响应时间不能满足,会带来额外可接受的代价。
非实时系统:响应时间没有严格要求
如分时操作系统,基于公平性原则,各进程分享处理器,获得大致相同的运行时间
按结构分
单体结构
中间件和设备驱动程序通常集成在系统内核中。系统只有一个可执行文件,包含所有功能组件,功能模块可相互调用。Linux/ucos/PDOS/JbedRTOS
- 优点:性能较好、系统各模块间可相互调用、通信开销较小
- 缺点:操作系统体积庞大、高度集成、相互关联系统裁剪、修改和调试都较困难
分层结构
操作系统被划分为若干个层次(0~N),各个层次之间的调用关系是单向的。只有一个大的可执行文件,包含有设备驱动程序和中间件
- 优点:系统的开发和维护较为简单
- 缺点:带来额外的开销
微内核结构(C/S结构)
在内核中,把操作系统的大部分功能都剥离出去,只保留最核心的功能单元(如进程管理、存储管理)。OS-9、C Executive、VxWorks和QNX等
优点:内核非常小,易于扩展、调试方便;新的功能组件可以被动态添加;安全性更高,大部分的系统功能被放置在内核之外可移植性
缺点:通过微内核构造和发送信息、接受应答并解码所花费的时间比进行一次系统调用的时间多;很大程度取决于微内核的大小和功能;客户单元和和服务器单元的内存地址空间是相互独立,在切换时候,会增加额外开销
3. 操作系统知识
3.1操作系统作用
作用
通过资源管理(软硬件资源管理),提高计算机系统的效率、改善人机界面,向用户提供友好的工作环境
3.2进程(任务)管理★★★
概念
进程是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。它由程序块、进程控制块(PCB)和数据块三部分组成
进程与程序的区别
- 进程是程序的一次执行过程,没有程序就没有进程
- 程序是完成某个特定功能的一系列程序语句的集合,只要不被破坏,它就永远存在
- 程序是一个静态的概念,而进程是一个动态的概念,它由创建而产生,完成任务后因撤销而消亡;
- 进程是系统进行资源分配和调度的独立单位,而程序不是
三态模型
- 运行态:运行态占有处理器正在运行
- 就绪态:具备运行条件,等待系统分配处理器以便运行
- 等待态:又称为阻塞态或睡眠态,指不具备运行条件,正在等待某个事件的完成
状态转换
- 运行态 - > 等待态:等待使用资源,如等待外设传输,等待人工干预
- 等待态 - > 就绪态:资源得到满足,如外设传输结束,人工干预完成
- 运行态 - > 就绪态:运行时间片到,出现有更高优先权进程
- 就绪态 - > 运行态: CPU空闲时选择一个就绪进程
五态模型
- 目的:释放进程占用的资源以缓解资源不足
- 原因:终端用户的请求,父进程的请求OS的需要(如负荷调节、对换等)
动作
- 挂起:将进程调出内存,保存到外存队列中,并释放资源
- 激活:恢复挂起进程,重新调入内存
前趋图
出度与入度
进程的同步与互斥
进程管理 - PV操作
P 申请资源(会阻塞进程),有入度
V 释放资源(会唤醒进程),有出度
- 临界资源:诸进程间需要互斥方式对其进行共享的资源,如打印机、磁带机
- 临界区:每个进程中访问临界资源的那段代码称为临界区
信号量:是一种特殊的变量
进程管理 - 死锁
如果一个进程在等待一个不可能发生的事,则进程就死锁了。而如果一个或多个进程产生死锁,就会造成系统死锁
不发生死锁:
资源个数 >= ( 进程数 * (最大需求-1) ) + 1
死锁产生:
- 资源互斥
- 保持和等待
- 不剥夺
- 环路等待
死锁预防:
- 破坏上述4点任意一点
- 有序资源分配
- 银行家算法
银行家算法:分配资源的原则
当一个进程对资源的最大需求量不超过系统中的资源数时可以接纳该进程
进程可以分期请求资源,但请求的总数不能超过最大需求量
当系统现有的资源不能满足进程尚需资源数时,对进程的请求可以推迟分配,但总能使进程在有限的时间里得到资源
死锁类做题步骤:
① 先求各资源当前剩余量
② 算得各资源需求量
③ 随意选一个选项,验证。列出 现有+已分配
④ 按顺序查看 现有+已分配,是否满足进程需求
任务调度
调度器:可以把他看作CPU资源管理者,调度器不是任务,是一个函数
任务调度时机
- 任务创建
- 任务结束
- 任务阻塞
- 任务阻塞完毕,不阻塞
- 产生中断/任务时间片用完
任务调度方式
不可抢占调度方式(Non-Preemptive) :
如果一个任务被调度程序选中,就会一直运行下去。直到它因为某种原因(如/O操作或任务间的同步)被阻塞了,或者它主动地交出了CPU的使用权。
调度时机中的前3种情况(任务创建、任务运行结束、任务被阻塞),都可能会发生调度。第4、5种情况(即发生中断),不会发生调度。
可抢占调度方式(Preemptive) :
当一个任务正在运行的时候,调度程序可以去打断它,并安排其他的任务去运行调度时机中的所有5种情况,都可能会发生调度。
调度算法性能指标
- CPU的使用率(CPU utilization)
- 响应时间(responsive time):调度器为一个就绪任务进行上下文切换时所需的时间,以及任务在就绪队列中的等待时间
- 周转时间:一个任务从提交到完成所经历的时间
- 调度开销:调度器在做出调度决策时所需要的时间和空间开销
- 公平性:大致相当的两个任务所得到的CPU时间应该大致相同。要防止饥饿,即一个任务始终得不到处理器去运行
- 均衡性:尽可能使整个系统的各个部分(CPU、I/O))都忙起来,提高系统资源的使用效率
- 吞吐量:单位时间内完成的任务数量
任务调度算法 - FCFS / FIFO(先来先服务/先进先出)
按照任务到达的先后次序进行调度,是不可抢占的调度方式
若当前任务占用CPU在运行,一直等到它执行完或被阻塞,才释放CPU
被阻塞的任务,唤醒后,放在就绪队列的末尾,重新开始排队
- 特点:简单,易于理解,易于实现。一批任务的平均周转时间(这个要会计算)取决于各个任务到达的顺序,如果短任务位于长任务之后,将增大平均周转时间。
短作业优先算法(Shortest Job First,SJF)
各个任务开始执行之前,事先预计好它的执行时间,从中选择用时较短的任务优先执行
2种方案:
- 不可抢占:任务运行时,来了更短时间的任务,也不被打断
- 可抢占:更短任务事件 < 当前任务剩余时间,新任务会抢占CPU,也叫 Shortest Remaining Time First , SRTF 算法
时间片轮转调度(round-robin scheduling ,RR)
所有的就绪任务按照先来先服务的原则排成一个队列
在每次调度的时候,把处理器分派给队列当中的第一个任务,让它去执行一小段时间(时间片)。在这个时间段里任务被阻塞或结束,或者任务的时间片用完了,它会被送到就绪队列的末尾,然后调度器再执行当前队列的第一个任务。
优点:
- 公平性:各个就绪任务平均地分配使用CPU的时间
- 活动性:每个就绪任务都能一直保持着活动性
采用时间片轮转调度算法时,任务的时间片大小要适当选择,时间片太大,时间片轮转调度就没有意义;时间片太小,任务切换过于频繁,处理器开销大,真正用于运行应用程序间将会减小。
优先级算法
每个任务都有优先级,任务调度时选择就绪态中优先级最高的任务
- 可抢占式:任务运行时,有优先级更高的新任务进入就绪态,会抢占CPU
- 不可抢占式::任务运行时,有优先级更高的新任务进入就绪态,等待当前任务执行完再决策
优先级 - 确定方式
静态方式:在创建任务的时就确定任务的优先级,且一直保持不变直到任务结束
- 缺点:高优先级的任务会一直占用着CPU运行,低优先级的任务可能会长时间地得不到CPU,一直处于“饥饿”状态。
动态方式:在创建任务的时候确定任务的优先级,但该优先级在任务的运行过程中动态改变,以获得更好的调度性能。
优先级 - 分组
在优先级算法中,把任务按照不同的优先级进行分组,不同组的任务之间使用优先级算法,同一组的各任务之间使用时间片轮转法。
优先级 - 优先级反转
采用优先级调度算法还有一个问题是可能会发生优先级反转
priority inversion),高优先级任务等待低优先级任务释放资源,而低优先级任务又正在等待中等优先级任务的现象
理想情况下
高优先级任务就绪后,能够立即抢占低优先级任务而得到执行。
实际系统中
但在有多个任务需要使用共享资源的情况下,可能会出现高优先级任务被低优先级任务阻塞,并等待低优先级任务执行的现象
任务间通讯(需要同步机制)
任务之间为了协调工作,需要相互交换数据和控制信息。任务之间的通信可以分为两种类型:
低级通信:只能传递状态和整数值等控制信息,例如信号量机制、异步信号机制。
高级通信:能够传输任意数量的数据,主要有三类:共享内存、消息传递和管道。
3.3 存储管理★★★
页式存储
页号 + 页内地址
- 优点:利用率高,碎片小,分配及管理简单
- 缺点:增加了系统开销;可能产生抖动现象
解法1:二进制解法
① 4k = 4^12 ,意思是大小是12位
② 8644 转二进制,低12位是地址,剩下的高位是页号
③ 得出块号,转二进制,拼起来
物理地址 = 块号 + 页内地址
④ 用二进制处理后,转十进制得出结果
解法2,十进制解法
段式存储
段号 + 段内地址
- 优点:多道程序共享内存,各段程序修改互不影响
- 缺点:内存利用率低。内存(外)碎片多,内存空间浪费
段页式存储
先分段,再分页
段号 + 页号 + 页内地址
- 优点:空间浪费小、存储共享容易、存储保护容易、能动态连接
- 缺点:由于管理软件的增加,复杂性和开销也随之增加,需要的硬件以及占用的内容也有所增加,使得执行速度大大下降
虚拟存储
- 具有部分装入和部分对换功能,能从逻辑上对内容容量进行大幅度扩充,使用方便的一种存储器系统
- 实际上是为扩大主存而采用的一种设计技巧
- 虚拟存储器的容量与主存大小无关
- 虚拟存储器的实现对用户来说是透明的
页面置换算法
- 最佳置换算法(清除最不可能访问的,但是实际并不知道是哪个,理论模型)
- 先进先出置换算法(先来的先清除)
- 最近最少未使用置换算法(时间内使用最少的)
- 最近未用置换算法(使用次数最少的)
磁盘结构以及调度算法
- 先来先服务(FCFS)
- 最短寻道时间优先(SSTF)
- 扫描算法(SCAN)
- 循环扫描(CSCAN))算法
3.4文件管理
逻辑结构
- 流式文件
- 记录式文件
物理结构
- 顺序结构
- 链接结构
- 索引结构
3.5设备管理
未补充
4. 网络基础知识
4.1 OSI/RM
左边是OSI模型,右边是TCP/IP模型
4.2 TCP/IP
TCP
面向连接;建立连接必须经过 3 次握手;连接断开:4 次断开
传输可靠性:可靠;适合传输大量数据
UDP
无连接
传输可靠性:不可靠;适合传输少量数据;通信开销小
TCP/IP簇
TCP应用层
POP3:110 端口,邮件收取
SMTP:25 端口,邮件发送
FTP:20 数据端口/21 控制端口,文件传输协议
HTTP:80 端口,超文本传输协议,网页传输
UDP应用层
DHCP:67 端口,IP 地址自动分配
SNMP:161 端口,简单网络管理协议
DNS:53 端口,域名解析协议,记录域名与 IP 的映射关系
传输层
TCP:可靠的传输层协议
UDP:不可靠的传输层协议
网际层
ICMP:因特网差错控制协议,PING 命令来自该协议
IGMP:网际组管理协议
ARP:地址解析协议,IP 地址转换为 MAC 地址
RARP:反向地址解析协议,MAC 地址转 IP 地址(淘汰)
网络接口层
CSMA/CD
TokingRing
其他考点
-
防火墙:防火墙一般放在安全边界区
路由器(分割广播域):
用于网络互联:可作为互联网接入不同网段间互联
交换机(分割冲突域):用于连接节点
集线器:用于连接节点
4.3 IP地址与网络划分
IPv4
IP地址组成 32位 = 网络ID + 主机ID
全0属于网络号,全1用于广播,注意可用范围!
IP地址掩码
识别哪些位属于网络,哪些位属于主机
标准掩码
A类:255.0.0.0
B类:255.255.0.0
C类:255.255.255.0
地址掩码表示方法
点分十进制:255.255.255.0
位计数:172.21.0.0/24
网络号
由网络部分 + 全零的主机位来表示
计算IP所属网络号(网段)
① IP地址转2进制
② 掩码转2进制
③ 相与操作
④ 转回10进制,得出网段
变长子网掩码
IP地址组成变成:网络 + 子网 + 主机
子网数:2^N
子网下主机数:2^N-2(减去全0子网号和全1广播)
特殊IP地址
IPv6
32位 -> 128位 ,IP 数增加:2^128 / 2^32 = 2^96
IPv4 与 IPv6 通信时用到的技术
- 双协议栈
- 隧道技术
- 翻译技术
4.4 DNS与DHCP
DNS解析过程
本地host
本地缓存
本地域名服务器的本地(一般是递归)
本地域名服务器的缓存
根服务器的本地(一般是迭代)
根服务器的缓存
顶级域名
….
递归查询:必须告诉客户端目标IP与域名的映射关系
迭代查询:结果可以是其他 DNS 服务器
DHCP模型
- 客户/服务 模型
- 租约默认8天
- 50% 时间和 87.5% 时,主机会向DHCP服务器申请续租
4.5 网络规划和设计
网络分层设计
- 核心层:高速数据交换,冗余机制,双星(树)结构
- 汇聚层(有些结构此层省略):网络访问策略,数据过滤
- 接入层:用户接入,计费管理,MAC认证,收集用户信息
4.6 网络故障诊断
非重点,但也有考过
5. 安全性基础知识
5.1 计算机系统安全概述
5.2 信息安全基础
5.3 网络安全协议
网络安全内容
- 保密性
- 安全协议的设计
- 访问控制
两类密码体系
对称加密:加密与解密秘钥相同
DES:56位秘钥+64位数据块,替换与移位
3DES:两个56位秘钥K1、K2
加密:K1加密 -> K2解密 -> K1加密
解密:K1解密 —>K2加密 -> K1解密
RC-5:流加密算法,64位/128位
IDEA算法:128位秘钥,64位数据块
AES算法:128/192/256 位长度
安全性较低
非对称加密:加密与解密不同的秘钥
公钥:可公开的
私钥:需保密的
- RSA:2048位/1024位
- Elgamal
- ECC:椭圆曲线算法
非对称加密速度慢
RSA加密与解密
(非对称加密)
选择两个大素数p和q【p q保密】
n = p * q,y(n) = (p-1) * (q-1) 【n公开,y(n)保密】
选一整数满足 1 < e < y(n),且 gcd(y(n),e) = 1【e公开】gcd表示最大公因数
计算d,d*e 同余≡ 1mod ( y (n) )【d保密】
简化:d*e mod (p-1)*(q-1) = 1
余数要为1
公钥:(n,e)
私钥:(n,d)
加密:C 同余≡ m^e mod n
解密:m 同余≡ c^d mod n
做题步骤
- 计算 n ,n=p*q
- 计算yn,yn = (p-1) * (q-1)
- 看e的范围,1 < e< yn, 且yn和e 最大公因数为1
- 计算d,d*e mod (p-1)*(q-1) = 1
公钥:(n,e)
私钥:(n,d)
数字签名
认证
实体验证:识别通信对方的身份(数字签名)
消息认证:确认收到的报文是发送者发送的(消息摘要)
MD5:消息摘要算法,利用散列(Hash)函数加密
某一特定时间内,无法查找经过Hash操作后生成的特定Hash消息(短时间不能倒退)
SHA:安全散列算法,128/160 位
数字签名与消息摘要
数字证书
防火墙
网络级
包过滤
状态检测
应用级
双穴主机(可用于应用层)
屏蔽主机
屏蔽子网
防火墙受保护程度:高到低
内网、DMZ、外网
DMZ:“隔离区”,也称“非军事化区”
网络安全协议
应用层:PGP、HTTPS
传输层:TLS、SET
应用层与传输层:SSL
网络层:防火墙、IPec
数据链路层:链路加密、PPTP、L2TP
物理层:隔离、屏蔽
6. 嵌入式软件程序设计
6.1 嵌入式系统开发与设计
应用开发概述
开发流程
一个嵌入式应用项目的开发过程是一个硬件设计和软件设计的综合过程,一般而言要经历以下几个步骤:
硬件的设计与实现
设备驱动软件的设计与实现
嵌入式操作系统的选择、移植,以及API接口函数的设计
支撑软件的设计与调试
应用程序的设计与调试
系统联调,样机交付
嵌入式软件开发特点
需要交叉编译工具
通过仿真手段进行调式
开发板是中间目标机
可利用的资源有限
需要与硬件打交道
嵌入式软件开发挑战
- 嵌入式软件开发的挑战
- 软硬件协同设计嵌入式操作系统
- 代码优化
- 有限的I/O功能
嵌入式系统开发最大特点:软硬件综合开发
- 嵌入式产品是软硬件的结合体
- 软件针对硬件开发、固化,不能进行任意修改
嵌入式软件开发模式
- 本机开发
- 交叉开发
- 模拟开发
开发流程
一般软件开发流程:分析 -> 设计 -> 实现
嵌入式开发流程:
- 嵌入式平台选型
- 软件设计
- 特性设计
- 编码
- 测试
- 下载和运行
6.2 嵌入式程序设计
程序语言基本成分
数据(数据名称、数据类型、存储类别、作用域、生存期)
基本类型:整型、字符型、实型、布尔类型
特殊类型:空类型(void)
用户定义类型:枚举类型
构造类型:数组、结构、联合
指针类型:type *
抽象类型:类类型
运算
- 算术运算
- 关系运算
- 逻辑运算
- 位运算
控制
传输
传值与传址
传值:给副本
传址:本体
前中后缀表达式
- 前缀:+ab
- 中缀:a+b
- 后缀(逆波兰式):ab-
考点:相互转换
解题方法:
方法一:栈
方法二:构造二叉树
方法三:加括号再移动运算符
https://blog.csdn.net/weixin_37231962/article/details/123953028
文件操作模式
文件的操作模式中,a和a+、w和w+、r和r+
https://blog.csdn.net/kangjianwei101/article/details/50517536
7. 系统开发与维护知识
7.1 系统开发以及项目管理
开发模型
瀑布模型
演化模型
增量模型
螺旋模型
敏捷开发方法
快速原型模型
模型驱动的开发方法
软硬件协同的开发方法
喷泉模型
V模型
迭代模型/迭代开发方法
构件组装模型/基于构件的开发方法
统一过程/统一开发方法
瀑布模型SDLC:需求明确 / 二次开发
螺旋模型:工程大 / 风险高
V模型:质量要求高
喷泉模型:面向对象的模型
CBSD:
RAD:快速应用开发
构建组装模型
敏捷方法
极限编程(XP):测试先行,结对编程
水晶方法系列(Crystal):用最少纪律约束而仍有效的方法
开放式源码:程序开发人员地理上分布广,查错排障高度并行性
并列争球法(Scrum):明确定义可重复的方法,30天迭代冲刺
功用驱动开发方法(FDD):首席程序员和类程序员
自适应软件开发方法(ASD):猜测、合作、学习
动态系统开发方法/业务中心框架开发方法(DSDM):以业务为核心
项目管理
时间管理(进度管理)
PERT图
最早完成时间(正向:取最大值)
最迟开始时间(逆向:取最小值)
总时差为0的是关键路径
蛮力法!!
最早完成时间(逆向:取最大值)
最迟开始时间(正向:取最小值)
关键路径
关键路径法是在制订进度计划时使用的一种进度网络分析技术。关键路线法沿着项目进度网络路线进行正向与反向分析,从而计算出所有计划活动理论上的最早开始与完成日期、最迟开始与完成日期,不考虑任何资源限制。
(1)总时差(松弛时间):在不延误总工期的前提下,该活动的机动时间。
活动的总时差 = 该活动最迟完成时间 - 最早完成,
或
活动的总时差 = 该活动最迟开始时间 - 最早开始时间
(2)自由时差:在不影响紧后活动的最早开始时间前提下,该活动的机动时间。对于有紧后活动的活动,其自由时差等于所有紧后活动最早开始时间减本活动最早完成时间所得之差的最小值。对于没有紧后活动的活动,也就是以网络计划终点节点为完成节点的活动,
自由时差 = 计划工期 - 本活动最早完成时间
(3)对于网络计划中以终点节点为完成节点的活动,其自由时差与总时差相等。此外,由于活动的自由时差是其总时差的构成部分,所以,当活动的总时差为零时,
其自由时差必然为零,可不必进行专门计算。
软件配置管理
典型配置项包括
项目计划书、需求文档、设计文档、源代码、可执行代码、测试用例、运行软件所需的各种数据
每个配置项的主要属性有:名称、标识符、文件状态、版本、作者和日期等
它们经评审和检查通过后进入软件配置管理(SCM)
(1)开发库(动态库、程序员库、工作库;动态系统、开发者系统、开发系统、
工作空间)
(2)受控库(主库、系统库;主系统、受控系统)
(3)产品库(备份库、静态库、软件仓库;静态系统)
(4)检查点:指在规定的时间间隔内对项目进行检查,比较实际与计划之间的差异,并根据差异进行调整。
(5)里程碑:完成阶段性工作的标志,不同类型的项目里程碑不同。
(6)基线:指一个(或一组)配置项在项目生命周期的不同时间点上通过正式评审而进入正式受控的一种状态。基线是一些重要的里程碑,但相关交付成果要通过正式评审,并作为后续工作的基准和出发点。基线一旦建立后其变化需要受控制。
功能基线(设计基线)
他是指在系统分析与软件定义阶段结束的时候经过正式评审和批准的系统设计规格说明书,这就是功能基线。
分配基线(需求基线)
也叫指派基线,它是指软件需求分析阶段结束时,经过正式评审和批准的软件需求规格说明书(SRS)。产品基线
他是指在软件组装与系统测试阶段结束时,经过正式评审和批准的有关开发的软件产品的全部配置项的规格说明。
基线确定后,变更时需要走变更流程
风险分类
项目风险
潜在的预算、进度、人员和组织、资源、用户和需求问题
项目复杂性、规模和结构的不确定性
技术风险
潜在的设计、实现、接口、测试和维护方面的问题
规格说明的多义性、技术上的不确定性、技术陈旧、最新技术
商业风险
市场风险:系统虽然很优秀但不是市场真正所想要的
策略风险:系统不再符合企业的信息系统战略
销售风险:开发了销售部门不清楚如何推销的系统
管理风险:由于重点转移或人员变动而失去上级支持
预算风险:开发过程没有得到预算或人员的保证
软件过程 - 能力成熟度模型(CMM)
规定了软件研制和软件测试中的主要软件管理过程和工程过程的实践。
初始级
软件过程的特点是无序的,有时甚至是混乱的。已经建立了基本的项目管理过程,可用于对成本、进度和功能特性进行跟踪。可重复级(项目级)
已经建立了基本的项目管理过程,可用于对成本、进度和功能特性进行跟踪。
已定义级(组织级)
用于管理和工程的软件过程均已文档化、标准化,并形成整个软件组织的标准软件过程。
已管理级(管理级、量化)
软件过程和产品质量有详细的度量标准。
优化级(缺陷预防)
通过对来自过程、新概念
7.2 系统分析基础知识
需求工程概述
软件的需求工程,他包括了创建和维护需求文档所必须的一切活动的过程
需求分类
软件需求
软件需求是指用户对系统在功能、行为、性能、设计约束等方面的期望。
需求分析
结构化分析
数据流图(DFD)
- 顶层图,表示需要输入什么数据、输出什么数据
- 顶层图的分解,成0层图,分解,1层图……
- 箭头,数据流
- 圆圈,表示加工
- 两横线,数据存储
- 矩形框,外部实体
状态转换图(STD)
E-R 图
面向对象分析(OOA) - 使用统一建模语言(UML)
7.3 系统设计知识
结构化设计
面向对象设计
软硬件协同设计
8. 嵌入式系统实施(软件测试)
1.软件测试
- 经典定义:在规定的条件下对程序进行操作,以发现错误,对软件质量进行评估
- 对象:程序、数据和文档
- 目的:发现软件的错误,验证软件是否满足用户需求,并通过分析软件错误产生的原因,以帮助发现当前开发工作所采用的软件过程的缺陷,以便进行软件过程改进
嵌入式软件的测试工作与台式机上的应用软件的测试工作有许多共同之处,但也有很大区别
嵌入式系统的硬件一般采用专门的测试仪器进行测试由于嵌入式软件自身的特点,其测试过程相对复杂
与PC软件相比,在测试嵌入式软件时,除了逻辑上的正确性之外,还要看重系系统的性能和健壮性
嵌入式软件的一个重要特点就是实时性
嵌入式系统的开发是一个软硬件互相协调、互相反馈和互相测试的过程
测试方法
动态测试
黑盒测试(验收测试阶段)
白盒测试(单元测试阶段)
灰盒测试(系统测试阶段)
静态测试
- 桌前检查(程序员自查)
- 代码审查(开会,不需要测试用例)
- 代码走查(开会,需要提供测试用例)
测试用例设计
- 黑盒测试
- 等价类划分(比如1-1000,取一个值代替)
- 边界值分析(最小值-1,最小值,0,最大值,最大值+1……)
- 错误推测
- 因果图
- 白盒测试
- 基本路径测试
- 循环覆盖测试
- ★★★逻辑覆盖测试(必考,要记住英文)
- 语句覆盖(SC):每一个语句覆盖
- 判断覆盖(DC):每一个判断的真假覆盖
- 条件覆盖(CC):
- 条件判定覆盖(C/DC)
- 条件组合覆盖(MCC)
- ★★★修正的条件判断覆盖(MC/DC):看下方解题思路
- 路径覆盖
覆盖测试
一般考题:需要设计多少设计用例才能达到100%覆盖
- 画出程序流程图
- 根据题目要求设计
修正的条件判断覆盖(MC/DC)解题
测试阶段
- 单元测试:白盒
- 集成测试:
- 确认测试:黑盒
- 系统测试:灰盒
2.软件调试
调试目的:定位错误,修正错误
调试方法
调试器通过某种方式能控制目标机上被调试程序的运行方式,并能查看和修目标机上的内存、寄存器以及被调试程序中的变量
- 直接测试法
- 调试监控器法
- ROM仿真器法
- 在线(CPU)仿真器法
- 片上调试法
- 模拟器法
3.软件评审
软件评审
- 不应以测试代替评审
- 评审人员应关注产品而不应评论开发人员
- 评审人员应关注于实质性问题
- 评审会议不应变为问题解决方案讨论会
- 评审应被安排进入项目计划
- 评审参与者应了解整个评审过程
- 评审人员事先应对评审材料充分了解
- 应重视评审的组织工作
4.验证与确认
- 验证关注:过程
- 确认关注:结果
9. 整理
公式整理