3.3.2使用结构

 
使用结构是A-7E系统所强调的构架层次上的第二个结构。分解结构没有说明软件运 行时的任何信息。我们可以理智地猜想在系统运行时不同模块中的两个过程足如何进行交 互的。但这样的信息在模块分解中实际上是找不到的。而使用结构则对软件交互的方式给 出了权威的描述。
 
使用关系。使用结构的思想是建立在使用关系的基础上的。如果过程A的运行必须以 过程B的ih:确运行为前提,我们就说过程八使用过程B。这种关系实际L句调用关系很相 似,但并不完全相同。通常,过程A因为要使用过程B而调用它,但在下列W种情况下. 使用关系和调用关系并不相同:
 
(1)过程A仅足在其规格描述中要求调用过程B,但实际I••过程A的运筇汴不依赖 于过程B的运行。过程A的运行要求必须有过程B的存在,但与过程B运彳/•结果的1丨:确 与否并无关系•这时我们说A调用B,但并不使用B。例如,B吋能是错误处理程序„
 
(2)过程B可在未被过程A调用的情况下运行,但过程A要使用过程B的运行结果。 这里所说的结果可能是过程B更新后的数据存储:或者过程B可能足被过程A假设存在 并il:确运行的中断处理程序。这时我们说过程A使用B,但并不调用B。
 
这种使用关系可使我们快速确定功能子集。如果我们知道过程A应该在某一子集中. 那我们就知道过程A使用的各个过程也必须在该子集中。子集是由这种使用关系的传递闭 包构成的。所以,应该研究这种结构,并对它做出必要的规定,以使每个f•集都不滿耍由 整个系统构成.做这样的工作是很有意义的。这就意味着要为程序员规定“被允许使用” 结构。当系统实现完成后,可以将实际的使用关系编成n录。
 
使用(或称被允许使用)结构的单位是访问过程。通过规定允许什么过程使用K•他哪 些过程(言外之意就是不允许什么过程被其他哪鸣过程使用)定义了使用结构.,
 
尽管使用结构的单位是过程,但实际上某一模块的所有过程都吋能受到某些相同使用 关系的制约。所以,在讲到使用结构时也可能使用“模块”这个洞,这时应将“模块”理 解为该模块中的所有访问过程〃
 
从概念上看,使用(或称被允许使用)结构可以用二进制矩阵来表示,即在行和列的 方向上分别列出系统中的所有过程。因此,如果元素(m, n)的值为真,则表示过程m使用 (即被允许使用)过程。在实践中这种方法过于烦琐.所以引入了按照模块来描述使用 规则的办法•
 
表3.3列出了 A-7E系统的使用结构。
A-7E使用结构„前面提到过,使用结构首先是在说明被允许使用关系的规范中表述的: 实际的使用结构是在实现后提取的。A-7E构架的被允i1•使用规范是•个长达7页的表格, 表3.4仅是从中节选出来的一小部分。由两个字符组成的前缀表示的是二级模块。实点右 边的名字是子模块名(本章儿乎没冇讲到这些子模块的内容)。
注意所出现的如下--些模式
•    扩展的计箅机模块中的所有过程都不得使用其他任何模块中的过程,而其他模块 都可以使用扩展的计算机模块(或其中的一部分)。
 
•    应用数据类型模块中的过程仅能够使用扩展的计算机模块中的过程。
 
•    设备接口模块中(至少在我们所给出的这一部分中〉的过程仅允许使用扩展的计算机z模块、应用数据类型模块和物理模型模块中的过程。
 
•    功能驱动和共享服务槐块的过程可以使用数据银行家模块、扩展的计算机模块、
应用数据类型模块和设备接口模块的过程。
 
•任何过程都不得使用功能驱动模块中的任何过程。
 
•只有功能驱动模块的过程可以使用共享服务模块的过程。
 
这些关系就构成了系统的分层结构图。在该层次图中,处于最底层的是扩展的计算机 模块.其上是应用数据类型模块。这两层构成-个虚拟机。在某个层上的过程可以使用同层的或更低层的过程。
 
在该层次结构的顶端足功能驱动模块和共享服务模块,这两个层可以使用较多的系统 机制来实现所耍完成的工作.物玴模型模块、过滤器行为模块和数据银行家模块则处于中间层上。
软件实用程序则与该层次结构并列,可以使用任何层(功能驱动模块除外)来实 现所要完成的操作。
 
分层构架是一个众所周知的构架模式,本书的许多案例分析中都使用了该模式。这种 层次划分是使用结构的归纳.但并不能取代使用结构,因为在这样的层次图中并不能表示出可能有哪些子集,而这正是我们采用使用结构所要解决的问题--某个特定的功能驱动 模块将使用由共享服务模块、数据银行家模块、物理模型模块、设备接口模块、应用数据 类型模块,扩展的计算机服务模块所组成的某个特定集合。而所使用的共孪服务模块又会 使用它们自己的下层过程,如此类推。以这种方式推导出来的所有过稈的完整集合构成一个子集。
 
这种被允许使用的结构也向我们展示了在运行时各模块的过程是如何相互交互来完 成任务的,功能驱动模块中的每个过程都控制着一个输出设备的输出值,例如所显示符号 的位咒等-般地.功能驱动过程(通过数据银行家过程)从数据过程中获取数据,按照 指定规则H算出正确的输出结果值,并通过调用适当的设备接口过程将此值发送给相应的 设备数据的来源可能有如下几种:
 
•关于软件所交互环境的状态的设备接口过程。
 
•计算外部世界的预测性数据(例如考虑到飞机当前的位贾和速度.如果立即投弹, 炸弹将命中地面目标的位置)的物理模型过程。
 
•关于当前模式、当前传感器数据可信度或飞行员所请求的而板操作的共享服务 过程。
 
—旦设计出被允许使用结构.实现人员就可以明确地知道要完成自己的工作必须熟悉哪些接口。
实现工作完成后,就可以将实际的使用结构写入文档.,子集也就确定了。部署 系统子集的能力是演变交付期中很重要的一部分(参见第7章:设计构架)。如果项目资 逢被削减(或超支)或者超出了项目进度的时限.那么,提供-个子集不失为种有效的急救办法..如果构架层次上的结构——使用结构——设计得好,很可能可以给出多个子集(而不是一个也没有)。
 
3.3.3进程结构
对A-7E系统非常重要的构架层次上的第3个结构是进程结构。虽然当时这种机上 配备的是单处理器的计算机,徂扩展的计箅机模块仍采用了支持多处理能力的虚拟编程接 P.这是为了使该软件系统在将来能够适应A-7E飞机上装备多处理器计算机的悄况。所 以,该软件系统是以一组协同顺序进程来实现的。这些协同顺序进程要保持同步关系,以 协调对共享资源的使用。这组协同顺序进程是用脱机(运行前)调度来安排的,以生成一 个可执行的线程,然后将其载入计筧机。
 
一个进程就是若干编程步骤的集合。每当有触发亊件发生或达到时间限制就要重复执行这呰编程步骤。一个进程有自己的控制线程。一个进程可以因等待某个事件的发生而(通 常通过调用模块接口中的某个事件信号程序)将自己挂起。
 
在A-7E系统中编写进程有两个目的。第-个目的是让功能驱动模块计算该航空电子 软件的输出结果。系统耍求这些进程能够定期运行(例如,+断更新正面显示器1:某个符 号的位置〉或者能在某砝触发唞件(例如飞行员按下投弹按钮)发生时运行。显然.这些 功能适T以逬程来实现。从概念上肴.功能驱动进程的结构如下:
 
•    Periodic process:每隔40遥秒执行-次
 
—调用典他模块的访问过程.收集所奋相关输入的数据
 
-计算应输出的结果值
 
—凋用某个相应的设备接口过程,将输出结果发送出去
 
•    End periodic process
 
•    Demand process
 
-等待触发事件
 
~计算应输出的结果值
 
-调用某个相应的设备接U过程,触发某个事件
 
•    End demand process
 
在A-7E系统中编写进程的第二个目的是:用进程(虽然这种情况+多)作为一种隐 蔽机制来实现某呰访问过程。如果某个访问过程为返回结果必须进行大量的运算,程序员 就可能采用在后台不断进行计算,而只在该访问过程被调用时,将最新结果返回的做法来 满足时间耍求。例如:
 
•    Process:每隔丨00奄秒执行-次
 
-收集计算所需的输入数据 —求值
 
-将计算结果保存在most_recent变量中
 
•    End process
 
•    Procedure get_value(p I)
 
—pi := mostrecent.
 
—return
 
•    End procedure
 
所以.进程结构由软件中的-组进程构成。该结构中所包含的关系是“与之同步”,
 
即一种基于一个进程处理数据,一个或多个进程等待处理结果的事件的关系。这种关系是 调度工作的主耍输入,调度工作中包括死锁避免机制。
 
在A-7E软件系统中所采用的脱机调度技术已超出了本书的讨论范围,怛这些技术免 除/运行时调度的开销。如果不利用进程结构的信息,这是不可能实现的。进程结构也为 我们提供了 -种优化技巧,因为它可以将两个原本无关的进程合并起来。在很多情况下, 这-做法可以给调度工作带来便利,能够避免因一个进程挂起、另-个进程继续运行所带 来的环境切换开销。这种技巧对程序员来说是不可见的,它在系统构建时自动完成。表3.5 列出了 A-7E系统中的进程结构„
 
在其他结构设计好之后就出现了进程结构的问题。功能驱动模块的过程是以进程的方 式实现的。为能及时提供数据要在后台进行一些耗时长的计算,这需耍用到其他些进程。
 
进程结构收集两类信息。第一类信息说明在每个进程中用到哪些过程。这可使读者对 系统中的线程有所了解,也使实现人员消楚在编写代码时,哪些过程要通过使用受保护的 数报存储和互斥访问措施保证是可再进入的(即能够同时受两个或更多个线程的控制)。 这类信息也能够使设计者较早地认识到哪些过程是调用域频繁的.从而清楚在哪些方面进 行优化效果更好。
 
进程结构中的第二类信息说明哪些进程(或线程的顒序段)不能同时执行。实际的互斥临界区只有在进程代码编写完成后才能最终确定,但尽早指明进程的互斥关系有利于调 度小组理解对脱机调度的量化要求,并对最适用于自动化实现的领域进行规划。
 
3.4 小结
 
 
 
 
3.6讨论题
 
(1)假设需要开发A-7E软件的新版本以将其安装在用作教练机的A-7E飞机上。该教 练机上不携带任何武器,但要求能够让飞行员学会如何使用机载航空电子系统进行飞机导 航。则所给构架中的哪些结构滞要修改?如何修改?
 
(2〉第7章将对构架可以作为增量式开发的基础进行讨论,即先从小规模的系统开始, 之后不断扩大此系统,但在每个幵发阶段都有一个工作子集。假设对A-7E这个软件我们 所能构造出的最小子集中仍包含某些(符合需求且实现lK确)能够被飞行员观察到的功能 (例如在座舱的某个显示设备上显示当前气流的相关数值),则需要哪些模块?不雒要哪 些模块?再对该子集进行3次增最式扩充,阐明针对这些扩充所应制定的开发计划(例如 需要用哪些模块等)。
 
(3)假设为保证在数据银行家模块中存储的和由功能驱动模块所计算的数据的lK确性 而增加若干监控程序。如果监控程序发现所存储或所计饵的值4所计算出的正确结果不相 符,它就会发出出错信息。谘说明A-7E系统的构架层次上的各结构需要做哪鸣更改才能 适应这种新的设计要求。如果添加了新的模块.请讲明将新增模块放到模块层次结构的合 适位置h的信息隐藏标准。
 
 
 
posted @ 2019-12-04 21:57  mongotea  阅读(104)  评论(0编辑  收藏  举报