一种实时多任务系统软件设计方法

一种实时多任务系统软件设计方法

ID:24824740

大小:52.50 KB

页数:8页

时间:2018-11-14

一种实时多任务系统软件设计方法_第1页
一种实时多任务系统软件设计方法_第2页
一种实时多任务系统软件设计方法_第3页
一种实时多任务系统软件设计方法_第4页
一种实时多任务系统软件设计方法_第5页
资源描述:

《一种实时多任务系统软件设计方法》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、一种实时多任务系统软件设计方法

2、第1内容加载中...摘要:从进程和线程调度的角度出发,介绍了一种规范化的实时多任务系统软件设计方法,提出了“前向分支”的设计原则,给出了完整的系统模型。在机电产品研制开发中,经常要涉及到基于嵌入式系统或基于单片机系统的程序设计。实时多任务是这类系统最基于的要求之一。在实践中通常采用以下两种解决方案:500)this.style.ouseg(this)">一是在商业化时操作系统的基础上进行二次开发;二是用户自动设计系统软件。前者设计工作量小,设计周期短,系统的设计质量也容易得到保证。但由于商业实时操作系统往往较多地考虑通用性,缺

3、乏灵活性,对于一些特定的应用场合,其性能往往不能令人满意。同时,这种方案还存在着成本高,依赖于特定硬件等缺点。第二种方案可以从系统的实际要求和硬件的实际情况出发灵活地进行系统设计,易于满足一些特定场合的性能要求,成本也较低。但是,由于缺乏系统化、规范化的设计方法,缺少高层次抽象工具,使得系统的设计质量不容易得到保证,你严重地依赖于程序员的水平和经验。本文针对上述第三种方案的高限,从进程和线程调度的角度出发,介绍了一种系统化、规范化和易于工程化实施的实时多任务系统软件设计方法,提出了“前向分支”的设计原则,并给出了完整的系统模型。1进程的划分对复杂的系统需求进

4、行模块化和层次化的划分是软件设计的基本方法。在实践中复杂的系统需求通常被划分为一些功能相对独立的任务模块,每个任务模块被视作一个进程(process)。系统中如有多个进程并发(concurrent)运行,该系统就是一个多任务的系统。在图1所示的例子中,n个任务模块构成了宏观上并发运行的一组进程(即Proc_1~Proc-n)。Proc_5和Proc_9是两个具有代表性的进程结构。Proc_5是断续进行的进程,表示了某一顺序逻辑控制的流程。Proc_9是LCD汉字显示程序,其结构是典型的多重循环。其功能是将数组aDisplay中所描述的24×24点阵中文字符串

5、送至LCD显示屏。ADisplay的结构参几图3(e)。500)this.style.ouseg(this)">Proc_9的基本工作原理如下:当cDispiay不为0时,依次从aDlsplay中取出每个待显示汉字的点阵位置及其在LCD内部显存中的地址,根据这两个参数将一个汉字的点阵顺序发送到LCD内部显存中。直至全部汉字显示完,cDisplay减为0,Proc_9转入空档状态,等待新的显示请求。系统程序的主要任务之一就是对进程进行调度,包括启动和终止进程、管理进程之间的通讯、处理进程之间的优先级等。但是如果按图1的结构顺序调度进程、以进程为基本单位分配CP

6、U时间的话,显然存在严重的问题。例如在Proc_5中,当程序处于等待K1闭合的状态时,其它任何进程都无法得到服务,尤其当K1出现故障时,系统将处于“挂起”状态。如果一个进程过多地占据了CPU时间,其他进程将不能得到公平、均匀的服务,响应时间无法得到保证,系统效率会降低。总之,只有将CPU时间的分配单位减小,才能解决上述问题。2线程的拆分线程(Thread)是CPU的基本执行单位。一个进程可以由一个或多个线程构成。如前所述,单一线程的进程可能会存在诸多问题,而将一进程拆分为多个线程是解决上述问题的有效手段。由图1的Proc_5和Proc_9可以看出,一个进程过

7、多地占据CPU时间,是因为其中含有次数不确定的等待循环、纯延时和较为耗时的多重循环。其中,纯延时可以用软件延和中断定时两种方法实现,这两种方法在进程中又都可以归结为循环。因此,在拆分线程时应尽量遵循“前向分支”原则,使线程中不含有或少含有循环。循环结构本质上是由一个分支判断和一个“反向”转跳构成的。所谓“前向分支”原则是指:在一次调度中,当程序发生雪支时,应使程序跳向一段未被执行过的代码,而不得重复运行已运行过的代码。如果严格按“前向分支”原则拆分线程,循环结构将被完全消除。图2和图3分别是Proc_5和Proc_9严格按“前向分支”原则拆分为线程的结果。如

8、果进程设计遵循结构化程序思想,那么在对某一进程严格按“前向分支”原则进行线程拆分时,最小拆分数量可按如下方法确定:进程入口至第一个循环返回节点之间如无程序代码,最小拆分数量等于循环返回节点数Nback;进程入口至第一个循环返回节点之间如有程序代码,最小拆分数量等于Nback+1。实际拆分数量可以大于最小拆分数量,但不应小于该数,500)this.style.ouseg(this)">否则必然有一个以上的线程中含循环。两个循环返回节点之间(或入口到第一个循环返回节点之间、最后一个循环返回节点到出口之间)的代码就构成了一个线程的对待。如果原进程中无循环,可将该进

9、程当做单一线程对等。在图1中,Proc_9中共有4个

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。