
第1章 引言
1.1 系统设计的概念
设计是一项普遍存在的用于联结精神世界和物理世界的创造性智力活动。设计的主要目的是通过创造性的知识发现和系统构造来适应和改变我们生活的环境,以满足我们的物质和精神需求。设计是任何一项工程活动的重要组成部分,并且通常会涉及多个学科的专业技能和知识经验,如电子、机械、热力、土木、建筑、计算及系统工程等。事实上,我们生活的物理世界就是所有这些设计活动的结果的累积。
设计是一个依据特定需求构造相应的人造系统(以下简称系统)的过程。这些特定需求既包括描述系统所提供的功能或服务的功能需求,也包括在系统开发以及全生命周期过程中关于资源利用的非功能需求。设计过程需要协调两个相互矛盾的目标:第一个是提高设计效率以及降低开发成本的目标;第二个是确保系统设计正确性的目标,尤其是当系统涉及公共安全和信息安全时,为了确保所构造的系统被用户广泛接受,这个目标是不可或缺的。
设计的概念和过程具有普适性,如图1.1所示。无论是烹饪的设计过程,还是计算系统的设计过程,大都可以分解为两个阶段。第一个是程序化(proceduralization)阶段,该阶段描述了系统功能需求及其实现过程。对于烹饪而言,该过程主要完成菜谱的制定;对于计算系统而言,则是完成应用软件的开发,实现从描述性的系统功能需求到可执行的软件代码的转换。这个阶段需要确保应用软件的正确性,即满足系统的功能需求。第二个是实物化(materialization)阶段。对于烹饪而言,该过程完成从菜谱到菜品的转变。对于计算系统来说,这个阶段完成从应用软件到软硬件融合系统的转变,除需要确保系统的功能正确性之外,还需要考虑如何有效利用可用资源以满足系统非功能需求,如计算时间和内存开销等。

图1.1 设计的概念和过程
设计是一个问题求解以及需求满足的过程。通常情况下,问题或需求是通过自然语言来描述的。对于一些特定应用领域,需求也可以通过数理逻辑进行形式化表述,形成逻辑规约。当需求被表述为逻辑规约时,设计活动的程序化阶段就可以理解为一个合成(synthesis)过程,即从描述性的逻辑规约到可执行程序的自动化转换。合成过程的正确性要求可执行程序的行为是严格满足逻辑规约的。当前,从一般化的逻辑规约进行程序合成仍然存在诸多技术难点,如逻辑规约的不可判定性以及合成过程内在的高度计算复杂性等。此外,在工程实践过程中,一个新的产品或者系统很少从零开始设计,往往基于一定的准则复用已有的且已证明有效的解决方案。例如,在基于组件的设计方法中,组件复用已经成为复杂软件开发的基本实践。然而,如何正确且高效地集成新设计的组件和已有的组件,也是一项极具挑战的难题。正是由于这些原因,在很多工程领域,设计在很大程度上仍然是一项依赖团队经验和专业技能的创造性智力活动。尽管部分设计过程可以借助工具实现自动化,如计算机辅助设计(Computer Aided Design,CAD)工具,但是设计过程中仍然存在一些关键环节,如体系架构设计等,这些环节只有通过人的创造性思维和深入分析才能完成。
对设计过程进行严格的形式化定义涉及许多深层的理论问题。然而,到目前为止,它并没有引起学术界的广泛关注,相反,却被认为是一种“冷门”的研究问题。原因可能在于以下两个方面:一个是,学术界普遍追求的是简单优雅且通用的理论方法,而设计是一项领域相关的工程活动,往往不存在放之四海而皆准的通用理论方法;另一个是,设计在本质上是跨学科的,设计的形式化需要实现不同抽象级别的异构模型的一致集成,如通信、计算、控制以及物理系统模型等,然而,我们目前还缺乏统一的系统集成框架和工具。
在本书中,我们使用术语“系统”表示软硬件融合的计算机系统。需要指出的是,系统与软件之间有着重要的区别。
软件通常用高级程序语言编写,只是单纯地实现了系统所需的功能,并且独立于硬件运行平台和物理资源,同一个软件在不同硬件平台上的行为(输入/输出)是相同的。尽管在编程语言中,时间和资源可能作为外部参数出现,并且可以链接到运行环境中的相应物理量;但是,在语义层面,超时等涉及物理资源的事件仍然是一个外部事件,并且与任何其他外部事件(如自动驾驶车辆与障碍物发生碰撞的事件)没有区别。
系统通常是反应式的(reactive),并且与外部环境存在大量的交互。反应式系统的设计极具挑战,主要体现在两方面:一方面,反应式系统与外界环境的交互具有不可预测性和不确定性;另一方面,反应式系统不仅包含了复杂的数据和算法,还存在多种突发的偶然性行为或者级联故障。反应式系统的输入通常是外部激励,这些激励能够触发系统自身的状态变化以及改变环境状态的输出。系统的行为可以建模为输入和输出实时序列之间的数学关系。
一般来说,系统具有非终止性和不确定性,其正确性不仅依赖于应用软件的正确性,还取决于运行平台的动态特性,如执行时间和存储空间等。尽管计算理论为软件研究(特别是顺序程序的研究)提供了一套严格的理论基础,但是经典的计算理论模型主要关注可计算性和计算复杂性问题,并不考虑物理资源以及系统与物理环境之间的相互作用。在这种模型下,算法软件执行所需的物理资源量(如内存和时间等)与系统运行过程所需的实际物理资源量的关系非常松散,因此经典的计算理论模型并不适用于反应式系统设计。