软考:系统架构设计师教材笔记(持续更新中)
教材中的知识点都会在。其实就是将教材中的废话删除,语言精练一下,内容比较多,没有标注重点
系统架构概述
定义
系统是指完成某一特定功能或一组功能所需要的组件集,而系统架构则是对所有组件的高层次结构表示,包括各个组件,连接件,约束规范以及指导这些内容的设计和原理,系统设计的作用主要包括以下几点:
- 解决相对复杂的需求分析问题;
- 解决非功能属性在系统占据重要位置的设计问题;
- 解决生命周期长、扩展性需求高的系统整体结构问题;
- 解决系统基于组件需要的集成问题;
- 解决业务流程再造难的问题。
典型架构
1. 分层架构
分层架构将软件抽象为若干水平层,每一层都有清晰的角色分工,并且和其他层之间保持独立,不需要知道其他层具体做了什么,而是通过接口进行通信,最常见是的四层架构,分别为表现成,业务层,持久层,数据库层。
2. 事件驱动架构
事件驱动架构是通过时间进行通信的软件架构,从事件的出来,在通过分发器分到给执行的事件处理模块
3. 微核架构
为何架构由曾为插件架构,其由内核和多个即插组件组成。内核包含了系统运行的最小功能,插件在补充系统功能的同时又相互独立,不会互相影响。
4. 微服务架构
微服务架构是将一个系统的不同功能的集合拆分为多个服务,互相通过远程通信协议交互(典型如dubbo)。每个服务之间互不影响,对外统一体现为用户接口层。
5. 云架构
微服务是将各个功能进行拆分,为云架构则是每个单元都拥有所有功能的处理能力,多个单元之间独立的同时,还可以随意的增减单元,来控制整个系统的能力。对外则有一个虚拟中间件服务则通信,会话控制,分布式处理等等(集群应该就是云架构实现的一种)。
常用的建模方法
架构师在进行软件架构设计时,必须掌握软件架构的表示方法,即如何对软件架构建模。根据建模的侧重点的不同,可以将软件架构的模型分成4种:结构模型、框架模型、动态模型和过程模型。
- 结构模型:这是一个最直观、最普遍的建模方法。此方法以架构的构件、连接件和其他概念来刻画结构。并力图通过结构来反映系统的重要语义内容,包括系统的配置、约束、隐含的假设条件、风格和性质。研究结构模型的核心是架构描述语言。
- 框架模型:框架模型与结构模型类似,但它不太侧重描述结构的细节,而更侧重整体的结构。框架模型主要以一些特殊的问题为目标建立只针对和适应问题的结构。
- 动态模型:动态模型是对结构或框架模型的补充,主要研究系统的“大颗粒”行为的性质。例如,描述系统的重新配置或演化。这里的动态可以是指系统总体结构的配置、建立或拆除通信或计算的过程,这类系统模型常是激励型的。
- 过程模型:过程模型是研究构造系统的步骤和过程,其结构是遵循某些过程脚本的结果。(主要体现功能过程,如A调用了B,B进而调用了C等)。
系统架构师概述
系统架构设计师是项目开发活动中的众多角色之一,它可以是一个人或一个小组,也可以是一个团队。
其主要能力包括:
- 掌握业务领域知识:对某一行业有深刻的见解当架构设计师理解软件开发但不理解业务模型时,可能会开发出一个不能满足用户需求而只能反映该架构设计师所熟悉内容的解决方案;
- 掌握技术知识:一个架构设计师应该拥有一定程度的技术水平。然而架构设计师不必是一个技术专家,它必须关注技术的重要因素,而不是细节;
- 掌握设计能力:设计过程是架构设计的核心内容,架构是关键设计决策的具体化。
- 具备编程技能:即使他们在项目中不必编写代码,也必须跟上技术的更新。优秀的架构设计师通常会有组织地参与开发并应该编写一定量的代码,如果架构设计师参与代码实现,开发组织会从架构设计师那儿获得见识,这些见识可以直接有益于架构的专业知识本身。
- 具备沟通能力:
- 具备决策能力:
- 知道组织策略:
- 谈判专家:
其主要职责包括
- 领导与协调整个项目中的技术活动(分析、设计和实施等)。
- 推动主要的技术决策并最终表达为系统架构。
- 确定系统架构,并促使其架构设计的文档化,这里的文档化应包括需求、设计、实施和部署等“视图”。
如果架构设计师角色由一个团队履行,拥有一个首席架构设计师角色非常重要,他不仅具有先知先明的能力、还是架构团队的单点协调人。没有这个协调人,架构团队的成员要创造出内聚的架构或做出决策是困难的。
优秀的架构设计师应知道他的优势和弱势。无论架构设计师的角色是否由一个团队来履行,架构设计师都应有好几个可信顾问的支持,这样架构设计师不仅可以了解其弱点,还可以通过获取必要的技能或与他人一起合作来弥补其知识的缺陷,进而弥补这些弱点。最优秀的架构通常由一个团队而不是个人创建,这仅仅因为当有多人参与进来时,使见识更广和更深。
要从工程师成长为系统架构设计师,需要不断积累经验、拓宽视野和深入思考。成长过程一般分为以下阶段:
- 工程师阶段(1~3年):
在资深人员指导下完成开发工作,主要积累基础技能(编程语言、数据结构、操作系统、数据库、开发流程)。 - 高级工程师阶段(3~5年):
能独立完成需求分析、方案设计和开发实施。重点提升对技术原理的理解和运用成熟设计理论(设计模式、设计原则、数据库范式、缓存策略等)的能力。 - 技术专家阶段(4~8年):
成为某一技术领域的专家,能够在已有架构基础上进行扩展、优化和定制,对本领域内的多种技术方案有深入理解,并能灵活选用。 - 初级架构设计师(5~8年):
能独立设计一个不太复杂的系统架构,有一套成熟的方法论支撑架构决策。与技术专家相比,初级架构设计师更注重架构方法论的清晰思考与阐述。 - 中级架构设计师(8~10年):
能应对复杂系统的架构设计(高性能、高可用、可扩展和海量存储等场景)。在此阶段,若无合适的开源方案可用,需要自主创新,设计出符合业务需求的全新架构。 - 高级架构设计师(10年以上):
能够创造新的架构模式,推动技术革新与行业变革。
计算机系统概述
计算机系统是有数据管理计算机硬件软件以及网络组成的系统。其分为硬件和远见两部分,硬件有物理层面的机械,电子元器件等实体构成,而软件有可以细分为系统软件和应用软件,系统软件是指支持应用软件运行,为用户开发应用软件提供支撑的软件,如操作系统。
计算及硬件组成
计算机组成结构源于冯诺依曼计算机接口,其将计算机结构分为5部分,分别为控制淡云,算数逻辑单元,存储器,输入设备和输出设备,但现实的硬件构成通常将控制单元和运算单元集成为一体作为处理器(CPU),输入设备和输出设备被作为一体,再次划分为总线,接口和外部设备。
处理器
进过长期发展,CPU位宽由四位发展为六十四位,添加了多级缓存和多种通信总线和接口,内核由单核发展位多核,异构多核(各个CPU核心性能不一致,满足不同性能需求的任务)和众核处理器(有相较于多核更多的CPU核心,更好的处理并行任务)等。
处理器的指令集按照复杂程度可以分为复杂指令集(CISC)和精简指令集(RISC)。CISC以intel和amd的x86为代表,RISC则是以ARM为代表。RISC 已经成为计算机指令集发展的趋势,几乎所有后期出现的指令集均为RISC 架构。
典型的处理器系统结构如图所示
指令部件通过MMU(内存管理单元)和缓存来CPU处理外部数据,整个过程包括:
- 从内存等存储设备中取得相应的软件代码指令并完成译码和控制操作
- 控制存取部件从存储设备中取得新的数据
- 控制寄存器组为运算器准备有关寄存器数据
- 准备好结果寄存器,控制整型、浮点、向量等运算部件开展运算。
- 运算部件、寄存器单元、存取部件将执行结果通知完成部件,并在完成部件中完成结果的排队
- 由完成部件向指令部件反馈执行结果,控制指令的顺序执行、跳转等时序。
存储器
存储器的硬件结构可以分为SRAM、DRAM、NVRAM、Flash、EPROM、Disk等。计算机的存储系统采用分层结构设计,按照与处理器的物理距离可以分为四个层次。
-
片上缓存:在处理器核心中直接集成的缓存,一般为SRAM 结构,实现数据的快速读取。它容量较小,一般为16kB~512kB, 按照不同的设计可能划分为一级或二级。
-
片外缓存:在处理器核心外的缓存,需要经过交换互联开关访问,一般也是由SRAM构成,容量较片上缓存略大,可以256kB~4MB。按照层级被称为 L2Cache或 L3Cache,或者称为平台 Cache(PlatformCache)
-
主存(内存):通常采用DRAM 结构,独立存在,通过总线与处理器连接。随着断电,其中的数据也会消失
-
外存(磁盘、硬盘):访问速度较慢,容量大,可持久化存储数据。不同的介质类型容量有所不同,如 Nor Flash容量一般在MB级别,磁盘容量则在G和TB级别。外存能够在掉电后保持数据,但并非所有介质都能够永久性保存数据,每种介质都有一定的年限,如Flash外存的维持数据的年限在10年左右,光盘年限在数年至数十年,磁盘年限在10年以上,磁带年限为30年以上。
总线
总线(Bus)是指计算机部件之间遵循某一特定协议实现数据交换的形式,即以一种特定格式和控制逻辑实现数据传输。按照总线在计算机的位置可以分为内总线、系统总线和外部总线。
- 内总线:用于各类芯片内部互连,也可称为片上总线 (On-Chip Bus)或片内总线。
- 系统总线:用于计算机内各个部件之间的连接,计算机发展位多总线结构后,其含义有所变化,狭义的系统总线仍未不见之间的总线,广义上,嘉颖宝航计算机系统内有系统总监再次级连的总线,常被称为局部总线。
- 外部总线:用户计算机主板和外部设备之间的连接,活着计算机系统之间互联的总线,常被称为通信总线。
总线之间通过桥 (Bridge)实现连接,它是一种特殊的外设,主要实现总线协议间的转换。
总线的性能指标常见的有总线带宽、总线服务质量QoS、 总线时延和总线抖动等。
计算机总线存在许多种类,常见的有并行总线和串行总线。并行总线主要包括 PCI、PCle 和 ATA(IDE)等,串行总线主要包括 USB、SATA、CAN、RS-232、RS-485、RapidIO 和以太网等。
接口
接口是指同一计算机不同功能层之间的通信规则。计算机接口有多种,常见的包括显示类接口 (HDMI、DVI 和 DVI等),音频输入输出类接口(TRS、RCA、XLR 等),网络类接口(RJ45、FC等),PS/2接口, USB 接口, SATA 接口, LPT 打印接口和RS-232接口等。此外,像离散量接口与 A/D 转换接口等这类接口一般属于非标准接口,而是随需求而设计。
对于总线而言,一种总线可能存在多种接口,比如,以太网总线可以通过RJ-45或同轴电缆与之连接, PCle总线则具有多种形态的接口实现连接。
外部设备
常见的外部设备包括键盘、鼠标、显示器、扫描仪、摄像头、麦克风、打印机、光驱、各型网卡和各型存储卡/盘等一切和计算机主题功能无关的计算机设备。
计算机软件
早期的计算机软件和计算机程序 (Computer Program)的概念几乎不加区别,后来计算机软件的概念在计算机程序的基础上得到了延伸。计算机软件是指计算机系统中的程序及其文档,是计算任务的处理对象和处理规则的描述。任何以计算机为处理工具的任务都是计算任务。处理对象是数据(如数字、文字、图形、图像和声音等,他们只是表示,而无含义)或信息(数据及有关的含义)。处理规则一般指处理的动作和步骤,文档是为了便于了解程序所需的阐述性资料。
软件系统是指在计算机硬件系统上运行的程序、相关的文档资料和数据的集合。用于扩充计算机功能,提高计算机效率,其通常分为系统软件和应用软件两大类。
系统软件
系统软件是为整个计算机系统服务的通用软件,他对计算机系统的资源进行管理,并为用户使用和其他应用软件的运行提供环境。根据系统软件的功能不同,可以分为操作系统,程序设计语言翻译系统,数据库管理系统,网络软件等。
操作系统
操作系统是计算机资源的管理者,其拥有对计算机系用的最高的操作权限。其通常由操作系统内核(进程管理(任务管理)、存储管理、文件管理和设备管理等功能的那些软件模块)和其他配套软件(括图形用户界面程序、常用的应用程序(如日历、计算器、资源管理器和网络浏览器等)、实用程序(任务管理器、磁盘清理程序、杀毒软件和防火墙等)以及为支持应用软件开发和运行的各种软件构件(如应用框架、编译器和程序库等))组成。其主要作用有三个:
- 管理计算机中运行的成语和分配各种软硬件资源。
- 为用户提供友善的操作界面。
- 为应用程序的开发和运行提供平台。
除了上述3个方面的作用之外,操作系统还具有辅导用户操作(帮助功能)、处理软硬件错误、监控系统性能、保护系统安全等许多作用。总之,有了操作系统,计算机才能成为一个高效、可靠、通用的数据处理系统。
操作系统的特性:
-
并发性:即使是单核cpu,但只要有操作系统的存在,操作系统会将cpu资源在多个程序之间切换,使宏观上有多个程序同时执行。
-
共享性:操作系统中的资源(包括硬件资源和信息资源),可以被多个并发执行的进行共享使用。
-
虚拟性:虚拟性是指操作系统中的一种管理技术,它是把物理上的一个实体变成逻辑上的多个对应物,或把物理上的多个实体变成逻辑上的一个对应物的技术。采用虚拟技术的目的是为用户提供易于使用且方便高效的操作环境。
-
不确定性:由于硬件资源有限,进程数量很多,所以进程的执行过程是不确定的。
操作系统的分类:
-
批处理操作系统:批处理操作系统就是一次处理多个程序的操作系统,批处理操作系统分为单道批处理和多道批处理。单道批处理操作系统就是cpu一次只执行一个程序,多道批处理操作系统就是多个程序之间切换执行。
-
分时操作系统:将cpu资源按时间分片,每次分配给不同的程序一个时间片。
-
实时操作系统:其主要功能是对外来信息能够进行快速处理,其分为实时控制系统和实时信息处理系统,实时控制系统主要用于生产过程的自动控制,如果数据自动采集,导弹的制导系统等。实时信息处理系统主要用于实时信息处理,如果飞机订票系统。
-
网络操作系统:网络操作系系统是指计算机能放便而有效的共享网络资源。
-
分布式操作系统:锁哥分散的计算机经连接而成的计算机系统。
-
微型计算机操作系统:微型计算机操作系统简称微机操作系统,常用的有 Windows、Mac OS、Linux。
-
嵌入式操作系统:嵌入智能设备的操作系统。
数据库
存储数据的功能是由外存提供,而高效组织村树数据的规则则是由数据库定义,其内部不仅定义数据的存储规则,也描述各个数据之间的关系。早期的数据库主要分为层次式数据库,网络式数据库和关系型数据库。目前最常见的数据库是关系型数据库和非关系性数据库。根据数据库的存储体系,还可以分为关系性数据库,键值数据库,列存储数据库,文档数据库和搜索引擎数据库等类型。
- 关系性数据库:把数据结构归位简单的二元关系,对数据的操作建立在多个关系表中。
- 键值数据库:非关系性数据库,使用简单的键值存储数据。
- 列存储数据库:一列为一个数据,也就是传统的关系性数据库行和列倒过来。
- 文档型数据库:通过文档的方式存储数据,数据格式可以是XML,JSON,BSON等格式。
- 搜索引擎数据库:
- 搜索引擎数据库是应用在搜索引擎领域的数据存储形式,由于搜索引擎会爬取大量的数据,并以特定的格式进行存储,这样在检索的时候才能保证性能最优。
关系型数据库设计的特点及方法:
数据库设计是指对于一个给定的应用环境构造最优的数据库结构。数据库设计包括结构特性和行为特性两个方面数据库设计的特点有:从数据结构即数据模型开始,并以数据模型为核心展开,这是数据库设计的一个主要特点;静态结构设计与动态行为设计分离;试探性;反复性和多步性。
目前已知的数据库设计方法可分为4类,即直观设计法,规范设计法,计算机辅助设计法和自动化设计法。常用的有基于3NF的设计方啊,基于实体联系(E-R)模型的数据库设计方法,机遇视图概念的数据库设计方啊,面向对象的关系数据库设计方法、计算机辅助数据库设计方法、敏捷数据库设计方法等。
基于3NF(第三范式)的设计方法:这个设计方在是在完成需求分析和初步表结构后,进一步确保数据库的设计是符合三种范式的,其中分别为第一范式(确保表中的各个字段都是原子性的),第二范式(确保每个非主键属性完全依赖于主键,消除部分依赖,对于符合主键,确保非主属性不依赖依赖于主键的一部分),第三范式(确保每个非主属性不传递依赖于主键,消除传递依赖,这意味着非主属性之间不行改存在依赖关系),在确保这三个范式的前提下,进而确定主键,外键和表关系。这种方法可以减少数据库沉余,逻辑清晰。缺点是数据过于分散,查询复杂,设计复杂。
基于实体联系(E-R)模型的数据库设计方法:在明确需求后,需要根据确定需求中提到的实体对象,如学生,老师,书本,课程等,确定每个实体的属性,实体之间的关系,根据这些属性和关系,进而设计出表的字段,以及表和表之间的关系。进而绘制E-R图,在进一步细化。在根据E-R图设计关系性数据库的表结构。优点是指关移动,缺点是对于复杂的形同,E-R会变得非常复杂,难于管理。
第三范式主要着重于数据库设计的逻辑结构设计阶段,而E-R图则着重于概念结构设计阶段。
关系性数据库设计的基本步骤:
数据库设计分为需求分析、概念结构设计、逻辑结构设计、物理结构设计、应用程序设计和运行维护6个阶段,如图所示。
- 需求分析阶段的任务是明确用户对系统的需求,包括数据需求和围绕这些数据的业务处理需求。
- 数据库概念结构设计是在明确了需求后,建立信息模型,并按照选定的数据库,将其转换为数据的逻辑结构,这一步也叫数据建模。采用E-R 方法的数据库概念结构设计可分为三步:设计局部 E-R 模型、设计全局E-R 模型以及全局 E-R 模型的优化。
- 逻辑结构设计是在概念结构设计基础上进行的数据模型设计,可以是层次、网状模型和关系模型。逻辑结构设计阶段的主要任务是确定数据模型,将E-R 图转换为指定的数据模型,确定完整性约束,确定用户视图。
- 数据库在物理设备上的存储结构与存取方法称为数据库的物理结构。数据库的物理结构设计是对已确定的数据库逻辑结构,利用 DBMS(数据库管理系统) 所提供的方法、技术,以较优的存储结构和数据存取路径、合理的数据存放位置以及存储分配,设计出一个高效的、可实现的数据库物理结构。
分布式数据库:
分布式数据库体系结构是指将数据分散存储在多个物理位置(通常是不同的计算机或服务器)上的数据库系统。分布式数据库的特点是数据的集中控制性、数据独立性、数据冗余可控性、场地自治性和存取的有效性。
我国在多年研究与开发分布式数据库及制定《分布式数据库系统标准》中,提出了把分布式数据库抽象为4层的结构模式,如图所示。这种结构模式得到了国内外一定程度的支持和认同。
(1)全局外层:全局外层主要负责于用户和外部应用程序的交互,他提供统一的接口供外部使用。
(2)全局概念层:全局概念层负责管理和维护多个数据库之间的关系,确保数据的一致性和完成行,协调跨节点工作。
(3)局部概念层:负责当前节点的数据的组织和访问,确保节点上的数据和全局概念层的一致性,处理当前节点的事物。
(4)局部内层:实际的数据库。
文件系统
文件是具有符号名的一组相关信息集合。文件是一种抽象机制,他隐藏了硬件和实现细节,提供了将信息保存在外存上而且便于以后读取的手段。一个文件包含文件体和文件说明两个部分,文件体是文件真实的内容,文件说明是操作系统为了管理文件所用到的信息,包括文件名,文件类型,文件存储地址,文件长度,访问权限,建立时间和访问时间等。
文件系统是操作系统中实现了未见统一管理的一组软件和相关数据集合,文件系统的存在使用户可以根据文件名获取文件内容而非地址;提供统一的用户接口,使得不同设备上提供同样的接口,放便用户操作和编程;控制多个程序可以并发读写文件;限制不同用户对文件的权限;优化性能;能够验证文件完整性,有一定修复能力;
按照文件的性质和用途可以将文件分为系统文件(操作系统运行所必需的文件,包含操作系统内核、驱动程序、配置文件等),库文件(可以被多个程序共享使用的函数和资源)和用户文件(用户创建和使用的文件);按照信息保存期限分类可以将文件分为临时文件、档案文件和永久文件;按照文件的保护方式可以将文件分为只读文件、可执行文件和不保护文件;UNIX系统将文件分为普通文件、目录文件和设备文件(特殊文件);目前常用的文件系统类型有FAT、VFAT、NTFS、Ext2 和 HPFS 等。
文件的结构和组织
对于用户看到的文件结构,我们称其为文件的逻辑结构,用户无需知道文件的实际存储方式,只需要根据逻辑结构进行使用即可,逻辑结构也可以进一步细分为普通的记录式文件和无结构的流式文件,也就是字节流。
而文件的实际存储结构分为多种方式:
-
连续结构:直接将一个文件存储在一块连续的地址中(无论是内存还是外存,采用这种方式存储都会造成存储空间利用率低,产生碎片问题)。
-
链接结构:将文件存储在不连续的物理块中,每个物理块记录了下一部分文件所在物理块的地址。
-
索引结构:依旧将文件存储在不连续的物理块中,通过一个索引表来记录一个文件所有物理块所在的地址,索引表过大时会导致一个物理块无法容纳索引表,进而存储索引表仍然需要多个物理块,索引表的存储也有链接结构和索引结构两种存储方式。
索引结构和操作系统的页式内存管理非常相像
文件的存取方法和存储空间的管理
(1)文件的存取方法
文件的存取方法只读写文件存储器上,文件所涉及所有物理块的方法,通常有顺序读取和随机读取两种方法。
(2)文件存储空间的管理方法
空闲区表:文件系统可以通过维护空闲区表来记录连续的空闲物理块,每个连续的空闲物理块,被称作一个空闲区。空闲区表中记录了序号,空闲区中第一个空闲块的地址,以及空闲区有多少空闲块,大概结构如下图。
位示图:通过Bitmap数据结构,通过bit保存所有物理块的状态。
空闲块链:每个空闲块保存下一个空闲物理块的指针。
成组链接法:UNIX 系统采用该方法。将若干个物理块作为一组,每个组第一个物理块记录了当前组的所有物理块是否空闲,以及下一组有多少空闲块。
文件的共享与保护
常见的文件的链接方式有两种,硬连接和符号连接。其中硬连接是指多个文件名直接指向文件地址(删除时必须删除所有的硬连接),而符号链接则是原本文件的映射。
文件系统通过控制用户对文件存取控制来保护文件安全。实现方法主要有:
- 存取控制矩阵:通过文件名和文件用户作为行和列,记录权限为一个二维矩阵。
- 存取控制表:存取控制矩阵由于太大往往无法实现,改进的办法是按用户对文件的访问权力的差别对用户进行分类,这就是存取控制表,存取控制表记录了那个分类的用户,分别有哪些权限。UNIX 系统把用户分成三类:文件主、同组用户和其他用户,每类用户的存取权限为可读、可写、可执行以及它们的组合。
- 用户权限表:另一种改进方法是,以用户或用户组为单位,将用户可存取的用户存入表中。
- 密码:不再区分用户,通过密码访问文件。
网络协议
定义:网络中的计算机与计算机进行通信时,为了能够实现数据的正常发送与接收必须要遵循的一些事先约定好的规则(标准或约定),在这些规程中明确规定了通信时的数据格式、数据传送时序以及相应的控制信息和应答信号等内容。常用的网络协议包括局域网协议 (LAN)、 广域网协议 (WAN)、 无线网协议和移动网协议。互联网使是 TCP/IP 协议。
中间件
位于操作系统之上,应用软件之下,在其中起承上启下作用的软件称之为中间件。教材中称中间件的作用是为应用软件和操作系统之间提供了标准化接口和协议。我认为这种说法不够准确,中间件的作用应该是对操作系统功能调用的一种封装,或者说对操作硬件功能的一种封装,并提供接口,目的是为了解决应用软件开发过程中面对的一些问题,并不仅仅是提供操作系统的标准化接口。C++语言已经提供了完善的系统调用函数,如果仅仅是为了更方便的系统调用,无需使用C++再次开发一款软件,也就是中间件。
中间件相关的知识在工作中经常涉及,较为熟悉。教材中提到的一些我也并不认同,这里不做赘述。
软件构件(组件化开发)
构件又称为组件,实际上就是对一些可复用的代码进行封装,或为了解决某些问题或需求的一组代码的封装。比如说前端的UI组件库,后端一些工具类,都可以被称为软件构件。构件通外向外部提供统一的接口,来让外部调用构件的功能。
随着软件构件技术的发展,人们开始尝试利用软件构件进行搭积木式的开发,即构件组装模型。在构件组装模型中,当经过需求分析定义出软件功能后,将对构件的组装结构进行设计,将系统划分成一组构件的集合,明确构件之间的关系。在确定了系统构件后,则将独立完成每一个构件,这时既可以开发软件构件,也可以重用已有的构件,当然也可以购买或选用第三方的构件。构件是独立的、自包容的,因此架构的开发也是独立的,构件之间通过接口相互协作。构件组装模型的一般开发过程如图所示。
构件组装模型的优点:系统的扩展变得更加容易;重用良好的构件,降低软件开发成本;构件的粒度较整个系统更小,因此安排开发任务更加灵活;
构件组装模型也有明显的缺点:对构件的设计需要经验丰富的架构设计师;在考虑软件的重用度时,往往会对其他方面做出让步,如性能等;程序员需要熟练地掌握构件,增加了研发人员的学习成本;第三方构件库的质量会最终影响到软件的质量;
商用构件的标准规范:当前,主流的商用构件标准规范包括对象管理组织 (Object Management Group,OMG) 的CORBA、Sun 的J2EE 和 Microsoft的DNA。
(1)CORBA:CORBA(公共对象请求代理架构)主要分为3个层次:对象请求代理、公共对象服务和公共设置。最底层的对象请求代理,通过代理目标对象(分布式服务的一个节点)的网络请求和响应,定义接口规范的方法,实现不同服务,甚至不同语言之间的通信交互,是分布对象系统中的“软总线”;公共对象服务提供了更多的服务封装,其中包括命名服务,事件服务和安全服务等等;最上层的公共设施则定义了构件框架,提供可直接为业务对象使用的服务,规定业务对象有效协作所需的协定规则。
(2)在 J2EE 中,SUN 给出了完整的基于Java语言开发面向企业分布的应用规范。其中,在分布式互操作协议上, J2EE 同时支持远程方法调用 (Remote Method Invocation,RMI)和互联网内部对象请求代理协议 (Internet Inter-ORB Protocol,IIOP)。
(3) DNA 2000 是 Microsoft在推出Windows 2000 系列操作系统平台的基础上,在扩展了分布计算模型以及改造BackOffice系列服务器端分布计算产品后发布的新的分布计算架构和规范。
通过购买商用构件(平台)并遵循其开发标准来进行应用开发,是提高应用软件开发效率的常见选择。
应用软件
应用软件是指为某类应用需要或解决某个特定问题而设计的软件,如图形图像处理软件、财务软件、游戏软件和各种软件包等。在企事业单位或机构中,应用软件发挥着巨大的作用,承担了许多计算任务,如人事管理、财务管理和图书管理等。按照应用软件使用面的不同,可进一步把应用软件分为专用的应用软件和通用的应用软件两类。
**通用软件:**常见的通用软件分文字处理软件、电子表格软件、媒体播放软件、网络通信软件、个人信息管理软件、演示软件、绘图软件、信息检索软件和游戏软件等。这些软件设计得很精巧,易学易用,在用户几乎不经培训就能普及到计算机应用的进程中,它们起到了很大的作用。
**专用软件:**专用软件是按照不同领域用户的特定应用要求而专门设计开发的,如超市的销售管理和市场预测系统、汽车制造厂的集成制造系统、大学教务管理系统、医院信息管理系统、酒店客房管理系统等。这类软件专用性强,设计和开发成本相对较高,主要是机构用户购买,因此价格比通用应用软件贵得多。
嵌入式系统及软件
嵌入式系统是将信息处理过程和物理过程紧密结合的专用计算机系统,简单来说就是通过嵌入式代码处理信息,并将信息转化为实际的物理行为。嵌入式软件则是运行在物理器件中的程序,或者开发这些程序的工具。
嵌入式系统组成和特点
一般嵌入式系统由嵌入式处理器、相关支撑硬件、嵌入式操作系统、支撑软件以及应用软件组成。
- 嵌入式处理器:嵌入式系统需要伴随物理器件在不可预料的环境下工作,与一般的处理器相比,其必须肯呢个抵抗恶劣的环境。因此其除了一般处理器的低功耗,体积小外,还工艺还可以分为民用、工业和军用三个档次。
- 相关支撑硬件:相关支撑硬件是指除嵌入式处理器以外的构成系统的其他硬件,包括存储器、定时器、总线、 IO接口以及相关专用硬件。基于ARM 处理器的嵌入式计算机硬件组成图如图所示。
-
嵌入式操作系统:与传统操作系统不同的是,嵌入式操作系统应具备实时性、可剪裁性和安全性等特征。
-
支撑软件:支撑软件是指为应用软件开发与运行提供公共服务、软件开发、调试能力的软件,支撑软件的公共服务通常运行在操作系统之上,以库的方式被应用软件所引用。
-
应用软件:应用软件是指为完成嵌入式系统的某一特定目标所开发的软件。
根据嵌入式系统的应用背景及其在应用中所起作用,嵌入式系统应具备以下特性:
-
专用性强。嵌入式系统面向特定应用需求,能够把通用CPU 中许多由板卡完成的任务集成在芯片内部,从而有利于嵌入式系统的小型化。
-
技术融合。嵌入式系统将先进的计算机技术、通信技术、半导体技术和电子技术与各个行业的具体应用相结合,是一个技术密集、资金密集、高度分散、不断创新的知识集成系统。
-
软硬一体软件为主。软件是嵌入式系统的主体,有IP核。嵌入式系统的硬件和软件都可以高效地设计,量体裁衣,去除冗余,可以在同样的硅片面积上实现更高的性能。
-
比通用计算机资源少。由于嵌入式系统通常只完成少数几个任务。设计时考虑到其经济性,不能使用通用 CPU, 这就意味着管理的资源少,成本低,结构更简单。
-
程序代码固化在非易失存储器中。为了提高执行速度和系统可靠性,嵌入式系统中的软件一般都固化在存储器芯片或单片机本身中,而不是存在磁盘中。
-
需专门开发工具和环境。嵌入式系统本身不具备开发能力,即使设计完成以后,用户通常也不能对其中的程序功能进行修改,必须有一套开发工具和环境才能进行开发。
-
体积小、价格低、工艺先进、性能价格比高、系统配置要求低、实时性强。
-
对安全性和可靠性的要求高。
嵌入式系统的分类
根据不同用途可将嵌入式系统划分为嵌入式实时系统和嵌入式非实时系统两种,而实时系统又可分为强实时 (Hard Real-Time)系统和弱实时 (WeakReal-Time)系统。如果从安全性要求看,嵌入式系统还可分为安全攸关 (Safety-Critical 或 LifeCritical)系统和非安全攸关系统。
( 1 ) 实时系统(Real-Time System,RTS)。实时系统是指能够在指定或者确定的时间内完成 系统功能和外部或内部、同步或异步时间做出响应的系统。也就是说,系统计算的正确性不仅取决于程序的逻辑正确性,也取决于结果产生的时间,如果系统的时间约束条件得不到满足,将会发生系统错误。
( 2 ) 安全攸关系统(Safety-Critical System)。安全攸关系统也称为安全关键系统或者安全生命关键系统 (Life-Critical System), 是指其不正确的功能或者失效会导致人员伤亡、财产损失等严重后果的计算机系统。
嵌入式软件的组成及特点
嵌入式系统的最大特点就是系统的运行和开发是在不同环境中进行的,通常将运行环境称为“目标机”环境,称开发环境为“宿主机”环境,人们把嵌入式系统分为硬件层、抽象层、操作系统层、中间件层和应用层等5层
-
硬件层:硬件层主要是为嵌入式系统提供运行支撑的硬件环境,其核心是微处理器、存储器 (ROM、SDRAM、Flash 等)、I/O 接口 (A/D、D/A、I/O 等)和通用设备以及总线、电源、时钟等。
-
抽象层。在硬件层和软件层之间为抽象层,主要实现对硬件层的硬件进行抽象(Hardware Abstract Layer,HAL),为上层应用(操作系统)提供虚拟的硬件资源;板级支持包(Board Support Package,BSP)是一种硬件驱动软件,它是面向硬件层的硬件芯片或电路进行驱动,为上层操作系统提供对硬件进行管理的支持。
-
操作系统层:和计算机软件操作系统一样,主要负责各种硬件资源管理和调度。
-
中间件(Middleware)层:依旧和计算机软件一样。件可分为服务中间件、集成中间件、数据中间件、消息中间件和安全中间件等5类。在嵌入式系统中,比较常用的中间件产品有嵌入式数据库、 OpenGL 图形图像处理软件、 JAVA 中间件、虚拟机 (VM)、DDS/CORBA 和 Hadoop 等。
-
应用层:应用层是指嵌入式系统的具体应用,主要包括不同的应用软件。
嵌入式软件的主要特点有:可裁剪性(各个模块独立,能够增减功能)、可配置型(根据配置修改功能)、强实时性、安全性、可靠性、高确定性(所有行为符合预期)。
安全攸关软件的安全性设计
美国电气和电子工程协会 (IEEE)将安全攸关软件定义为:“用于一个系统中,可能导致不可接受的风险的软件”。例如航空航天、轨道交通、核工业等等。NASA 8719.13A 给出了软件安全 (Safety)的定义,即“在软件生命周期内,应用安全性工程技术,确保软件采取积极的措施提高系统安全性,确保降低系统安全性的错误,使其减少或控制在一个风险可接受的水平内”
1982年由RTCA 和 EUROCAE 正式发布了 DO-178 版,这是民用航空机载软件开发中安全保证的一个里程碑。1992年发布的Do-178第三版 ( B版)称为Do-178B。 现在, DO-178B 早就成了国际公认的民用航空机载软件的开发标准。一架民用飞机(相对军用飞机而言)不经过“民航标准体系”的适航认证,是不可以飞行的。而这个“民航标准体系”中,针对机载软件适航认证的,就是 DO-178B 标准。经过再次完善和补充,2011年形成了DO-178C 标准,它将工具鉴定、基于模型的开发验证技术、面向对象的技术和形式化验证技术纳入适航验证中。
DO-178B 给予了以下3方面的指导:
- 软件生命周期过程的目标
- 为满足上述目标要进行的活动
- 为证明上述目标已经达到的证据,也叫软件生命周期数据
在DO-178B 中,目标、过程、数据是软件适航的基本要求。
- 目标:DO-178B 标准规定了软件整个生命周期需要达到的66个目标。在DO-178B 中,根据软件在系统中的重要程度将软件的安全等级分为 A~E 五级,不同安全等级的软件,需要达到目标要求不同。
-
过程:DO-178B 标准把软件生命周期分为“软件计划过程”“软件开发过程”和“软件综合过程”,其中软件开发过程和软件综合过程又分别被细分成4个子过程。
(1)软件计划过程
(2)软件开发过程:软件开发过程又包括了软件需求过程、软件设计过程、软件编码过程、集成过程(将代码嵌入目标机)
(3)软件综合过程:对成品进行测试,包含了软件验证过程、软件配置管理过程、软件质量保证过程、审定联络过程4个子过程。
(4)审定联络过程:它包含了软件研制单位与合格审查机构之间建立交流和沟通的所有活动。
-
数据:DO-178B 把软件生命周期中产生的文档、代码、报表、记录等所有产品统称为软件生命周期数据。
CMM 能力成熟度模型是1994年由美国国防部与卡内基-梅隆大学的软件工程研究中心以及美国国防工业协会共同开发和研制的,其目的是帮助软件企业对软件工程过程进行管理和改进,增强开发与改进能力,从而能按时、不超预算地开发出高质量的软件,同时也用于采办方评估和选择软件供应商。2002年推出了能力成熟度模型集成 (CMMI),把开发模型CMMIDev、 服务模型CMMI-SVC、 采购模型CMMI-ACQ、 人力模型P-CMM 等多个领域能力成熟度模型集成到一个框架中去。DO-178 与 CMMI 是目前承担安全攸关软件开发企业最为关注的两个标准,二者的主要区别如下。
(1)CMMI 是从过程改进的视角,对软件开发的技术与管理提出要求,覆盖了从个人、项目及组织三个层次的要求,更关注组织整体软件能力提升。 DO-178 是从适航审定视角,对软件开发的技术与管理过程提出要求,更关注项目软件质量对于安全性的影响。所以DO-178 覆盖的过程范围比 CMMI 少,比如DO-178C 对于项目监控过程、风险管理过程、培训过程等并没有提出明确要求。
(2)CMMI 主要由实践组成,实践是各行业最佳实践的抽象(去环境、方法)提炼,而DO-178C 过程主要由目标、活动与数据组成,活动虽不代表具体工作步骤,但活动要求比较具体,并且对过程输出(数据)提出了明确要求,结合DO-178 的配置管理过程,对数据管理与控制的要求也较为具体。
(3)CMMI 是集成了系统、软件和硬件等视角,所以在内容和措辞上必须兼顾多个场景,容易产生歧义。而DO-178 聚焦软件,更容易为件工程师所理解(不代表容易做到)。总之, DO-178 比CMMI 的目标更清晰,要求更具体,而且是针对安全攸关软件的。这两个标准都侧重于要求,而不是具体方法和步骤。对一个企业而言,不仅要关注一个项目的成功,还要在多个项目中持续获得成功,而且是商业成功(包括质量、进度、成本等),这就需要建立更为系统的软件过程体系,在这一点上CMMI 更有指导性。过程改进思想的本质是过程不断丰富和优化的过程,在这个过程中需要融合不同标准与方法的要求以及实践中的经验与教训的总结。
计算机网络
发展历程
纵观计算机网络发展,其大致经历了诞生、形成、互联互通和高速发展等4个阶段。
-
诞生阶段:20世纪60年代中期,第一代计算机网络是通过单个计算机和多个终端组成的飞机订票系用,也就是多个显示器用一个主机。
-
形成阶段:第二代计算机网络通过通信线路连接多个主机,线路通过接口报文处理机(IMP)转接,构成了通信子网。
-
互通互联阶段:到了20世纪70年代至90年代。第三代计算机网络具有统一的网络体系结构并遵守国际标准的开放式和标准化网络。ARPANET(高级研究计划局网络,在20世纪60年代末开发的第一个分组交换网络,被广泛认为是现代互联网的前身。)兴起后,计算机网络发展迅猛。由于没有统一的标准,不同厂商的产品之间互联很困难,因此产生了两种国际通用,的最重要的体系结构TCP/IP 体系结构和国际标准化组织的OSI体系结构。
-
高速发展阶段:20世纪90年代至今的第四代计算机网络,由于局域网技术发展成熟,出现光纤及高速网络技术,整个网络就像一个对用户透明的庞大的计算机系统,发展为以因特网 (Internet)为代表的互联网。
计算机网络包含数据通信,资源共享,管理及中华,分布式处理,负载均衡的功能。
计算机网络相关指标
-
性能指标: 多个不同方面来度量计算机网络的性能。
(1)速率:速率是指每秒传输多少比特速率,单位是b/s。
(2)带宽:带宽有两种含义,一种是一个信号具有的频带宽度,表示一个信号所包含的各种不同频率成分所占据的频率范围。一种是计网络通信线路传输数据的能力。
(3)吞吐量:吞吐量表示单位时间内通过某个网络的数据量。
(4)时延:时延是指数据从网络的一段传送到另一端所需的时间。
(5)往返时间(RTT):它表示从发送方发送数据开始,到发送方收到来自接收方的确认总共经历的时间。
(6)利用率:利用率有信道利用率和网络利用率两种。信道利用率指信道被利用的概率(即有数据通过),通常以百分数表示。完全空闲的信道利用率是零。网络利用率是全网络的信道利用率的加权平均值
-
非性能指标:费用、质量、标准化、可靠性、可扩展性、可升级性、易管理性和可维护性等非性能指标与前面介绍的性能指标有很大相关性。
通信技术
计算机网络是利用通信技术将数据从一个结点传送到另一结点的过程。通信技术是计算机网络的基础。这里所说的数据,指的是模拟信号和数字信号,它们通过信道来传输。
信道可分为物理信道和逻辑信道。物理信道由传输介质和设备组成,根据传输介质的不同,分为无线信道和有线信道。逻辑信道是指在数据发送端和接收端之间存在的一条虚拟线路,可以是有连接的或无连接的。逻辑信道以物理信道为载体
- 信道
信息传输就是信源(消息的发出者)和信宿(消息的接受者)通过信道收发消息的过程。信源发出信息,发信机负责将信息转换(对信息进行编码和调制)为适合在信道上传输的信号,受心机将信号转化(进行解调和译码)为信息,发送给信宿。
信道容量就是信道的最大传输速率,可通过香农公式计算得到。
C 代表信道容量,单位是 b/s;B 代表信号带宽,单位是H z;S代表信号平均功率,单位是W;N 代表噪声平均功率,单位是 W;S/N 代表信噪比,单位是d B (分贝);
提升信道容量可以使用比较大的带宽,降低信噪比也可以使用比较小的带宽,升高信噪比。
- 信号转换
发信机进行的信号处理包括信源编码、信道编码、交织、脉冲成形和调制。相反地,收信机进行的信号处理包括解调、采样判决、去交织、信道译码和信源译码:
(1)信源编码:通过压缩编码将模拟信号转换为数字信号。
(2)信道编码:通过增加冗余信息,解决信号、噪声干扰导致的误码问题
(3)交织:按照顺序将数据打乱,接收端在根据顺序复原,这样连续的误码就会变成零星的误码,信道译码就可以解决了。
(4)脉冲成形:为了减小带宽需求,需要将发送数据转换成合适的波形,这就是脉冲成形。
(5)调制:调制是将信息承载到满足信号要求的高频载波信号的过程。
- 复用技术和多址技术
在一条信道上只传输一路数据的情况下,只需要经过信源编码、信道编码、交织、脉冲成形、调制之后就可以发送到信道上进行传输了;但如果同时传递多路数据就需要复用技术和多址技术。
(1)复用技术:复用技术是指在一条信道上同时传输多路数据的技术,如TDM时分复用、FDM频分复用和CDM码分复用等。ADSL使用了 DM的技术,语音的上行和下行占用了不同的带宽。
(2)多址技术:多址技术是指在一条线上同时传输多个用户数据的技术,在接收端把多个用户的数据分离(TDMA 时分多址、 FDMA 频分多址和CDMA 码分多址)。
多路复用技术是多址技术的基础,多址技术还涉及信道资源分配算法, Walsh 码分配算法等。
- 5G通信技术
作为新一代的移动通信技术,5G 的网络结构、网络能力和应用场景等都与过去有很大不同,其特征体现在以下方面。
(1)基于OFDM优化的波形和多址接入;
(2)实现可扩展的OFDM间隔参数配置;
(3)OFDM 加窗提高多路传输效率;
(4)灵活框架设计;
(5)大规模MIMO;
(6)毫米波;
(7)频谱铜像;
(8)先进的信道编码设计;
网络技术
网络通常按照网络的覆盖区域和通信介质等特征来分类,可分为局域网 (LAN)、 无线局域网 (WLAN)、 城域网 (MAN)、 广域网 (WAN) 和移动通信网等。
- 局域网(LAN)