一 计算机系统基础知识
1.计算机系统基础
计算机系统:硬件和软件。 计算机的基本硬件系统:运算器、 控制器、 存储器、 输入设备和输出设备
1.1 中央处理单元(Central Processing Unit, CPU)
- CPU:运算器、 控制器等部件集成在一起,获取程序指令、 对指令进行译码并加以执行。
- CPU的功能:程序控制,操作控制,时间控制,数据处理,对系统内部和外部的中断(异常) 做出响应
- CPU的组成:运算器,控制器,等存器组,内部总线等
2. 计算机体系结构
2.1 体系结构分类:
- 宏观上按处理机的数量分类:单处理系统、并行处理与多处理系统和分布式处理系统
- 微观上按并行程度分类:有Flynn分类法、冯泽云分类法、Handler分类法和Kuck分类法
- 有Flynn分类法:指令流和数据流的多少
- 冯泽云分类法:按并行度对各种计算机系统进行结构分类
- Handler分类法:基于硬件并行程度计算并行度
- Kuck分类法:指令流和执行流(Execution Stream)及其多重性
2.2 指令系统
处理器支持的指令和指令的字节级编码
- 指令集体系结构的分类:
- 从体系结构的观点对指令集进行分类:操作数在CPU中的存储方式,显式操作数的数量,操作数的位置,指令的操作,操作数的类型与大小。
- 按暂存机制分类,即根据在CPU内部存储操作数的区别分类:堆栈(Stack)、累加器(Accumulator)和寄存器
- 指令集发展的两种途径
- CISC (Complex Instruction Set Computer,复杂指令集计算机) ,
- RISC (Reduced Instruction Set Computer,精简指令集计算机)
- 指令的流水处理:
- 指令控制方式:顺序方式、重叠方式和流水方式
- 指令流水线的种类:
- 流水的级别上分:部件级、处理机级以及系统级的流水。
- 从流水的功能上分:单功能流水线和多功能流水线。
- 从流水的连接上分:静态流水线和动态流水线。
- 从流水是否有反馈回路分:线性流水线和非线性流水线。
- 从流水的流动顺序上分:同步流水线和异步流水线。
- 从流水线的数据表示上分:标量流水线和向量流水线。
- RISC中采用的流水技术有3种: 超流水线、超标量以及超长指令字
4.处理机
- 阵列处理机将重复设置的多个处理单元(PU)按一定方式连成阵列, 在单个控制部件(CU)控制下, 对分配给自己的数据进行处理, 并行地完成一条指令所规定的操作。 这是一种单指令流多数据流计算机, 通过资源重复实现并行性
- 并行处理机:SIMD和MIMD是典型的并行计算机,SIMD有共享存储器和分布存储器两种形式。在具有共享存储器的SIMD结构(如图1-4所示)中, 将若干个存储器构成统一的并行处理机存储器, 通过互联网络ICN为整个并行系统的所有处理单元共享。 PE为处理单元,CU为控制部件, M为共享存储器, ICN为互联网络
- 多处理机:多处理机系统是由多台处理机组成的系统, 每台处理机有属于自己的控制部件, 可以执行 独立的程序, 共享一个主存储器和所有的外部设备,是多指令流多数据流计算。
- 存储系统
-
存储器分类
- 按存储器所处的位置分类:内存和外存
- 按存储器的构成材料分类:磁存储器、半导体存储器和光存储器
- 按存储器的工作方式分类:读/写存储器和只读存储器
- 按访问方式分类:按地址访问的存储器和按内容访问的存储器
- 按寻址方式分类:随机存储器、顺序存储器和直接存储器
-
相联存储器
相联存储器是一种按内容访问的存储器。
工作原理:把数据或数据的某一部分作为关键字, 按顺序写入信息, 读出时并行地将该关键字与存储器中的每一单元进行比较, 找出存储器中所有与关键字相同的数据字, 特别适合于信息的检索和更新 -
高速缓存:用来存放当前最活跃的程序和数据
特点是: 位于CPU与主存之间; 容量一般在几千字节到几兆字节之间; 速度一般比主存快5〜10倍, 由快速半导体存储器构成; 其内容是主存局部域的副本, 对程序员来说是透明的。- 地址映像:在CPU工作时, 送出的是主存单元的地址, 而应从Cache存储器中读/写信息。 这就需要
将主存地址转换成Cache存储器的地址, 这种地址的转换称为地址映像。
- 直接映像:主存的块与Cache块的对应关系是固定的,优点是地址变换很简单, 缺点是灵活性差
- 全相联映像:主存与Cache存储器均分成大小相同的块。主存的任一块可以调入Cache存储器的任何一个块的空间中
- 组相联映像:这种方式是前面两种方式的折中。 具体方法是将Cache中的块再分成组,规定组釆用直接映像方式而块采用全相联映像方式。
- 地址映像:在CPU工作时, 送出的是主存单元的地址, 而应从Cache存储器中读/写信息。 这就需要
将主存地址转换成Cache存储器的地址, 这种地址的转换称为地址映像。
-
磁盘阵列技术:多台磁盘存储器组成的一个快速、大容量、高可靠的外存子系统。 常见的磁盘阵列称为廉价冗余磁盘阵列(Redundant Array of Independent Disk, RAID)。
-
计算机中断方式 中断处理方法:多中断信号线法(MultipleInterruptLines)、中断软件查询法(Software Poll)、菊花链法(Daisy Chain)、总线仲裁法和中断向量表法
- 总线(Bus)
- 总线分类
- 数据总线:用来传送数据信息, 是双向的
- 地址总线:传送CPU发出的地址信息, 是单向的。
- 控制总线:传送控制信号、时序信号和状态信息等
- 常见总线:ISA总线,EISA总线,PCI总线,PCIExpress总线,前端总线,RS-232C,SCSI总线,SATA,USB,IEEE-139,IEEE-488总线
3.计算机安全性
- 计算机的安全等级,三类安全性:技术安全性、管理安全性和政策法律安全性
- 安全评估准则:
- (1)美国国防部和国家标准局推出的《可信计算机系统评估准则》 (TCSEC)。
- (2)加拿大的《可信计算机产品评估准则》 (CTCPEC)。
- (3)美国制定的《联邦(最低安全要求) 评估准则》 (FC)。
- (4) 欧洲英、法、德、荷四国国防部门信息安全机构联合制定的《信息技术安全评估准则》 (ITSEC), 欧盟各国使用的共同评估标准。
- (5)美国制定的《信息技术安全通用评估准则》 (简称CC标准)
- 影响数据安全的因素:
- 内部因素:采用多种技术对数据加密; 制定数据安全规划; 建立安全存储体系; 建立事故应急计划和容灾措施; 重视安全管理, 制定数据安全管理规范。
- 外部因素:数据分成不同的密级, 规定外部使用人员的权限; 设置身份认证、密 码、设置口令、设置指纹和声纹笔迹等多种认证; 设置防火墙; 建立入侵检测、审计和追踪, 对计算机进行防卫。 计算机物理环境的保障、防辐射、防水和防火等外部防灾措施。
- 加密技术:
- 对称加密技术:数据加密标准(Digital Encryption Standard, DES)算法,三重DES (3DES,或称TDEA),RC-5 (Rivest Cipher 5),国际数据加密算法(International Data Encryption Adieman, IDEA),高级加密标准(Advanced Encryption Standard, AES)算法
- 非对称加密技术:公开密钥(Publickey)和私有密钥(Privatekey),RSA (Rivest, Shamir and Adleman)算法就是采用公钥和密钥的加密算法。
- MD5算法:(1)压缩性: 任意长度的数据, 算出的MD5值长度都是固定的。(2)容易计算: 从原数据计算出MD5值很容易。(3)抗修改性: 对原数据进行任何改动, 即使只修改1个字节, 所得到的MD5值都有很 大区别 (4)强抗碰撞:已知原数据和其MD5值, 找到有相同MD5值的数据非常困难
- SSL协议( Secure Sockets Layer,安全套接层) SSL协议用途:(1)用户和服务器的合法性认证。(2) 加密数据以隐藏被传送的数据。(3)保护数据的完整性
- 计算机可靠性模型:串联系统,并联系统,N模冗余系统
- 计算机性能评测的常用方法: (1)时钟频率 (2) 指令执行速度 (3) 等效指令速度法 (4) 数据处理速率(Processing Data Rate, PDR)法 (5) 核心程序法
二 软件工程基础知识
软件工程是指应用计算机科学、 数学及管理科学等原理, 以工程化的原 则和方法来解决软件问题的工程, 其目的是提高软件生产率、 提高软件质量、降低软件成本。 软件工程涉及软件开发、 维护、 管理等多方面的原理、 方法、 工具与环境,
1.计算机软件
按照软件的应用领域, 将计算机软件分为十大类:系统软件,应用软件,工程/科学软件,嵌入式软件,产品线软件,Web应用,人工智能软件,开放计算,网络资源,开源软件、
1.1 软件工程基本原理:
美国著名的软件工程专家B.W.Boehm于1983年提出了软件工程的7条基本原理:
-
用分阶段的生命周期计划严格管理
-
坚持进行阶段评审
-
实现严格的产品控制
-
采用现代程序设计技术
-
结果应能清楚地审查
-
开发小组的人员应少而精
-
承认不断改进软件工程实践的必要
软件的生存周期分为:可行性分析与项目开发计划、 需求分析、 设计(概要设计和详细设计)、 编码、 测试、维护等
2. 软件开发模型
软件过程模型:瀑布模型、 增量模型、 演化模型(原型模型、 螺旋模型)、 喷泉模型、 基于构件的开发模型和形式化方法模型
2.1 瀑布模型
1. 瀑布模型是彳冬软件生存周期中的各个活动规定为依线性顺序连接的若干阶段的模型, 包括
1. 需求分析、 设计、 编码、 测试、 运行与维护。它规定了由前至后、 相互衔接的固定次序, 如同
1. 瀑布流水逐级下落
1. 
V模型:瀑布模型的一个变体,V模型描述了质量保证活动和沟通、 建模相关活动以及早期构建相关的活动之间的关系。
优点: 容易理解, 管理成本低; 强调开发的阶段性早期计划及需求调查和产品测试。
缺点:客户必须能够完整、 正确和清晰地表达他们的需要,对于项目风险的控制能力较弱
2.2 增量模型、
增量模型融合了瀑布模型的基本成分和原型实现的迭代特征, 它假设可以将需求分段为一系列增量产品, 每一增量可以分别开发。 该模型釆用随着日程时间的进展而交错的线性序列,每一个线性序列产生软件的一个可发布的“ 增量”。当使用增量模型时, 第1个增量往往是核心的产品。 客户对每个增量的使用和评估都作为下一个增量发布的新特征和功能, 这个过程在每一个增量发布后不断重复, 直到产生了最终的完善产品。
增量模型强调每一个增量均发布一个可操作的产品
优点:具有瀑布模型的所有优点,第一个可交付版本所需要的成本和时间很少; 开发由增量表示的小系统所承担的风险不大
缺点:如果规划, 产生的初始增量可能会造成后来增量的不稳定; 如果需求不像早期思考的那样稳定和完整, 那么一些增量就可能需要重新开发, 重新发布; 管理发生的成本、 进度和配置的复杂性可能会超出组织的能力
2.3 演化模型(原型模型、 螺旋模型)
演化模型是迭代的过程模型, 使得软件开发人员能够逐步开发出更完整的软件版本,专门应对不断演变的软件产品的过程模型。
A. 原型模型
B. 螺旋模型
2.4 喷泉模型、
喷泉模型是一种以用户需求为动力, 以对象作为驱动的模型, 适合于面向对象的开发方法。它克服了瀑布模型不支持软件重用和多项开发活动集成的局限性。喷泉模型使开发过程具有迭代性和无间隙性。 迭代意味着模型中的开发活动常常需要重复多次, 在迭代过程中不断地完善软件系统
优点:可以提高软件项目的开发效率, 节省开发时间。
缺点: 在开发过程中需要大量的开发人员,不利于项目的管理,要求严格管理文档, 审核的难度加大
2.5 基于构件的开发模型
基于构件的开发是指利用预先包装的构件来构造应用系统。 构件可以是组织内部开发的构件, 也可以是商品化成品(Commercial Off-The-Shelf, COTS)软件构件。 基于构件的开发模型具有许多螺旋模型的特点, 它本质上是演化模型, 需要以迭代方式构建软件。 其不同之处在于,基于构件的开发模型采用预先打包的软件构件开发应用系统。
2.6 形式化方法模型
-
形式化方法是建立在严格数学基础上的一种软件开发方法, 其主要活动是生成计算机软件。
-
形式化的数学规格说明,形式化方法用严格的数学语言和语义描述功能规约和设计规约, 通过数学的分析和推导,易于发现需求的歧义性、 不完整性和不一致性, 易于对分析模型、 设计模型和程序进行验证。通过数学的演算, 使得从形式化功能规约到形式化设计规约, 以及从形式化设计规约到程序代码的转换成为可能。
2.7 统一过程(UP )模型
统一过程模型是一种“ 用例和风险驱动, 以架构为中心, 迭代并且增量” 的开发过程, 由UML方法和工具支持。
统一过程定义了 4个技术阶段及其制品:
-
起始阶段(InceptionPhase)
-
精化阶段(ElaborationPhase)
-
构建阶段(ConstructionPhase)
-
移交阶段(Transition Phase)
统一过程的典型代表是RUP (Rational Unified Process)。 RUP是UP的商业扩展, 完全兼容UP,但比UP更完整、 更详细.
2.8 敏捷方法
敏捷开发的总体目标是通过“ 尽可能早地、 持续地对有价值的软件的交付” 使客户满意。通过在软件开发过程中加入灵活性, 敏捷方法使用户能够在开发周期的后期增加或改变需求。敏捷过程的典型方法有很多, 每一种方法基于一套原则, 这些原则实现了敏捷方法所宣称的理念(敏捷宣言)
A. 极限编程(XP)
XP是一种轻量级(敏捷)、 高效、 低风险、 柔性、 可预测的、 科学的软件开发方式。 它由价值观、 原则、 实践和行为4个部分组成, 彼此相互依赖、 关联, 并通过行为贯穿于整个生存周期。
- 4大价值观: 沟通、 简单性、 反馈和勇气。
- 5个原则: 快速反馈、 简单性假设、 逐步修改、 提倡更改和优质工作。
- 12个最佳实践: 计划游戏(快速制定计划、随着细节的不断变化而完善)、 小型发布(系统的设计要能够尽可能早地交付)、 隐喻(找到合适的比喻传达信息)、简单设计(只处理当前的需求, 使设计保持简单)、 测试先行(先写测试代码, 然后再编写程序)、重构(重新审视需求和设计, 重新明确地描述它们以符合新的和现有的需求)、结队编程、 集体代码所有制、 持续集成(可以按日甚至按小时为客户提供可运行的版本)、每周工作40个小时、现场客户和编码标准。
B. 水晶法(Crystal)
水晶法认为每一个不同的项目都需要一套不同的策略、 约定和方法论, 认为人对软件质量有重要的影响, 因此随着项目质量和开发人员素质的提高, 项目和过程的质量也随之提高。通过更好地交流和经常性的交付, 软件生产力得到提高。
C. 并列争求法(Scrum)
并列争求法使用迭代的方法,把每30天一次的迭代称为一个“ 冲刺” , 并按需求的优先级别来实现产品。 多个自组织和自治的小组并行地递增实现产品。
D. 自适应软件开发(ASD)
ASD有6个基本的原则: 有一个使命作为指导; 特征被视为客户价值的关键点; 过程中的等待是很重要的, 因此“ 重做” 与“ 做”同样关键; 变化不被视为改正, 而是被视为对软件开发实际情况的调整; 确定的交付时间迫使开发人员认真考虑每一个生产的版本的关键需求。
E. 敏捷统一过程(AUP)
敏捷统一过程(Agile Unified Process, AUP)采用“ 在大型上连续” 以及在“ 在小型上迭代” 的原理来构建软件系统。 采用经典的UP阶段性活动(初始、 精化、 构建和转换), 提供了一系列活动, 能够使团队为软件项目构想出一个全面的过程流。
3. 需求分析
- 需求分析内容:
-
功能需求。 考虑系统要做什么, 在何时做, 在何时以及如何修改或升级。
-
性能需求。 考虑软件开发的技术性指标。 例如, 存储容量限制、 执行速度、 响应时间及吞吐量。
-
用户或人的因素。 考虑用户的类型。
-
环境需求。 考虑未来软件应用的环境, 包括硬件和软件。
-
界面需求。 考虑来自其他系统的输入, 到其他系统的输出, 对数据格式的特殊规定,对数据存储介质的规定。
-
文档需求。 考虑需要哪些文档, 文档针对哪些读者。
-
数据需求。 考虑输入、 输出数据的格式, 接收、 发送数据的频率, 数据的准确性和精度, 数据流量, 数据需保持的时间。
-
资源使用需求。 考虑软件运行时所需要的数据、 其他软件、 内存空间等资源; 软件开发、 维护所需的人力、 支撑软件、 开发设备等。
-
安全保密要求。 考虑是否需要对访问系统或系统信息加以控制, 隔离用户数据的方法,用户程序如何与其他程序和操作系统隔离以及系统备份要求等。
-
可靠性要求。 考虑系统的可靠性要求, 系统是否必须检测和隔离错误; 出错后, 重启系统允许的时间等。
-
软件成本消耗与开发进度需求。 考虑开发是否有规定的时间表, 软/硬件投资有无限制等。
-
其他非功能性要求。 如釆用某种开发模式, 确定质量控制标准、 里程碑和评审、 验收标准、 各种质量要求的优先级等, 以及可维护性方面的要求。
-
需求分析原则
- 必须能够表示和理解问题的信息域。
- 必须能够定义软件将完成的任务。
- 必须能够表示软件的行为(作为外部事件的结束)。
- 必须划分描述数据、 功能和行为的模型, 从而可以分层次地揭示细节。
- 分析过程应该从要素信息移向细节信息
-
需求工程
需求工程细分为6个阶段:需求获取、 需求分析与协商、 系统建模、 需求规约、需求验证以及需求管理
4. 系统设计
系统设计的主要目:为系统制定蓝图, 在各种技术和实施方法中权衡利弊, 精心设计,合理地使用各种资源, 最终勾画出新系统的详细设计方案。
系统设计的主要内容:新系统总体结构设计、 代码设计、 输出设计、 输入设计、 处理过程设计、 数据存储设计、 用户界面设计和安全控制设计等。
最常用的系统设计方法:
- 面向数据流的结构化设计方法(SD)。
- 面向对象的分析方法(00D)。
系统设计的基本任务:
- 分为概要设计
- 详细设计
- 概要设计
-
设计软件系统总体结构:其基本任务是釆用某种设计方法, 将一个复杂的系统按功能划分成模块; 确定每个模块的功能; 确定模块之间的调用关系; 确定模块之间的接口, 即模块之间传递的信息; 评价模块结构的质量。
-
数据结构及数据库设计:数据结构的设计,数据库的设计,编写概要设计文档
-
评审:对设计部分是否完整地实现了需求中规定的功能、 性能等要求, 设计方法的可行性, 关键的处理及内外部接口定义的正确性、 有效性、 各部分之间的一致性等都进行评审
-
详细设计
- 对每个模块进行详细的算法设计, 用某种图形、 表格和语言等工具将每个模块处理过程的详细算法描述出来。
- 对模块内的数据结构进行设计。
- 对数据库进行物理设计, 即确定数据库的物理结构。
- 其他设计。① 代码设计。 对数据库中某些数据项的值要进行代码设计 。②输入/输出格式设计。③用户界面设计。
- 编写详细设计说明书。
- 评审。 对处理过程的算法和数据库的物理结构评审。
5. 运行和维护知识
-
系统试运行
主要工作:
-
对系统进行初始化、 输入各种原始数据记录。
-
记录系统运行的数据和状况。
-
核对新系统输出和旧系统(人工或计算机系统) 输出的结果。
-
对实际系统的输入方式进行考察(是否方便、 效率如何、 安全可靠性、 误操作保护等)。
-
对系统实际运行、 响应速度(包括运算速度、 传递速度、 查询速度和输出速度等) 进行实际测试。
- 系统转换:新旧系统之间的转换方式有直接转换、 并行转换和分段转换
- 系统可维护性评价指标:可理解性,可测试性,可修改性。
- 系统维护主要包括硬件维护、 软件维护和数据维护
- 软件维护的内容:
-
正确性维护。 正确性维护是指改正在系统开发阶段已发生而系统测试阶段尚未发现的错误。 这方面的维护工作量要占整个维护工作量的17%〜21%。
-
适应性维护。 适应性维护是指使应用软件适应信息技术变化和管理需求变化而进行的修改。 这方面的维护工作量占整个维护工作量的18%〜25%。
-
完善性维护。 这是为扩充功能和改善性能而进行的修改, 主要是指对已有的软件系统增加一些在系统分析和设计阶段中没有规定的功能与性能特征。,对处理效率和编写程序的改进, 这方面的维护占整个维护工作的 50%〜60%
-
预防性维护。 为了改进应用软件的可靠性和可维护性, 为了适应未来的软/硬件环境的变化, 应主动增加预防性的新的功能, 以使应用系统适应各类变化而不被淘汰, 这方面的维护工作量占整个维护工作量的4%左右
- 系统评价
信息系统的评价分为广义和狭义两种。 广义的信息系统评价是指从系统开发的一开始到结束的每一阶段都需要进行评价。 狭义的信息系统评价则是指在系统建成并投入运行之后所进行的全面、 综合的评价。
按评价的时间与信息系统所处的阶段的关系,系统评价分为:
-
立项评价。 立项评价指信息系统方案在系统开发前的预评价, 即系统规划阶段中的可行性研究。 评价的目的是决定是否立项进行开发,
-
中期评价。 项目中期评价包含两种含义, 一是指项目方案在实施过程中因外部环境出现重大变化(例如市场需求变化、 竞争性技术或更完美的替代系统出现, 或者发现原先的设计有重大失误等) 需要对项目的方案进行重新评估, 以决定是继续执行还是终止该方案;另一种含义也可称为阶段评估, 是指在信息系统开发正常的情况下, 对系统设计、 系统分析、 系统实施阶段的阶段性成果进行评估。 由于一般都将阶段性成果的提交视为信息系统建设的里程碑,
-
结项评价。 信息系统的建设是一个项目, 是项目就需要有终结时间。 结项评价是指项目准备结束时对系统的评价,
- 系统评价的指标
-
从信息系统的组成部分出发,按照运行效果和用户需求(人)、 系统质量和技术条件
-
从信息系统的评价对象出发, 系统质量和技术水平;用户需求和运行质量; 社会效益指标。
-
从经济学角度出发, 系统成本、 系统效益和财务指标