D0I:10.13374/j.issn1001-053x.1994.01.017 第16卷第1期 北京科技大学学报 Vol.16 No.1 19942 Journal of University of Science and Technology Beijing Fb.1994 开发多任务系统的一种方法 —一一广义状态图方法 王沁 北京科技大学计算机科学系,北京100083 摘要广义状态图方法包括广义状态图的设计方法和面向状态的过程设计方法两部分.广义状态 图在传统状态图的基础上扩充了动作结点的概念,利用动作结点表示系统在状态转移过程中的 动作,以及多任务之间的各种关系.面向状态的过程设计方法以广义状态图的各元素与过程设计 之间的相关关系为依据,直接由广义状态图生成多任务系统的过程设计, 关键词软件,状态图,设计/计算机,广义状态图,多任分系统,并发程序 中图分类号1P311.52 A Method For Developing Multitask System -Generalized State Graph Method Wang Oin Department of Computer Science,USTB,Beijing 100083.PRC ABSTRACT In this papergeneralized state graph method is introduced.Generalized state graph method includes two parts,one is the generalized state graph design method,another is the state-oriented process design method.Based on traditional state graph,the concept of action node is introduced.Action node is used to represent the system action in a state transform,and the relationship among multitasks.State-oriented process design method,depending on the relationship between the elements of generalized state graph and proceess design,produces the process design of a multitask system from a generalized state graph directly. KEY WORDS software,state diagram,design /computer,generalized state graph,multitask system,concurrent program 状态图方法2]很早以来就被用于软件系统的开发.状态图方法的核心是状态图,它刻 画了系统在运行过程中可能经历的状态、状态之间可能的转换以及转换条件.依据状态图很 容易得到软件的过程设计·通常一个状态对应于一个子程序·主程序中包含了一个表示状态 的全程变量,及依据该全程变量的分枝结构,用来表示状态的全程变量由各子程序根据所满 足的状态转移条件在子程序出口处设定. 1992-12-16收稿第一作者女32岁讲师项士
第 卷 第 期 年 月 北 京 科 技 大 学 学 报 川 “ 上加 。 万功 开发多 任务系 统 的一种方法 — 广 义状态 图方法 王 北京科技大 学计算机科 学 系 , 北京 侧 犯 摘要 广义状态 图方法 包括广义状态图的设计方法 和 面 向状态的过程设计方法两部分 广义状态 图在传 统状态 图 的基础 上 扩充 了动 作 结 点 的 概 念 , 利 用 动 作 结 点 表示 系 统 在 状 态 转 移 过 程 中 的 动作 , 以 及 多任务之 间的各种 关 系 面 向状态 的过程 设计方法 以广 义状态 图 的各元素与过程设计 之 间 的相 关 关 系 为依据 , 直接 由广义状 态 图 生成多任务系 统 的过程设计 关健词 软件 , 状态 图 , 设计 计算机 , 广 义状态 图 , 多任 务系 统 , 并 发程序 中图分类号 地 记 云对 “ 氏 祀 , , 价巧 〕 洲 , , 名 妇 加 “ 过 记 皿对 巴 , 切习 坦 , 一 抚 , “ 月 洲妇 心 ‘ , 一 。 行 目 揣 , 吨 化 叭 ℃ 】日江呢 万沮 改乏 妙 , 污 访范 用旧 万 认吸 , , 匹月 , , 引氏们 状态 图方法 ’ , 很早 以 来就被 用 于 软件 系 统 的 开 发 状 态 图方 法 的 核 心 是 状 态 图 , 它 刻 画 了系 统在运 行过程 中可 能 经历 的状态 、 状态 之 间可 能 的转换 以 及 转换条件 依 据状态 图很 容 易得 到 软件 的过程 设计 通 常一 个状态 对应于 一个子程 序 主程序 中包含 了 一个表示 状态 的全程 变 量 , 及 依据该全程 变量 的分枝结构 , 用来表示 状 态 的全程 变量 由各子程序 根 据所满 足 的状态转移 条件在 子 程 序 出 口 处设定 卯 一 一 收稿 第一作 者 女 岁 讲师 硕 士 DOI :10.13374/j .issn1001—053x.1994.01.017
Vol.16 No.1 王沁等:开发多任务系统的一种方法 .79. 多任务系统的开发尚未有工程化的方法3)本文在状态图的基础上提出了广义状态图方 法,用于开发复杂的多任务系统.广义状态图方法不仅具有原状态图方法所有的特性及开发 能力,而且还能够表示多任务之间的关系,使多任务系统的静态结构和动态结构都清晰可 见,同时也为多任务系统的调试与维护提供很大方便. 1广义状态图方法 广义状态图方法由广义状态图的设计方法和广义状态图向软件的过程设计转换的方法两 部分组成 1.1广义状态图 传统的状态图着意刻画系统在运行过程中可能经历的各种状态,状态之间可能的转换以及 转换的条件.状态表示系统正在等待某一事件发生,如:等待用户输入菜单选择,等待应答的 到来等等.所以,状态又常被称为Wit.转换条件表示某一等待结束的条件.状态图为一有向 图,结点表示系统在运行过程中的各种状态,箭头表示状态转移的方向,箭头线上的说明表示 状态结束的条件.需要注意的是由于出自同一状态结点的箭头之间的关系为“或”,所以,在设 计时对于每一个状态结点,应使得所有的转移条件之“或”为恒真.另外,从每一个状态结点出 发必须至少包含一个不构成环路的转移路径,否则,系统在运行过程中就可能出现死循环, 广义状态图包含上面所述的状态结点,以及表示转移方向和转移条件的部分·除此之外, 为了显式地表示在状态转移过程中系统所完成的动作,如:改变某些变量的值,向某个外设发 信息,激活某一任务,中止某一任务,等等,叭了动作结点.为了区分状态结点和动作结点, 在广义状态图中用○表示状态结点,用□表示动作结点.出自动作结点的边上没有关于条 件的说明,动作结点的出度为1.如图1所示.该图 表示在状态1时,若条件1被满足,则直接转人状 态2;若条件2被满足,则首先完成动作1,然后转 条件1侬态) 至状态3.若条件1、2都不被满足,则仍转向状态1. 状态 在设计多任务系统时,每一任务单独对应于一 条件2动作☐→俄态 个广义状态图,以此来保证各任务的完整性.同 图1广义状态图 时,利用广义状态图中的动作结点表示任务之间的 Fig.I Generalized state graph 关系,反映系统运行过程中各任务之间错综复杂的相关特性, 12面向状态的过程设计方法 广义状态图是根据系统需求分析,对系统的动态特性的描述.因而,与过程设计有着比较 直接的对应关系,可以方便地、规范化地转换为过程设计结果。 一个完整的广义状态图包含着一个初始状态和一个结束状态,初始状态的人度为0,结束 状态的出度为0.一个完整的广义状态图对应的过程设计应包括一个主程序的过程设计、若干 状态子程序的过程设计、和一个公用子程序集合的过程设计. 主程序主要完成对各个状态子程序的调用.主程序中包含一个表示状态的全程变量,其值
王 沁等 开发多任务系 统的一种方法 多 任务系 统 的开发 尚未 有 工程 化 的方法 「 · 本文在状态图的基础上 提 出 了 广义 状 态 图方 法 , 用于 开发复 杂 的多 任务系 统 广义状态 图方 法 不 仅 具 有 原 状 态 图方 法 所 有 的 特 性 及 开 发 能力 , 而 且 还 能 够 表 示 多 任 务 之 间 的 关 系 , 使多 任务 系 统 的静 态结 构 和 动 态 结 构 都 清 晰 可 见 , 同时也 为多 任务 系 统 的调 试 与维护提供很大方便 广义 状态图方法 广 义状态 图方法 由广 义 状态 图的设计方法 和 广 义状态 图 向软件 的过程设计转换 的方法 两 部分组成 广义 状态 图 传 统 的状态 图着意 刻 画系统在运行过程 中可能经历的各种状态 , 状态之 间可 能 的转换 以 及 转换 的条件 状态表示 系 统正 在等待某 一事件 发 生 , 如 等 待用 户输人菜 单 选 择 , 等 待 应答 的 到 来 等 等 所 以 , 状态又 常被称 为 转换条件表示某 一等 待结束 的条件 状态 图 为一有 向 图 , 结 点表示 系 统在 运行 过程 中的各种 状态 , 箭头表示状态转移的方 向 , 箭 头 线上 的说 明表示 状态结束 的条件 需要 注意 的是 由于 出 自同一状态结点 的箭头之 间的关 系 为 “ 或 ” 所 以 , 在 设 计时对于每 一个状态结 点 , 应使得所有的转移条件之 “ 或 ” 为恒真 另外 , 从每 一 个状态结点 出 发必须 至少包含一个不 构成环路 的转移路 径 , 否则 , 系 统在 运行过程 中就可 能 出现死循环 广义状态 图包含上 面所述 的状态结点 , 以及表示 转移方 向和转 移 条 件的部分 除 此 之外 , 为 了显式地表示 在状态转移过程 中系 统所完成 的动作 , 如 改 变某 些 变量 的值 , 向某 个外 设 发 信 息 , 激 活某 一 任务 , 中止某 一任务 , 等等 , 力叭 了动作 结点 为 了 区 分状态 结 点 和 动 作 结 点 , 在 广义 状态 图 中用。 表示 状态结点 , 用 口 表示 动作结点 出 自动作结 点 的边上 没有 关于 条 件 的 说 明 , 动 作 结 点 的出度 为 如 图 所示 该 图 表 示 在 状态 时 , 若 条 件 被 满足 , 则 直接转人状 态 若条件 被 满足 , 则首先完成 动作 , 然 后 转 至状态 若条件 、 都不被 满足 , 则仍转 向状态 在设计多 任 务系 统 时 , 每 一 任 务 单 独 对 应 于 一 个 广 义 状 态 图 , 以 此 来 保 证 各 任 务 的 完 整 性 同 时 , 利 用广 义状态 图 中的动作 结 点 表 示 任 务 之 间 的 叁丝与链砂 丝弋再了圃 逛要 图 广义状态 图 呛 日 石 月 血加 脚户 关 系 , 反 映系 统 运行过程 中各 任务 之 间错 综复杂 的相 关特性 面 向状态 的过程设计方 法 广 义状态 图是根据 系 统需 求分析 , 对系 统 的动态特性 的描 述 因 而 , 与过程设计有 着 比较 直接 的对应 关 系 , 可 以 方便地 、 规 范化地 转换 为过 程设 计结果 一 个完整 的广义状态 图包含 着 一个初 始状态和 一 个结束状 态 , 初始 状态 的人 度 为 , 结束 状态 的 出度 为 一个完整 的广 义状态 图对应 的过程设计应 包括 一 个 主程 序 的过 程 设 计 、 若 干 状态子 程序 的过程设计 、 和 一 个公 用 子 程 序集 合 的过程设 计 主程序 主要 完成 对各 个状态 子程 序 的调 用 主程 序 中包含 一个表示 状态 的全程 变量 , 其值
…80 北京科技大学学报 1994年No.1 通常为当前状态号.在用汇编语言实现的系统中,也可为子程序的人口地址.主程序的主体为 一个大循环,循环体为依据表示状态的全程变量的分枝结构,即依据状态号或子程序的人口 地址调用相应的子程序, 广义状态图中的每一个状态结点对应于一个状态子程序,状态子程序的功能为:测试各 个转移条件,当某个转移条件被满足时,首先执行相应分枝上动作结点规定的动作,然后把后 继状态的状态号或子程序入口地址赋给表示状态的全程变量,返回主程序.当所有导致动作 或转向其他状态结点的条件都不被满足时,不改变表示状态的全程变量,直接返回主程序.这 就意味着在状态子程序中不包含对条件的等待.这种处理方式特别适用于多任务软件系统的 设计,关于这一点后面还将详细论述, 用广义状态图方法能够得到系统的总体结构,模块划分,和对应于每一状态的过程设 计.进一步的工作是为完成各动作设计相应的数据结构和算法,在这个过程中形成的子程序 归属于公用子程序集合,公用子程序集合的设计可灵活地采用其他软件设计方法,这里由于 篇幅有限,不再多说.在设计多任务系统时,公用子程序集合中还应包括激活其他任务,完成 与其他任务关联的某项操作等的子程序, 13用广义状态图方法设计多任务系统 多任务系统的特点是各任务程序并发执行.任务内各步骤顺序执行,任务之间相关联,并行 执行.任务之间的关联方式可分为两大类. 第一类为互斥关系.假定有A、B两个任务,任务A在状态A处,若条件CB被满足,则激 活任务B,且等待任务B结束,然后根据任务B的执行结果分别转入不同的后继状态.任务B 的初始状态通常设为“等待任务调用请求”状态,当有调用请求时,根据调用者的要求完成相 应的动作和状态转移,处理结束后重新转人“等待任务调用请求”的状态,任务A和任务B之 间的相关关系体现于任务A和任务B的广义状态图中,第二类为共享关系,假定有任务A和 任务B,任务A在状态A时,若条件C被满足,则告诉任务B.且立即转人状态A2·任务B 接到任务A的通知后作相应的动作,这种情况下两个任务的关联关系仍可在任务A和任务B 的广义状态图中体现出来.与第一类情况的不同之处在于任务A的广义状态图中不必包含等 待任务B结束的状态结点 为了协调各任务,多任务系统往往要设计一个任务管理程序,称之为onitor..按照广义状 态图方法,monitor取代单任务系统中主程序的角色,它为每个任务设置一个状态变量,用来表 示各任务的状态号或表示状态子程序的人口地址;onitor初始化所有任务的状态变量,然后 各任务将按照自己的状态图以及环境、条件的变化运行;monitor中还保留一些任务之间的共 享数据区,可视之为各任务运行的环境变量,通过环境变量一任务可向另一任务传递信息,相 互关联地工作.monitor的主体是一个循环,循环体是依次按各任务的状态变量作分枝处理的 多个分枝结构.另外,monitor还将处理来自外部的信息,如进行中断信息的分析处理等,由此 也能够改变任务的运行环境和条件,导致一些任务的状态转移. 由于各个任务的环境数据及有关条件的改变是激发状态转移的根本因素,而环境数据及 有关条件只可能由外部信息(如通过中断得到的外部信息)或其他任务的执行引起变化,且 这种变化统一于monitor层次上,所以,各任务的状态应划分得比较小,且不包含等待某个事
· · 北 京 科 技 大 学 学 报 塑辫 年 通 常 为 当前状态号 在 用 汇编语言实 现 的系 统 中 , 也 可 为子 程序 的人 口 地址 主 程 序 的 主 体 为 一个大循 环 , 循环体为依据表示 状态 的全程 变量 的分枝 结 构 , 即 依 据 状 态 号 或 子 程 序 的人 口 地址调 用 相 应 的子程序 广义状态 图 中的每 一个状态结 点对应于 一个状态子 程序 状 态 子 程 序 的 功 能 为 测 试 各 个转移条件 , 当某 个转 移条件被满足 时 , 首先 执行相 应分枝上 动作结 点规 定 的 动 作 , 然 后 把 后 继状态的状态号 或子程 序人 口 地 址 赋 给表示 状 态 的全 程 变 量 , 返 回 主 程 序 当所 有 导 致 动 作 或转 向其他状态结 点 的条件都不被 满足 时 , 不改 变表示 状态 的全程 变 量 , 直 接 返 回 主 程 序 这 就意 味着 在 状态子程序 中不 包含 对条件 的等 待 这种处理方式特别 适 用 于 多 任 务 软 件 系 统 的 设计 , 关于 这一 点后 面还将详 细 论述 用广 义状态 图方法 能够 得 到 系 统 的 总 体 结 构 , 模 块 划 分 , 和 对 应 于 每 一 状 态 的 过 程 设 计 进一步 的工 作是 为完 成各 动作设计相 应 的 数 据 结 构 和 算 法 , 在 这 个 过程 中形 成 的 子 程 序 归属 于公 用 子程 序集 合 公 用子程序集 合 的设 计 可 灵 活地 采 用 其 他 软 件 设 计 方 法 , 这 里 由于 篇 幅有 限 , 不 再多说 在设计多 任 务系 统 时 , 公 用 子 程 序 集 合 中还 应 包括激 活其他 任务 , 完成 与 其他 任务关联 的某项操作等 的子程 序 用 广义 状态 图方 法设计多任务 系统 多 任务 系 统 的特点 是 各 任务程 序 并 发 执行 任务 内各步 骤顺序执行 , 任务之 间相 关联 , 并行 执行 任 务 之 间 的关联方式 可分 为两大 类 第 一类 为互 斥 关系 假定 有 、 两 个 任务 , 任务 在状态 , 处 , 若条件 被 满 足 , 则 激 活任务 , 且 等 待任 务 结束 , 然 后 根 据任务 的执行结果分别 转 人 不 同 的后 继 状 态 任 务 的初 始 状态通 常设 为 “ 等 待任务调 用 请求 ” 状态 , 当有 调 用 请 求 时 , 根 据 调 用 者 的要 求 完 成 相 应 的动作 和 状态转移 , 处理 结 束后 重新 转人 “ 等 待 任 务调 用 请 求 ” 的状 态 任 务 和 任 务 之 间 的相 关 关 系体现于 任 务 和任 务 的广 义状态 图 中 第 二类 为共 享 关 系 假定 有任务 和 任务 , 任务 在 状态 , 时 , 若条件 被 满 足 , 则 告 诉任 务 , 且 立 即 转 人 状 态 人 任 务 接到 任务 的通知后 作相 应 的动作 这种情 况下 两 个任务 的关联 关 系 仍 可 在 任 务 和任 务 的广 义状态 图 中体现 出来 与第 一类情 况 的不 同之 处在于 任务 的广 义状态 图 中不 必 包 含 等 待任务 结束 的状态 结点 为 了协调 各任务 , 多 任务 系 统往 往 要设计一 个任务管理程 序 , 称 之 为 按 照广 义 状 态 图方法 , 取代 单任 务系 统 中主程序 的角 色 , 它 为每 个任务设置 一 个状态变量 , 用 来表 示 各 任 务 的状态号 或表 示 状态 子程 序 的人 口 地址 初始 化所 有 任 务 的状 态 变 量 , 然 后 各任 务将 按 照 自己 的状态 图 以 及 环境 、 条件 的变 化运行 中还 保 留 一 些 任 务 之 间 的 共 享数据 区 , 可 视 之 为各 任 务运 行 的环 境 变量 , 通过 环境 变量 一任务 可 向另 一任务 传递信 息 , 相 互 关联地 工作 的主 体是 一个循环 , 循 环体是 依次按各任务 的状态 变量作分枝处理的 多 个分枝 结构 另 外 , 还 将处理 来 自外部 的信 息 , 如进行 中断信息 的分 析处理等 , 由此 也 能够 改 变 任 务 的运行 环境 和 条件 , 导致 一些 任 务 的状态转移 由于 各 个任务 的环境 数 据及 有 关条件 的改 变是 激 发状 态转 移 的 根 本 因 素 , 而 环 境 数 据 及 有 关条件 只 可 能 由外 部 信息 如通 过 中断 得 到 的 外 部 信 息 或 其 他 任 务 的 执 行 引 起 变 化 , 且 这种 变化 统一于 层 次上 , 所 以 , 各 任务 的状态应 划 分 得 比较小 , 且 不 包含等 待某 个事
Vol.16 No.I 王沁等:开发多任务系统的一种方法 ·81 件发生的功能,以使得各任务能够及时地根据环境数据及条件的变化转移自己的状态,完成 相应的动作,对于不依据环境数据及外部条件发生变化,且需要时间较长的动作,应划分为若 干个小步骤,每一步骤用一个状态结点和一个动作结点来表示,状态之间的转移条件为恒 真,在多CPU的硬件结构中,这样的动作还可以用单独一个CPU完成,利用中断或共享数 据区,通过monitor与原来的任务发生联系. 2实例一绘图仪控制系统 绘图仪控制系统是为绘图仪配制的,依据绘图仪命令驱动绘图仪工作的系统,它包括 3个CPU.CPU1负责面板的输人输出控制;CPU2的功能包括与主机接口、与CPUI、 CPU2接口;运行环境设置;错误处理;磁盘管理与系统测试,CPU3包括绘图仪命令分析 程序和绘图仪驱动程序两部分, 用广义状态图方法开发一个多任务系统,首先必须明确有哪些任务,然后设计monitor 结构,进而细化每个任务的工作过程,用广义状态图表示,最后把广义状态图转换为系统的 过程设计,对于包含多个CPU的系统,首先要确定好CPU之间的通信方式,然后对每个 CPU分别采用上述方法设计,下面以绘图仪控制系统的CPU2为例说明这种方法的具体应用. CPU2与主机、与CPU1用中断关联,与CPU3用共享数据区相关联.在CPU2上的 monitor协调如下任务:与主机的接口任务;与CPU】的接口任务;与CPU3的接口任务; 设置运行环境任务;磁盘管理及系统测试任务和错误处理任务.为了建立monitor,需要为每 个任务分别设立一个状态变量,假设对应于上述任务有如下状态变量:host一wait-no、 CPUl-wait-no、CPU3-wait-no、enio-wait-no、disk-wait-no、err-wait-nomoni- tor在初始化阶段置上述6个状态变量为相应任务的初始状态.初始化之后为一个大循环, 循环的终结条件为有终止请求或出现不可恢复的错误.循环体为6个分枝结构的序列,每个 任务分别对应着一个分枝结构,分枝结构是按照任务的状态变量值调用相应的过程子程序. 过程子程序的运行及外部中断将引起运行环境的变化,根据运行环境过程子程序修改任务的 状态变量,过程子程序中不包含对某一事件的等待,所有等待通过monitor的大循环完成. 确定了onitor结构之后,再分别为每个任务设计广义状态图.假定,用户在绘图仪面板 上根据菜单提示可选择绘图仪的自我测试·当键入该项选择后立即运行测试程序,若测试过 程失败,则显示错误信息,然后转人系统测试状态;若测试过程被中止,则转入自我测试的 初始状态;若测试正常结束,则直接转人系统测试状态· 与这部分功能关联的有:与CPU1的接口任务、错误处理任务、设置运行环境任务、磁 盘管理和系统测试任务·与CPU1接口任务的广义状态图如图2所示·“等待接收或发送请 求”状态为初始状态,其中,“设置错误处理”动作结点的功能为准备要显示的错误信息, 并设置monitor的有错状态字.错误处理任务将显示错误信息,并根据错误状态字标明的错 误性质进行状态转移,该任务通常处于“等待错误发生”状态·由于篇幅有限,错误处理任 务的广义状态图略· 设置运行环境任务查看由与CPU1接口任务填写的monitor的状态字和接收缓冲区的内 容,当某个转移条件被满足时,则完成环境参数的设置或与其他任务相关的动作,然后转移
王 沁 等 开发 多任务系 统 的一种方法 件 发 生 的功 能 , 以 使得 各任 务能够 及 时地 根 据 环 境 数 据 及 条 件 的 变 化 转 移 自己 的 状 态 , 完 成 相 应 的动作 对于 不依 据环境数据 及外 部条件发 生变化 , 且需要 时 间较 长 的 动 作 , 应 划 分 为 若 干 个 小 步 骤 , 每 一 步 骤 用 一 个 状 态 结 点 和 一 个 动 作 结 点 来 表 示 , 状 态 之 间 的 转 移 条 件 为 恒 真 在 多 的硬 件结 构 中 , 这样 的 动作 还 可 以 用 单 独 一 个 完 成 , 利 用 中 断 或 共 享 数 据 区 , 通过 与 原来 的任 务 发 生联 系 实例 —绘 图仪控制 系统 绘 图仪 控 制 系 统 是 为绘 图仪 配 制 的 , 依 据 绘 图仪命令 驱 动 绘 图 仪 工 作 的 系 统 它 包 括 个 负 责 面 板 的 输 人 输 出 控 制 的 功 能 包 括 与 主 机 接 口 、 与 、 接 口 运行 环境设置 错 误处理 磁盘管理 与系 统测 试 包 括 绘 图仪 命令 分 析 程序 和 绘 图仪驱动程 序 两部分 用 广义状态 图方 法 开发 一 个 多任 务系 统 , 首先必 须 明 确 有 哪 些 任 务 , 然 后 设计 结构 , 进而 细 化每 个 任务 的工 作 过程 , 用 广 义状 态 图表示 , 最后 把广 义状 态 图转换为 系 统的 过程设计 对于 包含 多 个 的 系 统 , 首 先 要 确 定 好 之 间 的通 信 方 式 , 然 后 对每 个 分别 采用上述方法设计 下面 以绘 图仪控制 系 统 的 为例 说明这种方法 的具 体应用 与 主机 、 与 用 中断关联 , 与 用共 享 数 据 区 相 关 联 在 上 的 协调 如下 任 务 与 主 机 的接 口 任 务 与 的 接 口 任 务 与 的 接 口 任 务 设置运行 环境任务 磁 盘管理及 系 统测试任务 和错误处理 任务 为 了建 立 , 需要 为 每 个 任 务 分 别 设 立 一 个 状 态 变 量 , 假 设 对 应 于 上 述 任 务 有 如 下 状 态 变 量 一 似 一 、 一 一 、 一 认吸 一 、 一 一 、 一 认敬 一 、 一 认吸 一 在 初 始 化 阶段置 上述 个状态变量 为相 应 任 务 的 初 始 状 态 初 始 化 之 后 为 一 个 大 循 环 , 循 环 的终 结 条件 为有 终 止请求或 出现不 可 恢 复 的错误 循 环体 为 个 分枝结 构 的序列 , 每个 任务分 别 对应着 一 个分枝结 构 , 分枝 结构 是 按照 任 务 的状态 变量值调 用 相 应 的 过 程 子 程 序 过程 子程 序 的运 行及 外 部 中断将 引起 运行 环境 的变 化 , 根 据运行 环境过程 子程 序修改 任 务的 状态 变量 过程 子程 序 中不 包含 对某 一事件 的等待 , 所有 等待通 过 的大循 环完成 确 定 了 结构 之 后 , 再分别 为每 个任务设计广义状态 图 假定 , 用户在绘 图仪面板 上根据菜单提示 可 选 择绘 图仪的 自我测 试 当键人 该项 选 择后 立 即运行 测试程序 , 若 测 试过 程失败 , 则 显示 错误信 息 , 然后 转人 系 统测 试状态 若测 试过程 被 中止 , 则 转 人 自我 测试的 初 始状态 若测 试 正 常结 束 , 则 直 接 转人 系 统测 试 状态 与这部分功 能 关联 的有 与 的接 口 任 务 、 错 误处理任 务 、 设置运 行 环境 任 务 、 磁 盘管理 和 系 统测 试任务 与 接 口 任 务 的 广 义状 态 图 如 图 所 示 “ 等 待 接 收 或 发 送 请 求 ” 状态 为初 始状态 其 中 , “ 设置 错 误处 理 ” 动 作 结 点 的 功 能 为 准 备 要 显 示 的 错 误 信 息 , 并 设置 的有 错 状态 字 错误处理 任 务将 显示 错 误信 息 , 并 根 据错误状 态 字 标 明 的 错 误性质进行状态转 移 该任务 通 常处于 “ 等 待错误 发生 ” 状态 由于 篇 幅有 限 , 错误处理任 务 的广义 状态 图略 设置 运行 环境 任务查 看 由与 接 口 任 务填 写 的 正 的 状 态 字 和 接 收 缓 冲 区 的 内 容 , 当某 个转 移条 件被 满 足 时 , 则 完成 环境参数 的设置 或 与其他任务 相 关 的动作 , 然后 转移
…82 北京科技大学学报 1994年No.1 共他 ,有“发送”请求 等待接收 有接收”请求 发送应答信息 接收应答 或发送请求 发送状态 发送错 发送正确 设monitor状态字 设置错误处理 接收信总状态 位答正确 应答错 结枣 未结束 发接收结束应答状态 发接收结束应答 接收一信总 图2与CPU1接口任务的部分广义状态图 Fig.2 Generalized state graph of CPUl interface task 到下一状态,设置运行环境任务的初始状态为运行开始后向用户面板提示第一个主菜单(或 信息)并等待用户输人选择时的状态.设备运行环境任务与本例相关的部分广义状态图如图 3所示. 其他· 其他 系统测试状不。 之待自我测试f始 CR 启动自我测试 测试中止 CR 正常结束等待自我测试结乘一 失败 设自我测试错 其他 初始状一一等待继牧测试要求 结束 其他 等待错误处理结束> 其他 图3设置运行环境任务的部分广义状态图 Fig.3 Generalized state graph of setting emvironment task 首次进人> 址示“自我测试,置首次进人非 N envio-wait-no= 测试失政 设坐·1我测试"错 等待错误处理结束 置首次进人 N Y envio wuit-no 测试被中止 等待自我测试开始",置首次进人 N envio-wait -no= 测试正常结束 系统测试状态",置首次进人 N 返回 图4“等待自我测试结果”状态子程序流程图 Fig.4 Flow chart of"wait for the end of self-test"state
北 京 科 技 大 学 学 报 望辫 年 设 状 态 字 发 接 收 结 束 应 答 接 收 一 信 息 图 与 飞 接 口 任务的部分广义状态图 龟 闲肠目 目助住 脚户 甸匕血 恤盘 到 下 一状态 设置运 行 环境 任务 的初 始 状态 为运行 开始后 向用户 面板提示第 一 个 主菜单 或 信 息 并等 待用 户 输人 选 择时 的状态 设备运行环 境任务 与本例相 关 的部分广义状态 图如图 所示 图 设置运行环境任务的部分广义 状态 图 瑰 侧阮 目巨 户 川飞 曰访 扣盯 吐 怕应 产 一 一一 、 产一 一一 , 、 、 人 内 一 尸 少竺一一一一下一一一一一甲二二二 一 已石 。 一 一 。 二 了爪弋失破忿 乌匡 百轰预。补星丝日 “ 等 待 错 误 处 理 结 束 一而一 一 兰塑燮竺二 一 一 二靡上 丽丽蔽不厂 二 兰 们 认川 一 “ 等 待 自我 测 试 开 始 “ , 置 首 次进 人 分‘ 一 口 厂三画 图 “ 等待自我测试结果 ” 状态子程序流程 图 瑰月 协 “ 们盆 血 日 创 一 把盆 ” 血加
Vol.16 No.I 王沁等:开发多任务系统的一种方法 .83- 图3中“启动自我测试”动作实为设置与磁盘管理和系统测试任务相关联的环境参数, 磁盘管理和系统测试任务依据该参数值进行状态转移,完成相应的功能,并把结果信息送回 共享数据区.设置运行环境任务在“等待自我测试结束”状态下查看共享数据区的内容, 直至测试结束再依据测试结果转人下一状态, 这里以“等待自我测试结束”状态为例说明状态子程序的过程设计形式,如图4所示 注意状态子程序中不应包含等待某一条件满足的循环,各任务对条件的等待统一于monitor 的大循环, 其他状态子程序的过程设计形式与此类似, 3小结 对于许多庞大、复杂,实时性要求高,外部接口复杂的系统,采用多任务结构进行设计 能使得系统结构清晰、简单,提高开发效率,便于维护,本文提出的广义状态图方法适用于 开发这样的多任务系统, 参考文献 1 Edward Yourdon,Larry L.Constantine Structured Design-Fundamentals of a Discipline Computer Program and Systems Design.New York:YURGON Inc,1975.27 ~40 2张海藩.软件工程导论.北京:清华大学出版社,1987.75~100 3汉森PB著.并发程序设计结构.杨芙清等编详.北京:国防工业出版社,1982.131~157 4徐家福.软件技术漫谈,计算机科学,1992,(1):1~4
王 沁等 开 发多任务 系统的一种方法 · 图 中 “ 启动 自我 测 试 ” 动作 实 为设置 与磁 盘管理 和 系 统测 试 任 务 相 关 联 的 环 境 参数 , 磁盘管理 和 系 统测 试任务依 据该参数值进行状态转移 , 完成相 应 的功能 , 并把结果信息送 回 共享数据 区 设置运 行 环境任务在 “ 等待 自我测 试结束 ” 状态下 查 看 共 享 数 据 区 的 内容 , 直 至测 试结束再依据测 试结果转 人下 一 状态 这 里 以 “ 等 待 自我 测 试结束 ” 状态 为例 说 明状 态 子 程 序 的过 程 设 计形 式 , 如 图 所示 注意 状态 子程序 中不 应包含等 待某 一 条件满足 的循环 , 各任 务 对条 件 的 等 待 统 一 于 的大循环 其他 状态子程序 的过程设计形 式 与此类似 小 结 对于 许 多 庞大 、 复 杂 , 实 时性要 求 高 , 外部接 口 复杂 的系 统 , 采 用 多任务结构进行设 计 能使得 系 统结构 清 晰 、 简单 , 提 高开 发效率 , 便于 维护 本文提 出的广 义状态 图方法 适用于 开 发这样 的多 任 务 系 统 参 考 文 献 砚 记 , 妞叮 入污 一 力 旧 刊 田记 声忱” 书 】 昭妙 卜记 , 卯 一 张海藩 软件工程 导论 北京 清华大 学 出版社 , 一 汉森 著 并发程序设计结构 杨 芙清等编译 北京 国 防工 业 出版社 , 徐家福 软件技术漫谈 计算机科学 , 卯 , 一 一