嵌入式中级考试笔记

文章目录

1、ISO 7层

在这里插入图片描述
网络层:路由器(识别IP,进行数据包的转发)
链路层:网桥(识别MAC地址,进行帧转发)、交换机(多端口网桥)
物理层:中继器(对信号进行放大,延长传输距离)

2、A类、B类、C类

在这里插入图片描述
IP地址根据网络号和主机号来分,分为A、B、C三类及特殊地址D、E。 全0和全1的都保留不用。

A类:(1.0.0.0-126.0.0.0)(默认子网掩码:255.0.0.0或 0xFF000000)第一个字节为网络号,后三个字节为主机号。该类IP地址的最前面为“0”,所以地址的网络号取值于1~126之间。一般用于大型网络。
00000001-01111110(1-126)

B类:(128.0.0.0-191.255.0.0)(默认子网掩码:255.255.0.0或0xFFFF0000)前两个字节为网络号,后两个字节为主机号。该类IP地址的最前面为“10”,所以地址的网络号取值于128~191之间。一般用于中等规模网络。
10000000-10111111(128-191)

C类:(192.0.0.0-223.255.255.0)(子网掩码:255.255.255.0或 0xFFFFFF00)前三个字节为网络号,最后一个字节为主机号。该类IP地址的最前面为“110”,所以地址的网络号取值于192~223之间。一般用于小型网络。
11000000-11011111 (192-223)

D类:是多播地址。该类IP地址的最前面为“1110”,所以地址的网络号取值于224~239之间。一般用于多路广播用户[1] 。

E类:是保留地址。该类IP地址的最前面为“1111”,所以地址的网络号取值于240~255之间。

在这里插入图片描述

2.1 子网掩码

在这里插入图片描述

子网掩码不能单独存在,它必须结合IP地址一起使用。子网掩码只有一个作用,就是将某个IP地址划分成网络地址主机地址两部分

将主机号拿出几位作为子网号,就可以划分出多个子网,此时IP地址组成为:
网络号+子网号+主机号。
相当于:网络号+主机号(子网号+主机号)
主机号不能全部是0或全部是1.

2.1举例1:

某公司网络的地址快是 220.17.192.0/20,该网络被划分为()个C类子网,不属于该公司的子网络是()
D.220.17.213.0

220.12.192.0/20,首先它为C类网,C类网络号为 192-223,220在此范围内。20位表示子网掩码为20位,正常C类应该有24位子网,少了4位,左右被划分成16个子网,范围:220.12.192.0~220.12.207。(C类每个子网256给主机号)
主机号:20bit网络号+(4bit子网号+8bit主机号)

2.2 举例2:

A类网络是很大的网络,每个A类网络中可以有()个网络地址。实际使用中必须把A类网络划分为子网,如果指定的子网掩码为255.255.192.0,则该网络被划分为()个子网。
空1:2^24
空2:1024

A类网络的地址掩码是8bit,剩余24bit可表示主机地址,所以主机地址数为2^24个。如果A类网络指定的子网掩码为255.255.192.0,则其二进制表示为11111111 11111111 11000000 00000000,实际把A类网络划分为2的10次方个子网即1024

3、软件能力成熟度模型(Capabilitymaturity model,CMM)

CMM模型分为五级:初始级(1级)、可重复级(2级)、定义级(3级)、管理级(4级)、优化级(5级)共5个成熟度等级,低级别是实现高级别的基础。

CMM/CMMI将软件过程的成熟度分为5个等级,以下是5个等级的基本特征:
(1)初始级(initial)。工作无序,项目进行过程中常放弃当初的计划。管理无章法,缺乏健全的管理制度。开发项目成效不稳定,项目成功主要依靠项目负责人的经验和能力,他一但离去,工作秩序面目全非。

(2)可重复级(Repeatable)。管理制度化,建立了基本的管理制度和规程,管理工作有章可循。 初步实现标准化,开发工作比较好地按标准实施。 变更依法进行,做到基线化,稳定可跟踪,新项目的计划和管理基于过去的实践经验,具有重复以前成功项目的环境和条件。

(3)已定义级(Defined)。开发过程,包括技术工作和管理工作,均已实现标准化、文档化。建立了完善的培训制度和专家评审制度,全部技术活动和管理活动均可控制,对项目进行中的过程、岗位和职责均有共同的理解 。

(4)已管理级(Managed)。产品和过程已建立了定量的质量目标。开发活动中的生产率和质量是可量度的。已建立过程数据库。已实现项目产品和过程的控制。可预测过程和产品质量趋势,如预测偏差,实现及时纠正。

(5)优化级(Optimizing)。可集中精力改进过程,采用新技术、新方法。拥有防止出现缺陷、识别薄弱环节以及加以改进的手段。可取得过程有效性的统计数据,并可据进行分析,从而得出最佳方法。

4、虚拟设备技术

所谓虚拟设备技术,是在一类物理设备上模拟另一个物理设备技术,是将独占设备转换为共享设备的技术。

用来代替独占型设备的那部分外存空间称为虚拟设备。

对虚拟设备采用虚拟设备。当某进程需要与独占设备交换信息时,系统就将与该独占设备所对应的那部分磁盘的一部分存储空间分配给它。

5、不可重入函数

C语言中大部分函库函数都是线程安全的,但是也有几个常用函数是线程不安全的,也叫不可重入函数。之所线程不安全,是因为这些系统函数使用了某些全局或者静态变量。

6、病毒

木马:通常是病毒携带的一个附属程序,夺取计算机控制权。
蠕虫:有些采用电子邮件附件的方式发送,有些利用计算机系统漏洞进行攻击。破坏文件、造成数据丢失使系统无法正常运行,目前危害最大。

蠕虫:红色代码、爱虫病毒、熊猫烧香、Nimda病毒、爱丽丝病毒、罗密欧与朱丽叶、恶鹰、尼姆达、冲击波、欢乐时光等
木马软件:冰河、特洛伊木马、X卧底、QQ消息尾巴木马

7、进制

二进制				    		十六进制		十进制    K
0000 0000 0000 1000 0000 	 	 0x80       128
0000 0000 0000 1111 1111		 0XFF		255
0000 0000 0001 0000 0000 	 	 0x100      256
0000 0000 0010 0000 0000		 0x200      512
0000 0000 0100 0000 0000	     0x400      1024    1 
0000 0000 1000 0000 0000	     0x800      2048    2
0000 0001 0000 0000 0000     	 0x1000     4096    4
0000 0010 0000 0000 0000      	 0x2000     8192    8
0000 0100 0000 0000 0000      	 0x4000     16384   16
0000 1000 0000 0000 0000         0x8000     32768   32
0001 0000 0000 0000 0000      	 0x10000    65536   64



8、常见的Dos攻击

实现Dos攻击,常见的方式有:TCP SYN泛洪(SYN Flood),ping泛洪(ping-Flood),UDP泛洪(UDP-Flood),分片炸弹(fragmentation bombs),缓冲区溢出(buffer overflow)和ICMP路由重定向炸弹(ICMP routeing redirect bomb)。

9、加密

ECC、DSA、RSA属于公开密钥加密算法
DES是典型的私钥加密体制。

10、知识产权

著作权人对作品享有权利:

发表权:即决定作品是否公之于众的权利

署名权:即表明作者身份,在作品上署名的权利。

修改权:即修改或者授权他人修改作品的权利。

保护作品完整权:即保护作品不受歪曲、篡改的权利。

使用权、使用许可权和获取报酬权

转让权:即以复制、表演、播放、展览、发行、摄制电影、电视、录像或者改编、翻译、注释、编辑等方式使用作品的权利;以及许可他人以上述方式使用作品,并由此获得报酬的权利。
著作权保护期限

著作权属于公民。
署名权、修改权、保护作品完整权的保护期没有任何限制,永远属于保护范围。而发表权、使用权和获得报酬权的保护期为作者终生及其死亡后的50年(第50年的12月31日)。作者死亡后,著作权依照继承法进行转移。

著作权属于单位。发表权、使用权和获得报酬权的保护期为50年(首次发表后的第50年的,若50年内未发表的,不予保护。但单位变更、终止后,其著作权由承受其权利义务的单位享有。

11、结构化分析方法

结构化分析方法(SA)是一种面向数据流的软件分析方法,适用于开发数据处理型软件的需求分析。结构化分析方法适用的工具主要有数据流图(DFD)、数据字典(DD)、结构化语言、判定表和判定树。其中,数据流图以图形的方式表达数据处理系统中信息的交换和传递过程。与数据流图配合适用的是数据字典,它对数据流图重出现的所有图形元素给出逻辑定义。有了数据字典,数据流图重的数据流、加工和文件得到确切的解释。

12、IEEE1394

IEEE1394是一种外部串行总线标准,IEEE1394接口是由APPLE和TI公司开始的高速串行接口标准。IEEE1394的通信协议中定义了三个协议层,分别是事务层、链路层和物理层,用于在请求者和响应者之间的数据传输过程中完成相关服务。IEEE1394规范仅支持64位固定解址模式。

13、浮点数

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在IEEE754标准中,一个规格化的32位浮点数x的真值表示为
x = (-1) ^s X(1.M)X 2^(E-127)
e = E - 127
其中尾数域所表示的值是1.M。由于规格化的浮点数的尾数域最左位(最高有效位)总是1,故这一位经常不予存储,而认为隐藏在小数点的左边。于是用23位字段可以存储24位有效数。

64位的浮点数中符号位1位,阶码域11位,尾数域52位,植树偏移值是1023.因此规格化的64位浮点数x的真值为
x = (-1)s X(1.M)X 2^(E-1023)
e = E - 1023

例题

  1. 问题: 若浮点数x的754标准存储格式为(41360000)16,求其浮点数的十进制数值。
    解:将16进制数展开后,可得二进制数格式为

指数e=阶码-127=10000010-01111111=00000011=(3)10
包括隐藏位1的尾数1.M=1.011 0110 0000 0000 0000 0000=1.011011
于是有
x=(-1)^S X 1.M X 2^e=+(1.011011) X 2^3 = +1011.011=(11.375)10

  1. 问题: 将数(20.59375)10转换成754标准的32位浮点数的二进制存储格式。
    解:首先分别将整数和小数部分转换成二进制数:
    20.59375 = 10100.10011
    然后移动小数点,使其在第1、2位之间
    10100.10011 = 1.010010011 X 2^4 e = 4
    于是得到
    S = 0, E = 4 + 127 = 131, M = 010010011
    最后得到32位浮点数的二进制存储格式为
    0100 0001 1010 0100 1100 0000 0000 0000 = (41A4C000)16

14、计数器

环形计数器
规则:环形计算器的规则是利用一个移位寄存器右移实现,N位的环形计数器能计数的个数为N;
在这里插入图片描述

扭环计数器
在这里插入图片描述
约翰逊计数器的长度N=2n,因为移位寄存器串行输入端的信号是从反向端 ~Q取得的。经过n个时钟后,计数器的状态与初始状态刚好相反,必须再经过n个时钟后才能回到扭环原态。

15、原码、反码、补码

补码的作用;减法运算可作加法运算。
在计算机中,所有的数值都以补码形式存储。

1. 原码

原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值. 比如如果是8位二进制:

[+1]原 = 0000 0001

[-1]原 = 1000 0001
第一位是符号位. 因为第一位是符号位, 所以8位二进制数的取值范围就是:

[1111 1111 , 0111 1111]==>[-127 , 127]

2. 反码

反码的表示方法是:
正数的反码是其本身
负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.

[+1] = [00000001]原 = [00000001]反

[-1] = [10000001]原 = [11111110]反

3. 补码

补码的表示方法是:
正数的补码就是其本身
负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)

当进行9-6运算时,可当做9+(-6)
若用原码进行计算:

0000 1001
+1000 0110
=1000 1111
其结果是15,显然,这是不对的。

若用补码进行计算:
0000 1001
+1111 1010
=0000 0011(进位被舍弃)

4、举例

已知5位二进制整数的机器码是:11111
源码位:11111 -15
反码位:10000 -0
补码为:10001 -1

16、CMM等级模型

初始级——软件过程的特点是杂乱无章,有时甚至很混乱,几乎没有明确定义XX步骤,成功完全依赖个人努力和英雄式的核心任务。

可重复级——建立了基本的项目管理过程来跟踪成本、进度和机能,有必要的过程准则来重复以往在同类项目中在成功。

已定义级——管理和工程的软件过程已经文档化、标准化,并综合成整个软件开发组织的标准软件过程。所有项目都采用根据实际情况修改后得到的标准软件过程来开展和维护软件。

已管理级——制定了软件工程和产品质量的详细度量标准。软件过程和产品的质量都被开发组织的成员所理解和控制。

优化级——加强了定量分析,通过来自过程质量反馈和来自新观念、新技术的反馈过程能持续不断地改进。
在这里插入图片描述

17、解释程序

解释程序是一种语言处理程序,在词法、语法和语义分析方面与编译程序的工作原理基本相同,但在运行用户程序时,它直接执行源程序或源程序的内部形式(中间代码)。因此,解释程序并不产生目标程序,这是它和编译程序的主要区别。

解释程序它逐条地取出源程序中的语句,边解释,边执行。编译的话就是只要编译一次,下次再执行就不用再解释了。

18、#define f(a, b) a##b

#define Conn(x,y) x##y
#define ToChar(x) #@x
#define ToString(x) #x

x##y表示什么?表示x连接y,举例说:
int n = Conn(123,456); 结果就是n=123456;
char* str = Conn(“asdf”, “adf”)结果就是 str = “asdfadf”;
怎么样,很神奇吧

再来看#@x,其实就是给x加上单引号,结果返回是一个const char。举例说:
char a = ToChar(1);结果就是a=‘1’;
做个越界试验char a = ToChar(123);结果是a=‘3’;
但是如果你的参数超过四个字符,编译器就给给你报错了!error C2015: too many characters in constant :P

最后看看#x,估计你也明白了,他是给x加双引号
char* str = ToString(123132);就成了str=“123132”;

19 四大网络攻击常见手段及防护

1、DoS攻击

它通过协议方式,或抓住系统漏洞,集中对目标进行网络攻击,直到对方网络瘫痪,大家常听说的洪水攻击,疯狂Ping攻击都属于此类。
扩展访问列表是防止DoS攻击的有效工具

2、ARP攻击

ARP:地址解析协议
网络提示连接出现故障,IP冲突,无法打开网页,频繁弹出错误对话框。
一般我们采取安装防火墙来查找攻击元凶。

ARP欺骗是通过伪造IP地址和MAC翻译错误造成计算机内的身份识别冲突,它和DOS一样,目前没有特别系统的解决方案,但有一些值得探讨的技术技巧。

3、脚本攻击

大家都听过SQL注入攻击吧,所谓SQL注入就是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,这种攻击脚本最直接,也最简单,当然,脚本攻击更多的是建立在对方漏洞的基础上,它比DOS和ARP攻击的门槛更高。

4、嗅探扫描

程序–偷偷查看通过Internet的数据包,以捕获口令或全部内容。通过安装侦听器程序来监视网络数据流,从而获取连接网络系统时用户键入的用户名和口令。

20、商标权

商标权是指注册商标专用权,只有依法进行商标注册后,商标注册人才能取得商标权。**商标权不包括商标设计人的权利,主要注重商标又有人的权利。**商标设计人的发表权、署名权等人身权在商标的使用中没有反映,所有不受商标权法的保护,商标设计人可以通过其他法律来保护属于自己的权利。如:可以将商标设计图案作为美术作品通过著作权法来保护;与产品外观关系密切的商标图案可以通过申请外观设计专利通过专利法保护。软件商标制作人、软件商标使用人均未涉及软件注册商标,所有均不能成为软件商标的权利人。

21、软件生存周期模型

瀑布模型:将软件生存周期各个活动规定为依线性顺序连接的若干阶段的模型,适用于软件需求很明确的软件项目。

V模型:瀑布模型的一种演变模型,将测试和分析与设计关联进行,加强分析与设计的验证。

演化模型:是一种全局的软件(或产品)生存周期模型。属于迭代开发风范。

螺旋模型:将瀑布模型和快速原型模型结合起来,强调了其他模型所忽视的风险分析,特别适合于大型复杂的系统。

喷泉模型:是一种以用户需求为动力,以对象为驱动的模型,主要用于采用对象技术的软件开发项目。该模型的各个阶段没有明显的界限,开发人员可以同步进行开发。其优点是可以提高软件项目开发效率,节省开发时间,适应于面向对象的软件开发过程。

22、汇编语言

CPU的构成:CPU主要由运算器、控制器、寄存器组和内部总线构成。

运算器:由算术逻辑单元ALU、通用寄存器、数据暂存器等组成。程序状态字寄存器接受从控制器送来的命令并执行相应的动作,主要负责对数据的加工和处理。

算术逻辑单元ALU:用于进行各种算术逻辑运算(如与、或、非等)、算术运算(如加减乘除等)
通用寄存器:用来存放操作数、中间结果和各种地址信息的一系列存储单元。常见的通用寄存器如下:
    a) 数据寄存器:

AX,累加寄存器,算数运算的主要寄存器;

BX,基址寄存器;

CX,计数寄存器,串操作、循环控制的计数器;

DX,数据寄存器。

b) 地址指针寄存器:

SI:源变址寄存器;

DI:目的变址寄存器;

SP:堆栈寄存器;

BP:基址指针寄存器

c) 累加寄存器:AC,又称为累加寄存器。当运算器的逻辑单元执行算术运算或者逻辑运算的时候,为ALU提供一个工作区。

3.数据暂存器:用来暂存从主存储器读出的数据,这个数据不能存放在通用寄存器中,否则会破坏其原有数据。

4.程序状态字寄存器:用于保留与算术逻辑运算指令或测试指令的结果对应的各种状态信息。

控制器:由程序计数器PC、指令寄存器IR、地址寄存器AR、数据寄存器DR、指令译码器等。

1. 程序计数器 (PC):用于指出下条指令在主存中的存放地址,CPU根据PC的内容去主存处取得指令,由于程序中的指令是按照顺序执行的,所以PC必须有自动增加的功能,  也就是指向下一条指令的地址。

2. 指令寄存器 (IR):用于保存当前正在执行的这条指令的代码,所以指令寄存器的位数取决于指令字长。

3. 地址寄存器 (AR):用于存放CPU当前访问的内存单元地址。

4. 数据寄存器DR:用于暂存从内存储器中读出或写入的指令或数据。

5. 指令译码器:用于对获取的指令进行译码,产生该指令操作所需要的一些列微操作信号,以控制计算机各部件完成该指令。

标志位
CF:是否有进位或者借位。(Crarry)
ZF:0标记为
OF:溢出标志位
SF:符号位
AF:辅助进位标志位
PF:奇偶标志位。

程序计数器PC:存放指令地址的寄存器。
指令寄存器IR:存放正在执行的指令
状态字寄存器PSW:存放执行完成后产生的条件码。

23、IEEE1394

1、串行接口
2、64位寻址空间
3、定义了三个协议层:事务层、链路层、物理层
4、不分主从设备,都是主导者和服务者

24、软件许可

独占许可使用:实施独占许可后,软件著作人不得将软件授权给第三方,软件著作人也不能使用该软件。

独家许可使用:软件著作人不得将软件授权给第三方,软件著作人能使用该软件。

普通许可使用:软件著作人可以将软件授权给第三方,软件著作人能使用该软件。

25、位图、矢量图

矢量图:使用计算机指令来描述和记录一幅图的内容,通过指令描述构成一幅图的所有直线、曲线、圆、圆弧等。在屏幕上显示一副图形时,需要通过解释指令,然后将描图图像图像的指令转换成屏幕上显示的形状和颜色。适用于生成于机械制图、电路图的AutoCAD软件等。对矢量图进行移动、缩放、叠加、扭转等不会破坏图像的画面。显示速度慢。

位图:用像素点来描述的图。图像适用于表现比较细腻、层次较多,色彩丰富,包含大量细节。但占用存储空间打。缩放易失真。显示速度快。

26、Jackson

Jackson方法是一种面向数据结构的开发方法。
Booch、Coad、OMT方法是面向对象开发方法。

27、单总线、双总线

单总线:
计算机的各个部件均由系统总线相连,在单总线结构中,CPU与主存之间、CPU与I/O设备之间、I/O设备与主存之间、各种设备之间都通过系统总线交换信息。单总线结构的优点是控制简单方便,扩充方便。但由于所有设备部件均挂在单一总线上,使这种结构只能分时工作,即同一时刻只能在两个设备之间传送数据,这就使系统总体数据传输的效率和速度受到限制,这是单总线结构 的主要缺点。单总线结构图如下所示:
在这里插入图片描述

单总线的典型代表(ARM架构的CPU)

双总线:
双总线结构又分为面向CPU的双总线结构和面向存储器的双总线结构。
面向CPU的双总线结构如下图所示。其中一组总线是CPU与主存储器之间进行信息交换的公共通路,称为存储总线。另一组是CPU与I/O设备之间进行信息交换的公共通路,称为输入/输出总线(I/O总线)。外部设备通过连接在I/O总线上的接口电路与CPU交换信息。
在这里插入图片描述
多总线的典型代表(X86架构的CPU)。

28、片内总线和片外总线

片内总线是CPU内部的寄存器、算术逻辑部件、控制部件以及总线接口部件之间的公共信息通道。
片外总线则泛指CPU与外部器件之间的公共信息通道。

常见的系统总线有ISA、PCI、PCI-E等。
外设的接口标准。目前在微型计算机上流行的接口标准有:IDE(EIDE/ATA,SATA)、SCSI、USB和IEEE 1394四种。前两种主要用于连接硬盘、光驱等外部存储设备,后面两种可以用来连接多种外部设备。

对于挂接在总线上的多个部件,只能分时向总线发送数据,但可同时从总线接收数据。

常见的串行总线有:RS232、I2C、IEEE1394、USB等
常见的并行总线有:ISA、PCI、VME等

29、指令流于数据流的关系

在这里插入图片描述

30、私钥、公钥

A->B
1、A用它的私钥对文件加密,从而对文件签名
2、A将签名文件发送给B
3、B用A的公钥解密,从而验证签名

公钥体系中,私钥用于解密和签名;公钥用于加密和认证。

A向B发送消息P:
1、A用自己私钥对P签名,然后用B的公钥对签名后的数据加密。
2、B收到消息后,先用B的私钥解密;然后再用A的公钥认证A的签名及消息的真伪。
在这里插入图片描述

举例1:

用户B收到A带数字签名的消息M,未来验证M的真实性,首先需要从CA获取用户A的数字认证,并利用(CA的公钥)验证证书的真伪,然后利用(A的公钥)验证M的真实性。

31、RS-232、RS-422与RS-485比较

RS485:2线式、半双工、点对多主从通讯(4线制因只能点对点已经淘汰)
RS232:3线制、全双工、点对点通讯(因点对点通讯方式而无法联网,导致出现RS485)
RS422:4线制、全双工、点对多主从通讯(实际上还有一根信号地线,共5根线)

在这里插入图片描述
RS-232只允许一对一通信(单站能力)
RS-485接口在总线上是允许连接多达128个收发器(具有多站能力)

32、语句覆盖、条件覆盖(分支覆盖)、判定覆盖、条件-判定覆盖、组合覆盖、路径覆盖 的区别

一、语句覆盖(Statement Coverage)

语句覆盖,顾名思义就是针对代码语句的嘛。它的含义是我们设计出来的测试用例要保证程序中的每一个语句至少被执行一次。通常语句覆盖被认为是“最弱的覆盖”,原因是它仅仅考虑对代码中的执行语句进行覆盖而没有考虑各种条件和分支,因此在实际运用中语句覆盖很难发现代码中的问题。举个非常简单的例子:

public int foo(int a,int b)

{undefined

return a/b;

}

这是一个求两数之商的函数。如果我们设计如下的测试用例:

TestCase: a = 2, b = 1

这时候我们会发现,该函数的代码覆盖率达到了100%,并且设计的case可以顺利通过测试。但是显然该函数有一个很明显的bug:当 b=0 时,会抛出异常。

二、判定覆盖(Decision Coverage)

判定覆盖也被成为分支覆盖(Branch Coverage),也就是说设计的测试用例要保证让被测试程序中的每一个分支都至少执行一次。举个例子,有如下流程图:
在这里插入图片描述

针对该图我们想要做到判定覆盖,可以设计如下case:

TestCase1: a=1, b=1 (路径:ab)

TestCase2: a=-1, b=-1 (路径:acd)

TestCase3: a=2, b=-1 (路径:ace)

判定覆盖比语句覆盖强一些,能发现一些语句覆盖无法发现的问题。但是往往一些判定条件都是由多个逻辑条件组合而成的,进行分支判断时相当于对整个组合的最终结果进行判断,这样就会忽略每个条件的取值情况,导致遗漏部分测试路径。

三、条件覆盖(Condition Coverage)

条件覆盖于分支覆盖不同,条件覆盖要求所设计的测试用例能使每个判定中的每一个条件都获得可能的取值,即每个条件至少有一次真值、有一次假值。

仍然以上面流程图作为例子来说明。上图中涉及到的条件一共有4个:

a>0, a<0, b>0, b<0

为了达到条件覆盖的目的,我们设计的用例需要在 a 点有:

a>0, a≤0, b>0, b≤0,

这些情况出现,并且在 c 点有:

a<0, a≥0, b<0, b≥0

这些情况出现。现在可以设计如下用例:

TestCase1: a=1, b=1 (路径:ab)

TestCase1: a=-1, b=-1 (路径:acd)

TestCase1: a=-1, b=0 (路径:ace)

TestCase1: a=1, b=-1 (路径:ace)

通常而言条件覆盖比判定覆盖强,因为条件覆盖使得判定中的每一个条件都取到了不同的结果,这一点判定覆盖则无法保证。但条件覆盖也有缺陷,因为它只能保证每个条件都取到了不同结果,但没有考虑到判定结果,因此有时候条件覆盖并不能保证判定覆盖。

四、判定条件覆盖(Decision/Condition Coverage)

判定条件覆盖,说白了就是我们设计的测试用例可以使得判断中每个条件所有的可能取值至少执行一次(条件覆盖),同时每个判断本身所有的结果也要至少执行一次(判定覆盖)。不难发现判定条件覆盖同时满足判定覆盖和条件覆盖,弥补了两者各自的不足,但是判定条件覆盖并未考虑条件的组合情况。

五、组合覆盖(Branch Condition Combination Coverage)

组合覆盖也叫做条件组合覆盖。意思是说我们设计的测试用例应该使得每个判定中的各个条件的各种可能组合都至少出现一次。显然,满足条件组合覆盖的测试用例一定是满足判定覆盖、条件覆盖和判定条件覆盖的。

针对前文提到的流程图,做条件组合覆盖时我们可以设计如下用例:

TestCase1: a=1, b=1 (路径:ab)

TestCase1: a=-1, b=-1 (路径:acd)

TestCase1: a=-1, b=0 (路径:ace)

TestCase1: a=1, b=-1 (路径:ace)

条件组合覆盖能够同时满足判定、条件和判定条件覆盖,覆盖度较高,但是组合覆盖的测试用例数量相对来说也是比较多的。

六、路径覆盖

路径覆盖,意思是说我们设计的测试用例可以覆盖程序中所有可能的执行路径。这种覆盖方法可以对程序进行彻底的测试用例覆盖,比前面讲的五种方法覆盖度都要高。那么这种方法是不是就一定最好呢?当然不能讲得这么绝对,它的缺点也是显而易见的:由于需要对所有可能的路径全部进行覆盖,那么我们需要设计数量非常巨大的而且较为复杂的测试用例,用例数量将呈现指数级的增长。所以理论上来讲路径覆盖是最彻底的测试用例覆盖,但实际上很多时候路径覆盖的可操作性不强。

总结

以上简单描述了几种不用的逻辑覆盖方法的原则和优劣。在实际的操作中,要正确使用白盒测试的代码覆盖方法,就要从代码分析和代码调研入手,根据调研的结果,可以选择上述方法中的某一种,或者好几种方法的结合,设计出高效的测试用例,尽可能全面地覆盖到代码中的每一个逻辑路径。

33、操作系统-文件管理

题目:设文件索引结点中又7个地址项,其中4个地址项是直接地址索引,2个地址项是一级间接地址索引,1个地址项是二级间接索引,每个地址项大小为4B,若磁盘索引块和磁盘数据块大小均为256B,则可表示的单个文件最大长度是()

这里先给出求解的图解示意图:
在这里插入图片描述
1.先理解直接地址索引、一级间接索引、二级间接索引

直接地址索引:直接指向一个存数据的磁盘块

一级间接索引:指向一个内容全部是直接地址索引的磁盘块,它所指向的这个磁盘块中的每个直接地址索引,又指向不同的存数据的磁盘块

二级间接索引:先指向一个包含一级间接索引的磁盘块,每个一级间接索引再指向一个包含直接地址索引的磁盘块,每个直接地址索引再直接指向一个存数据的磁盘块
2.分析

每个磁盘块大小256B,每个地址项大小为4B,因此一个磁盘块可以存放256/4=64个地址项,因此,在一级间接索引和二级间接索引的那些中间的存放地址索引的磁盘块,每个可以存放64个地址
单个文件的索引结点包含的地址项所指向的存放数据的磁盘,若都是存放这个文件的数据,没有其他文件的数据跟它共享一个磁盘块,那这些所有所指的存放数据的磁盘块的大小就是单个文件的最大长度
4个直接地址索引,直接指向4个存放数据的磁盘块,这部分数据大小为4256B=1024B
1个一级间接地址索引,指向一个包含64个直接地址索引的磁盘块,每个直接地址索引又指向一个存放数据的磁盘块,因此,一个一级间接地址索引所对应的数据大小为64
256B=16384B
1个二级间接地址索引,指向一个包含64个一级间接地址的磁盘块,每个一级间接地址又指向64个直接地址索引,因此一个二级间接地址索引一共指向6464个直接地址索引,因此一个二级间接地址索引对应的数据大小为6464256=1048576B
因此,一个文件的索引结点包含的4个直接地址索引+2个一级间接索引+1个二级间接索引所能表示的单个文件最大长度为1024B+2
16384B+1048576B=1082368B=1057KB

34、Cache写机制:Write-through与Write-back

通常有三种方法:
1 write through:CPU向cache写入数据时,同时向memory(后端存储)也写一份,使cache
和memory的数据保持一致。优点是简单,缺点是每次都要访问memory,
速度比较慢。

2 post write:CPU更新cache数据时,把更新的数据写入到一个更新缓冲器,在合适的
时候才对memory(后端存储)进行更新
。这样可以提高cache访问速度,
但是,在数据连续被更新两次以上的时候,缓冲区将不够使用,被迫同
时更新memory(后端存储)。

3 write back:cpu更新cache时,只是把更新的cache区标记一下,并不同步更新memory
(后端存储)。**只是在cache区要被新进入的数据取代时,才更新
memory(后端存储)。**这样做的原因是考虑到很多时候cache存入的是中间结
果,没有必要同步更新memory(后端存储)。优点是CPU执行的效率提高,
缺点是实现起来技术比较复杂。

35、程序局部性

从程序局部性来分类,主要有两个种类,一个是时间局部性,一个是空间局部性。

1、时间局部性

时间局部性通常运用在循环当中,一条指令一旦被执行,那么不久以后该指令可能再次被执行,被访问过的存储器位置也肯能会在不久之后会被再次访问,它强调的是数据的重复访问

而利用时间局部性的原理缓存可以极大的提高数据重复访问的性能。

int sum( int *array, int n){
    int sum = 0;
    for ( int i = 0; i < n; i++ ){
        sum += array[i];
    }
    return sum;
}

如上代码中的sum变量就是存在于循环当中,这个变量在此循环中被多次访问,因此sum就具有良好的时间局部性。

2、空间局部性

程序访问了某一个存储器的位置,那么不久之后,它附近的存储单元也肯能会被访问,空间局部性更多的是强调它附近的位置会被经常引用。

int sum( int *array, int n){
    int sum = 0;
    for ( int i = 0; i < n; i++ ){
        sum += array[i];
    }
    return sum;
}

我们知道一个数组,在内存中存放的向下图一样连续存放的。
在这里插入图片描述
因此上面的程序变量array则具有良好的空间局部性,每次访问其中的array[ i ]的时候,array[ i+1 ]总是在它的下一个位置。步数越长,空间局部性就会越差。

36、常见存储器件

下面在半导体存储器大类中,按照存储器的实现技术原理来进行详细分类。

在这里插入图片描述
NOR FLASH:

内存类接口,其最大的特点是norflash里面的程序可以直接运行,不必再把代码读到系统的RAM中,所以norflash能够直接用来做boot

2440开发板是2M的norflash,有自己的地址线和数据线,能够采用类似于memory的随机訪问方式,但不能向内存直接写,需单独设置操作。
  传输速度高、写入和擦除速度低,擦除前需要置零,读取比nand快,适合做代码存储并片上执行,
norflash的读取速度比nandflash稍快,但擦写速度比nandflash慢非常多。

NAND FLASH

I/O类接口:存储密度大,擦除简单,擦除和写入比nor快很多,但需要特殊的系统接口单元。类似电脑的硬盘,CPU从里面读取数据的速度很慢,他里面的代码也不能直接运行,要想运行需要把nandflash里面的数据读到内存里面,然后CPU才能执行,但是他的集成度很高,成本很低。属于IO设备,数据、地址、控制线都是共用的,须要软件区控制读取时序,所以不能像nor flash、内存一样随机訪问,不能EIP(片上执行)。因此不能直接作为boot。适合用来作大量数据存储的。

37、char取值范围是 -128~+127

singed char 的最小值计算。 在计算机中,数值是以补码形式存储的。正数的补码是其本身; 而负数的补码是 取反 (符号位保持不变),再加1。

我们先来看 -1 的存储过程:

-1: 1 0 0 0 0 0 0 1 ->(取反) 1 1 1 1 1 1 1 0 ->(1) 1 1 1 1 1 1 1 1

-21 0 0 0 0 0 1 0 ->(取反) 1 1 1 1 1 1 0 1 ->(1) 1 1 1 1 1 1 1 0

-31 0 0 0 0 0 1 1 ->(取反) 1 1 1 1 1 1 0 0 ->(1) 1 1 1 1 1 1 0 1

… …

-127 1 1 1 1 1 1 1 1 ->(取反) 1 0 0 0 0 0 0 0 ->(1) 1 0 0 0 0 0 0 1

-128 1 0 0 0 0 0 0 0 ->(取反) 1 1 1 1 1 1 1 1 ->(1) 1 0 0 0 0 0 0 0

不管是原码还是补码, 总会出现 -0 这个值。 本来 +0 与 -0 是没有区别的。 但对于存储器和编译器来讲,总得充分利用每个字节吧, 更不想出现二义性。 所以,将 -0 表示为 -128 , 这样既增大了signed char 数值的表示范围,又消除了 -0 的二义性。

所以signed char的取值范围是 -128~127。

38、BIT检测和定位

上电BIT:是在系统上电时对所有硬件资源进行自检测的程序,拥有100%CPU控制权,可对系统中所有硬件进行完整测试。

周期BIT:在系统空闲时间,周期性对硬件进行检测,由于系统处于正常运行状态,测试程序必须采取非破坏测试算法,对部分可测部件进行测试。

维护BIT:在地面维护状态下,对系统硬件的部分或全部进行维护性测试,测试软件拥有100%的CPU控制权,可以对系统中的所有硬件进行完整的测试。

39、算法复杂度

时间复杂:算法执行过程中在所需要的基本运算次数,与模块n(规模)相关,随着n的增大,算法执行的时间的增长率和f(n)的增长率成正比。
时间复杂度并不是执行算法程序所需要的时间值,也与算法程序的长度无必然联系。

空间复杂度:指执行这个算法所需要的内存空间。

40、立即寻址,直接寻址,间接寻址

1、立即寻址

立即寻址:指令当中自带数据,直接读取,最快;

操作数就包含在指令中。作为指令的一部分,跟在操作码后存放在代码段。
这种操作数成为立即数。立即数可以是8位的,也可以是16位的。
例如:
指令: MOV AX,1234H
则: AX = 1234H

2、直接寻址

直接寻址:指令中存放的是地址,直接解析这个地址;

操作数在寄存器中,指令直接包含有操作数的有效地址(偏移地址)
注:操作数一般存放在数据段
所以操作数的地址由DS加上指令中直接给出的16位偏移得到。如果采用
段超越前缀,则操作数也可含在数据段外的其他段中。
例如:
MOV AX,[8054]
如(DS) = 2000H,
则执行结果为(AX) = 3050H
(物理地址=20000+8054=28054H)
28054H里的内容为3050H

3、间接寻址

间接寻址就只指令中存放的是地址的地址,或者是存放地址的寄存器,最慢。

41、饱和度

饱和度是指颜色的纯度,即颜色的深浅,或者说掺入白光的程度,对于同一色调的彩色光,饱和度越深颜色越纯。

42、软件开发方法

若用户需求不清晰且经常发生变化,但系统规模不太大且不太复杂,则适合采用(原型法)开发方法。对于数据处理领域的问题,若系统规模不太大且不太复杂,需求变化也不大,则最合适采用(结构化)开发方法。
在这里插入图片描述

43、单缓存、双缓存时间计算

假设磁盘块与缓冲区大小相同,把每个磁盘块读入缓冲区记为T,磁盘块送入用户区记为M,系统对每个磁盘块数据的处理记为C。

1、单缓存

在这里插入图片描述

在这里插入图片描述
如上图所示如果有三个磁盘块总时长为:T+M+Max(C,T)+M+Max(C,T)+M+C = (3-1)(Max(C,T)+M)+M+T+C = 3(Max(C,T)+M)+Min(C,T) 当有N个数据块时,总耗时为(Max(C,T)+M)*N+Min(C,T)

即:N*(M+Max(T,C))+Min(T,C)

2、双缓存

在这里插入图片描述
T > (M+C):
在这里插入图片描述
T < (M+C):
在这里插入图片描述
当有N个数据块时双缓冲区的总耗时为Max(T,M+C)*N+Min(T,M+C)
即:N * Max(T,M+C)+Min(T,M+C)

举例:
单个磁盘读入缓冲区为15us,缓冲区送至用户区5us,用户区内系统处理时间为1us。若用户需要将10个磁盘块的文件,从读入到用户区,到处理,那么采用单缓存为()uS,采用双缓存需要()uS.
T=15uS
M=5uS
C=1uS
采用单缓存:
10*(Max(15,1)+5)+Min(15,1)=10*(15+5)+1=201uS

采用双缓存:
10Max(15,6)+Min(15,6)=1015+6=156

44、同步通讯、异步通讯

一、同步通信和异步通信
串行通信可以分为两种类型,一种叫同步通信,另一种叫异步通信。

同步通信方式(比如SPI),是把许多字符组成一个信息组,这样,字符可以一个接一个地传输,但是,在每组信息(通常称为信息帧)的开始要加上同步字符,在没有信息要传输时,要填上空字符,因为同步传输不允许有间隙。同步方式下,发送方除了发送数据,还要传输同步时钟信号,信息传输的双方用同一个时钟信号确定传输过程中每1位的位置。见下图所示:
在这里插入图片描述

在异步通信方式(比如RS232)中,两个数据字符之间的传输间隔是任意的,所以,每个数据字符的前后都要用一些位来作为分隔位。从下图中可以看到,按标准的异步通信数据格式(叫做异步通信帧格式),1个字符在传输时,除了传输实际数据字符信息外,还要传输几个外加位。具体说,在1个字符开始传输前,输出线必须在逻辑上处于“1”状态,这称为标识态。传输一开始,输出线由标识态变为“0”状态,从而作为起始位。起始位后面为5~8个信息位,信息位由低往高排列,即先传字符的低位,后传字符的高位。信息位后面为校验位,校验位可以按奇校验设置,也可以按偶校验设置,或不设校验位。最后是逻辑的“1”作为停止位,停止位可为1位、1.5位或者2位。如果传输完1个字符以后,立即传输下一个字符,那么,后一个字符的起始位便紧挨着前一个字符的停止位了,否则,输出线又会进入标识态。在异步通信方式中,发送和接收的双方必须约定相同的帧格式,否则会造成传输错误。在异步通信方式中,发送方只发送数据帧,不传输时钟,发送和接收双方必须约定相同的传输率。当然双方实际工作速率不可能绝对相等,但是只要误差不超过一定的限度,就不会造成传输出错。下图是异步通信时的标准数据格式:
在这里插入图片描述

比较起来,在传输率相同时,同步通信方式下的信息有效率要比异步方式下的高,因为同步方式下的非数据信息比例比较小。

45、Cache 和主存 的三种映射方法

主存与cache的地址映射方式有全相联方式、直接方式和组相联方式三种。

直接映射(directmapping)
将一个主存块存储到唯一的一个Cache行。

全相联映射(fullyassociative mapping)
可以将一个主存块存储到任意一个Cache行。

组相联映射(setassociative mapping)
可以将一个主存块存储到唯一的一个Cache组中任意一个行。

1、直接映射

在这里插入图片描述

多对一的映射关系,但一个主存块只能拷贝到cache的一个特定行位置上去。
cache的行号i和主存的块号j有如下函数关系:i=j mod m  (m为cache中的总行数)
优点:硬件简单,容易实现
缺点:命中率低, Cache的存储空间利用率低

2、全相联映射

在这里插入图片描述

主存的一个块直接拷贝到cache中的任意一行上
优点:命中率较高,Cache的存储空间利用率高
缺点:线路复杂,成本高,速度低

3、组相联映射

在这里插入图片描述

将cache分成u组,每组v行,主存块存放到哪个组是固定的,至于存到该组哪一行是灵活的,即有如下函数关系:cache总行数m=u×v 组号q=j mod u

组间采用直接映射,组内为全相联
硬件较简单,速度较快,命中率较高

46、加密技术

对称加密技术:对数据的加密和解密的密码是相同的。
常见的有:DES、3DES、AES、RC-5、IDEA

非对称加密技术:加密和解密的密码是不同的。
常见有:RSA、ECC(椭圆曲线算法)、Rabin、D-H

RSA:基于大数定律,通常用于对消息摘要进行签名。

IDEA、RC4适于数据传输加密。

MD5:为摘要算法

信息摘要

信息摘要:一段数据的特征信息。当数据改变时,信息摘要也会改变。特点是无论数据多长,都会产生固定长度的信息摘要。
摘要算法:MD5(产生128位的输出)、SHA-1

47、敏捷过程的典型方法

极限编程(XP):激发开发人员创造性、使管理负担最小的一组技术;

水晶法(Crystal):每个不同的项目都需要一套不同的策略、约定和方法论;

并列争球法(Scrum):使用迭代的方法,其中把每30天一次的迭代成为一个冲刺,并按需求的优先级来实现产品。

48、PV操作

V: vrijgeven 释放 S=S+1
P: passerent 通过 S=S-1

49、各种常用的默认端口号

21端口:FTP 文件传输服务
22端口:SSH 远程连接服务
23端口:TELNET 终端仿真服务
25端口:SMTP 简单邮件传输服务
53端口:DNS 域名解析服务
80端口:HTTP 超文本传输服务
443端口:HTTPS 加密的超文本传输服务

3306端口:MYSQL数据库端口
5432端口:PostgreSQL数据库端口
6379端口:Redis数据库端口
8080端口:TCP服务端默认端口
8888端口:Nginx服务器的端口
9200端口:Elasticsearch服务器端口
27017端口:mongoDB数据库默认端口
22122端口:fastdfs服务器默认端口

49、常见串、并行总线

串行总线:I2C、SPI、RS232、UART、USB、CAN;IEEE1394、SATA、PCIE、RapidIO
并行总线:PCI、STD、PC总线、IEEE488总线、ISA、VME

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值