前后台介绍

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第九章前后台操作系统介绍...................................................................................................29.1前后台操作系统的特征.............................................................................................29.1.1前后台操作系统的前台与后台......................................................................29.1.2前后台操作系统的任务特征..........................................................................39.1.3前后台操作系统的实时特征..........................................................................59.2实现一个前后台操作系统.........................................................................................89.2.1分析前后台操作系统......................................................................................89.2.2将消息队列应用到前后台操作系统中........................................................109.2.3变量的互斥条件............................................................................................129.3实验:实现一个基于消息驱动的前后台操作系统...............................................149.4.1实验目的........................................................................................................149.4.2实验假设........................................................................................................149.4.3准备工作........................................................................................................149.4.4试验步骤........................................................................................................149.4习题...........................................................................................................................18第九章前后台操作系统介绍在实际应用中操作系统是一个什么样子呢?下面我向大家介绍并实现一种在实际应用中较为常见并且比较简单的操作系统“前后台操作系统”通常不复杂的小系统一般设计成如图2.1所示的样子。这种系统可称为前后台系统或超循环系统。9.1前后台操作系统的特征9.1.1前后台操作系统的前台与后台一、了解前台与后台要了解前后台操作系统的特征首先要了解前后台的概念。那么什么是前台与后台呢?首先了解一下前后台操作系统的运行机制,前后台操作系统的运行机制非常简单首先在操作系统的入口函数中实现一个无限的循环,在循环中调用相应的函数完成相应的任务操作,这部分可以看成后台行为。中断服务程序处理异步事件,这部分可以看成前台行为。后台根据前台提供的信息进入相应的任务所以也可以叫做任务级。前台也叫中断级。时间相关性很强的关键操作一定是靠中断服务来保证的。因为中断服务提供的信息一直要等到后台程序走到该处理这个信息这一步时才能得到处理,这种系统在处理信息的及时性上,比实际可以做到的要差。这个指标称作任务级响应时间。最坏情况下的某一个任务级响应时间取决于整个循环的执行时间。因为循环的执行时间不是常数,程序经过某一特定部分的准确时间也是不能确定的。进而,如果程序修改了,循环的时序也会受到影响。二、最简单的前后台操作系统根据前面的描述我们可以把最简单的前后台操作系统写成下面的样子:后台程序:voidmain(void){while(TRUE){if(Task1_flag)Task1();if(Task2_flag)Task2();if(Task3_flag)Task3();}}voidTask1(){Task1_flag=FALSE;}voidTask2(){Task2_flag=FALSE;}voidTask3(){Task3_flag=FALSE;}前台程序:isrvoidisr_Task1(){Task1_flag=TRUE;}isrvoidisr_Task2(){Task2_flag=TRUE;}isrvoidisr_Task3(){Task3_flag=TRUE;}代码9.1-1分析一下这个前后台操作系统的组成:在这个前后台操作系统中mian函数中的“while(TRUE)”里面包含的部分为系统的后台。中断处理“isr_Task1”、“isr_Task2”、“isr_Task2”函数构成了系统的前台。“Task1()”、“Task2()”、“Task3()”,每个函数对应系统的一个的应用。根据前面章节的描述我们知道要确定某一个嵌入式操作系统的特征,主要应从两个方面着手,单任务与多任务,实时与非实时。我们将在下面的章节中分别从这两方面入手来分析一下前后台操作系统的特征。9.1.2前后台操作系统的任务特征我们先从任务与多任务方面分析,并找到前后台操作系统的任务。在任务方面有些人看到前面代码中的“Task1()”、“Task2()”、“Task3()”后可能就会把他们成前后台操作系统的任务,从而把前后台操作系统的任务特征定义为多任务,然而事实的真相并非如此。一、概念介绍让我们先看一下嵌入式操作系统中关于任务与多任务的概念。任务一个任务,也称作一个线程,是一个简单的程序,该程序可以认为CPU完全只属该程序自己。在嵌入式操作系统中任务必需具备以下几个特征,(1)一个任务拥有一套自己的CPU寄存器以及自己的栈空间。(2)一个任务的开始伴随着一个无限的循环,而结束通常为退出这个循环。(3)一个任务必需运行在以下五种状态中的一种状态休眠态、就绪态、运行态、挂起态(等待某一事件发生)和被中断态。(4)一个任务在多任务操作系统中拥有自己的任务优先级。(5)一个任务通常对应整个系统的某一个功能。多任务多任务运行的实现实际上是靠CPU(中央处理单元)在许多任务之间转换、调度。CPU只有一个,轮番服务于一系列任务中的某一个。多任务运行使CPU的利用率得到最大的发挥,并使应用程序模块化。在实时应用中,多任务化的最大特点是,开发人员可以将很复杂的应用程序层次化。使用多任务,应用程序将更容易设计与维护。二、分析前后台操作系统的任务按照任务与多任务的定义分析一下前后台操作系统中的“Task1()”、“Task2()”、“Task3()”是否符合任务的定义。(1)一个任务拥有一套自己的CPU寄存器以及自己的栈空间。很显然每个“Task”并不具备自己的CPU寄存器以及栈的空间。在进入某一个Task的时候,系统很难确保这个时候系统堆栈剩余空间的大小。因为所有Task的栈空间都使用main函数的栈空间。(2)一个任务的开始伴随着一个无限的循环,而结束通常为退出这个循环。每个Task内并没有无限循环仅仅通过一个标志位决定是否进入,而退出也不是退出一个循环而是结束一次函数的调用。(3)一个任务必需运行在以下五种状态中的一种状态休眠态、就绪态、运行态、挂起态(等待某一事件发生)和被中断态。每个Task都没有运行状态的概念(4)一个任务在多任务操作系统中拥有自己的任务优先级。每个Task不存在优先级,系统无法保证那一个Task能被优先处理(5)一个任务往往对应整个系统的某一个功能。每个Task通常对应系统的某一个功能显然前后台操作系统中的“Task1()”、“Task2()”、“Task3()”不符合任务的定义,那么在前后台操作系统中的任务在那儿呢?让我们看一下前面例子中的“main()”函数(1)一个任务拥有一套自己的CPU寄存器以及自己的栈空间。显然main函数拥有自己的CPU寄存器以及自己的栈空间。(2)一个任务的开始伴随着一个无限的循环,而结束通常为退出这个循环。Main函数内部拥有一个无限的循环,如果这个循环退出也就是标志着main函数的结束。(3)一个任务必需运行在以下五种状态中的一种状态休眠态、就绪态、运行态、挂起态(等待某一事件发生)和被中断态。main函数在前后台操作系统中拥有两种状态:运行态、被中断态。(4)一个任务在多任务操作系统中拥有自己的任务优先级。main函数没有优先级。(5)一个任务往往对应整个系统的某一个功能。main函数完成了系统的全部功能,如果前后台操作系统仅仅实现一个Task1()那么main函数符合任务特征三、确定前后台操作系统的任务特征我们看到main函数更加符合操作系统任务的定义,如果前后台操作系统只有一个Task(),那么main函数符合任务定义的所有特征,而无论Task()存在多少个Task()只符合任务的几个特征,所以前后台操作系统只有一个任务,这个任务就是操作系统的后台,因此前后台操作系统关于任务方面的特征应该为单任务。但是虽然前后台操作系统的任务特征为单任务,我们仍然把它理解成特殊的“多任务操作系统”,理由很简单“通常嵌入式系统中一个任务对应整个系统的某一个功能”这一点尤为重要。并且我们可以通过修改让每个Task()拥有任务的部分特征(但无论怎样修改每个Task()仍然无法满足任务定义的所有特征这个我们将在后面的章节中讲到),所以我们这里把前后台操作系统的任务特征也定义为“多任务”,但我们要知道从本质上讲前后台操作系统为单任务操作系统。前后台操作系统与真正拥有任务切换的多任务操作系统相比较,不涉及任务切换、任务运行状态管理等诸多任务方面的设计,实现起来比较简单。另外操作系统所有的程序调用都为一个主循环,CPU没有任务切换的额外开销系统利用率非常高。从省电的角度来看如果实现同样功能,前后台操作系统的电源消耗量也比有任务切换的多任务操作系统低。9.1.3前后台操作系统的实时特征让我们再看一下前后台操作系统的实时方面的特征,说到嵌入式操作系统的的实时,这真是一个说简单非常简单说复杂非常复杂的问题。“实时”在操作系统中是一个性能指标,在某些情况下这个指标可能定义的很苛刻很少有操作系统满足这个性能,有些操作系统即使是实时的操作系统也未必满足要求,又或者在某些情况下这个指标定义的非常宽松绝大多数操作系统都能够满足这个需求,即使这个操作系统是非实时的操作系统也仍然能够满足,这取决于应用对系统的要求,所以在实际应用中,设计者往往关心的是这个操作系统实时性能的指标而非这个操作系统到底是实时操作系统还是非实时操作系统。而比较成功商业软件往往也会给出自己在某一个硬件平台上面相关的实时性参数供用户参考。一、概念介绍:

1 / 18
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功