首页 ucos 操作系统

ucos 操作系统

举报
开通vip

ucos 操作系统ucos 操作系统 第2章 实时系统概念 1 2.0 前后台系统 FOREGROUND/BACKGROUND SYSTEM 1 2.1 代码的临界段 2 2.2 资源 2 2.3 共享资源2 2.4 多任务 2.5 任务 2.6 任务切换CONTEXT SWITCH OR TASK SWITCH 3 2.7 内核KERNEL 3 2.8 调度SCHEDULER 4 2.9 不可剥夺型内核 NON-PREEMPTIVE KERNEL 4 2.10 可剥夺型内核 5 2.11 可重入性REENTRANCY 2.12...

ucos 操作系统
ucos 操作系统 第2章 实时系统概念 1 2.0 前后台系统 FOREGROUND/BACKGROUND SYSTEM 1 2.1 代码的临界段 2 2.2 资源 2 2.3 共享资源2 2.4 多任务 2.5 任务 2.6 任务切换CONTEXT SWITCH OR TASK SWITCH 3 2.7 内核KERNEL 3 2.8 调度SCHEDULER 4 2.9 不可剥夺型内核 NON-PREEMPTIVE KERNEL 4 2.10 可剥夺型内核 5 2.11 可重入性REENTRANCY 2.12 时间片轮番调度法 7 2.13 任务优先级 7 2.14 2.14静态优先级 7 2.15 动态优先级 7 2.16 优先级反转 7 2.17 任务优先级分配 8 2.18 互斥条件 10 2.18.1 关中断和开中断 10 2.18.2 测试并置位 11 2.18.3 禁止然后允许任务切换 11 2.18.4 信号量Semaphores 12 2.19 死锁或抱死DEADLOCK OR DEADLY EMBRACE 16 2.20 同步 16 2.21 事件标志EVENT FLAGS 18 2.22 任务间的通讯INTERTASK COMMUNICATION 18 2.23 消息邮箱MESSAGE MAIL BOXES 18 2.24 消息队列MESSAGE QUEUE 19 2.25 中断 20 2.26 中断延迟 20 2.27 中断响应 21 2.28 中断恢复时间INTERRUPT RECOVERY 21 2.29 中断延迟、响应和恢复 22 2.30 中断处理时间 22 2.31 非屏蔽中断NMI 23 2.32 时钟节拍CLOCK TICK 24 2.33 对存储器的需求 25 2.34 使用实时内核的优缺点 26 2.35 实时系统小结 26 第2章 实时系统概念 实时系统的特点是如果逻辑和时序出现偏差将会引起严重后果的系统。有两种类型的实时系统软实时系统和硬实时系统。在软实时系统中系统的宗旨是使各个任务运行得越快越好并不要求限定某一任务必须在多长时间内完成。 在硬实时系统中各任务不仅要执行无误而且要做到准时。大多数实时系统是二者的结合。实时系统的应用涵盖广泛的领域而多数实时系统又是嵌入式的。这意味着计算机建在系统内部用户看不到有个计算机在系统里面。以下是一些嵌入式系统的例子 实时应用软件的 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 一般比非实时应用软件设计难一些。本章讲述实时系统概念。 2.0 前后台系统 Foreground/Background System 不复杂的小系统一般设计成如图2.1所示的样子。这种系统可称为前后台系统或超循环系统Super-Loops。应用程序是一个无限的循环循环中调用相应的 函数 excel方差函数excelsd函数已知函数     2 f x m x mx m      2 1 4 2拉格朗日函数pdf函数公式下载 完成相应的操作这部分可以看成后台行为background。中断服务程序处理异步事件这部分可以看成前台行为foreground。后台也可以叫做任务级。前台也叫中断级。时间相关性很强的关键操作Critical operation一定是靠中断服务来保证的。因为中断服务提供的信息一直要等到后台程序走到该处理这个信息这一步时才能得到处理这种系统在处理信息的及时性上比实际可以做到的要差。这个指标称作任务级响应时间。最坏情况下的任务级响应时间取决于整个循环的执行时间。因为循环的执行时间不是常数程序经过某一特定部分的准确时间也是不能确定的。进而如果程序修改了循环的时序也会受到影响。 图2-1前后台系统 很多基于微处理器的产品采用前后台系统设计例如微波炉、电话机、玩具等。在另外一些基于微处理器的应用中从省电的角度出发平时微处理器处在停机状态halt所有的事都靠中断服务来完成。 2.1 代码的临界段 代码的临界段也称为临界区指处理时不可分割的代码。一旦这部分代码开始执行则不允许任何中断打入。为确保临界段代码的执行在进入临界段之前要关中断而临界段代码执行完以后要立即开中断。参阅2.03共享资源 2.2 资源 任何为任务所占用的实体都可称为资源。资源可以是输入输出设备例如打印机、键盘、显示器资源也可以是一个变量一个结构或一个数组等。 2.3 共享资源 可以被一个以上任务使用的资源叫做共享资源。为了防止数据被破坏每个任务在与共享资源打交道时必须独占该资源。这叫做互斥mutual exclusion。在2.18节“互斥”中将对技术上如何保证互斥条 件做进一步讨论。 2.4 多任务 多任务运行的实现实际上是靠CPU中央处理单元在许多任务之间转换、调度。CPU只有一个轮番服务于一系列任务中的某一个。多任务运行很像前后台系统但后台任务有多个。多任务运行使CPU的利用率得到最大的发挥并使应用程序模块化。在实时应用中多任务化的最大特点是开发人员可以将很复杂的应用程序层次化。使用多任务应用程序将更容易设计与维护。 2.5 任务 一个任务也称作一个线程是一个简单的程序该程序可以认为CPU完全只属该程序自己。实时应用程序的设计过程包括如何把问 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 分割成多个任务每个任务都是整个应用的某一部分每个任务被赋予一定的优先级有它自己的一套CPU寄存器和自己的栈空间如图2.2所示。 图2.2多任务。 典型地、每个任务都是一个无限的循环。每个任务都处在以下5种状态之一的状态下这5种状态是休眠态就绪态、运行态、挂起态等待某一事件发生和被中断态参见图2.3 休眠态相当于该任务驻留在内存中但并不被多任务内核所调度。就绪意味着该任务已经准备好可以运行了但由于该任务的优先级比正在运行的任务的优先级低还暂时不能运行。运行态的任务是指该任务掌握了CPU的控制权正在运行中。挂起状态也可以叫做等待事件态WAITING指该任务在等待等待某一事件的发生例如等待某外设的I/O操作等待某共享资源由暂不能使用变成能使用状态等待定时脉冲的到来或等待超时信号的到来以结束目前的等待等等。最后发生中断时CPU提供相应的中断服务原来正在运行的任务暂不能运行就进入了被中断状态。图2.3 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 示μC/OS-?中一些函数提供的服务这些函数使任务从一种状态变到另一种状态。 图2.3任务的状态 2.6 任务切换Context Switch or Task Switch Context Switch 在有的书中翻译成上下文切换实际含义是任务切换或CPU寄存器内容切换。当多任务内核决定运行另外的任务时它保存正在运行任务的当前状态Context即CPU寄存器中的全部内容。这些内容保存在任务的当前状况保存区Task’s Context Storage area也就是任务自己的栈区之中。见图2.2。入栈工作完成以后就是把下一个将要运行的任务的当前状况从该任务的栈中重新装入CPU的寄存器并开始下一个任务的运行。这个过程叫做任务切换。任务切换过程增加了应用程序的额外负荷。CPU的内部寄存器越多额外负荷就越重。做任务切换所需要的时间取决于CPU有多少寄存器要入栈。实时内核的性能不应该以每秒钟能做多少次任务切换来评价。 2.7 内核Kernel 多任务系统中内核负责管理各个任务或者说为每个任务分配CPU时间并且负责任务之间的通讯。内核提供的基本服务是任务切换。之所以使用实时内核可以大大简化应用系统的设计是因为实时内核允许将应用分成若干个任务由实时内核来管理它们。内核本身也增加了应用程序的额外负荷代码空间增加ROM的用量内核本身的数据结构增加了RAM的用量。但更主要的是每个任务要有自己的栈空间这一块吃起内存来是相当厉害的。内核本身对CPU的占用时间一般在2到5个百分点之间。 单片机一般不能运行实时内核因为单片机的RAM很有限。通过提供必不可缺少 的系统服务诸如信号量管理邮箱、消息队列、延时等实时内核使得CPU的利用更为有效。一旦读者用实时内核做过系统设计将决不再想返回到前后台系统。 2.8 调度Scheduler 调度Scheduler英文还有一词叫dispatcher也是调度的意思。这是内核的主要 职责 岗位职责下载项目部各岗位职责下载项目部各岗位职责下载建筑公司岗位职责下载社工督导职责.docx 之一就是要决定该轮到哪个任务运行了。多数实时内核是基于优先级调度法的。每个任务根据其重要程度的不同被赋予一定的优先级。基于优先级的调度法指CPU总是让处在就绪态的优先级最高的任务先运行。然而究竟何时让高优先级任务掌握CPU的使用权有两种不同的情况这要看用的是什么类型的内核是不可剥夺 型的还是可剥夺型内核。 2.9 不可剥夺型内核 Non-Preemptive Kernel 不可剥夺型内核要求每个任务自我放弃CPU的所有权。不可剥夺型调度法也称作合作型多任务各个任务彼此合作共享一个CPU。异步事件还是由中断服务来处理。中断服务可以使一个高优先级的任务由挂起状态变为就绪状态。但中断服务以后控制权还是回到原来被中断了的那个任务直到该任务主动放弃CPU的使用权时那个高优先级的任务才能获得CPU的使用权。 不可剥夺型内核的一个优点是响应中断快。在讨论中断响应时会进一步涉及这个问题。在任务级不可剥夺型内核允许使用不可重入函数。函数的可重入性以后会讨论。每个任务都可以调用非可重入性函数而不必担心其它任务可能正在使用该函数从而造成数据的破坏。因为每个任务要运行到完成时才释放CPU的控制权。当然该不可重入型函数本身不得有放弃CPU控制权的企图。 使用不可剥夺型内核时任务级响应时间比前后台系统快得多。此时的任务级响应时间取决于最长的任务执行时间。 不可剥夺型内核的另一个优点是几乎不需要使用信号量保护共享数据。运行着的任务占有CPU而不必担心被别的任务抢占。但这也不是绝对的在某种情况下信号量还是用得着的。处理共享I/O设备时仍需要使用互斥型信号量。例如在打印机的使用上仍需要满足互斥条件。图2.4示意不可剥夺型内核的运行情况任务在运行过程之中L2.41中断来了如果此时中断是开着的CPU由中断向量F2.42进入中断服务子程序中断服务子程序做事件处理F2.43使一个有更高级的任务进入就绪态。中断服务完成以后中断返回指令F2.44 使CPU回到原来被中断的任务接着执行该任务的代码F2.45直到该任务完成调用一个内核服务函数以释放CPU控制权由内核将控制权交给那个优先级更高的、并已进入就绪态的任务F2.46这个优先级更高的任务才开始处理中断服务程序标识的事件F2.47。 图2.4不可剥夺型内核 不可剥夺型内核的最大缺陷在于其响应时间。高优先级的任务已经进入就绪态但还不能运行要等也许要等很长时间直到当前运行着的任务释放CPU。与前后系统一样不可剥夺型内核的任务级响应时间是不确定的不知道什么时候最高优先级的任务才能拿到CPU的控制权完全取决于应用程序什么时候释放CPU。 总之不可剥夺型内核允许每个任务运行直到该任务自愿放弃CPU的控制权。中断可以打入运行着的任务。中断服务完成以后将CPU控制权还给被中断了的任务。任务级响应时间要大大好于前后系统但仍是不可知的商业软件几乎没有不可剥夺型内核。 2.10 可剥夺型内核 当系统响应时间很重要时要使用可剥夺型内核。因此μC/OS-?以及绝大多数商业上销售的实时内核都是可剥夺型内核。最高优先级的任务一旦就绪总能得到CPU的控制权。当一个运行着的任务使一个比它优先级高的任务进入了就绪态当前任务的CPU使用权就被剥夺了或者说被挂起了那个高优先级的任务立刻得到了CPU的控制权。如果是中断服务子程序使一个高优先级的任务进入就绪态中断完成时中断了的任务被挂起优先级高的那个任务开始运行。如图2.5所示。 图2.5可剥夺型内核 使用可剥夺型内核最高优先级的任务什么时候可以执行可以得到CPU的控制权是可知的。使用可剥夺型内核使得任务级响应时间得以最优化。 使用可剥夺型内核时应用程序不应直接使用不可重入型函数。调用不可重入型函数时要满足互斥条件这一点可以用互斥型信号量来实现。如果调用不可重入型函数时低优先级的任务CPU的使用权被高优先级任务剥夺不可重入型函数中的数据有可能被破坏。综上所述可剥夺型内核总是让就绪态的高优先级的任务先运行中断服务程序可以抢占CPU到中断服务完成时内核让此时优先级最高的任务运行不一定是那个被中断了的任务。任务级 系统响应时间得到了最优化且是可知的。μC/OS-?属于可剥夺型内核。 2.11 可重入性Reentrancy 可重入型函数可以被一个以上的任务调用而不必担心数据的破坏。可重入型函数任何时候都可以被中断一段时间以后又可以运行而相应数据不会丢失。可重入型函数或者只使用局部变量即变量保存在CPU寄存器中或堆栈中。如果使用全局变量则要对全局变量予以保护。程序2.1是一个可重入型函数的例子。 程序清单2.1可重入型函数 void strcpychar dest char src while dest src dest NUL 函数Strcpy做字符串复制。因为参数是存在堆栈中的故函数Strcpy可以被多个任务调用而不必担心各任务调用函数期间会互相破坏对方的指针。 不可重入型函数的例子如程序2.2所示。Swap是一个简单函数它使函数的两个形式变量的值互换。为便于讨论假定使用的是可剥夺型内核中断是开着的Temp定义为整数全程变量。 程序清单 2.2 不可重入型函数 int Temp void swapint x int y Temp x x y y Temp 程序员打算让Swap 函数可以为任何任务所调用如果一个低优先级的任务正在执行Swap函数而此时中断发生了于是可能发生的事情如图2.6所示。F2.61表示中断发生时Temp已被赋值1中断服务子程序使更优先级的任务就绪当中断完成时F2.62内核假定使用的是μC/OS-?使高优先级的那个任务得以运行F2.63高优先级的任务调用Swap函数是Temp赋值为3。这对该任务本身来说实现两个变量的交换是没有问题的交换后Z的值是4X的值是3。然后高优先级的任务通过调用内核服务函数中的延迟一个时钟节拍F2.64释放了CPU的使用权低优先级任务得以继续运行F2.65.注意此时Temp的值仍为3在低优先级任务接着运行时Y的值被错误地赋为3而不是正确值1。 图2.6不可重入性函数 请注意这只是一个简单的例子如何能使代码具有可重入性一看就明白。然而有些情况下问题并非那么易解。应用程序中的不可重入函数引起的错误很可能在测试时发现不了直到产品到了现场问题才出现。如果在多任务上您还是把新手使用不可重入型函数时千万要当心。 使用以下技术之一即可使Swap函数具有可重入性 把Temp定义为局部变量 调用Swap函数之前关中断调动后再开中断 用信号量禁止该函数在使用过程中被再次调用 如果中断发生在Swap函数调用之前或调用之后两个任务中的XY值都会是正确的。 2.12 时间片轮番调度法 当两个或两个以上任务有同样优先级内核允许一个任务运行事先确定的一段时间叫做时间额度quantum然后切换给另一个任务。也叫做时间片调度。内核在满足以下条件时把CPU控制权交给下一个任务就绪态的任务 当前任务已无事可做 当前任务在时间片还没结束时已经完成了。 目前μC/OS-?不支持时间片轮番调度法。应用程序中各任务的优先级必须互不相同。 2.13 任务优先级 每个任务都有其优先级。任务越重要赋予的优先级应越高。 2.14 2.14静态优先级 应用程序执行过程中诸任务优先级不变则称之为静态优先级。在静态优先级系统中诸任务以及它们的时间约束在程序编译时是已知的。 2.15 动态优先级 应用程序执行过程中任务的优先级是可变的则称之为动态优先级。实时内核应当避免出现优先级反转问题。 2.16 优先级反转 使用实时内核优先级反转问题是实时系统中出现得最多的问题。图2.7解释优先级反转是如何出现的。如图任务1优先级高于任务2任务2优先级高于任务3。任务1和任务2处于挂起状态等待某一事件的发生任务3正在运行如图2.71。此时任务3要使用其共享资源。使用共享资源之前首先必须得到该资源的信号量Semaphore见2. 18.04信号量。任务3得到了该信号量并开始使用该共享资源图2.72。由于任务1优先级高它等待的事件到来之后剥夺了任务3的CPU使用权图2.73任务1开始运行图2.74。运行过程 中任务1也要使用那个任务3正在使用着的资源由于该资源的信号量还被任务3占用着任务1只能进入挂起状态等待任务3释放该信号量图2.75。任务3得以继续运行图2.76。由于任务2的优先级高于任务3当任务2等待的事件发生后任务2剥夺了任务3的CPU的使用权图2.77并开始运行。处理它该处理的事件图2.78直到处理完之后将CPU控制权还给任3图2.79。任务3接着运行图2.710直到释放那个共享资源的信号量图2711。直到此时由于实时内核知道有个高优先级的任务在等待这个信号量内核做任务切换使任务1得到该信号量并接着运行图2.712。 在这种情况下任务1优先级实际上降到了任务3 的优先级水平。因为任务1要等直等到任务3释放占有的那个共享资源。由于任务2剥夺任务3的CPU使用权使任务1的状况更加恶化任务2使任务1增加了额外的延迟时间。任务1和任务2的优先级发生了反转。 纠正的方法可以是在任务3使用共享资源时提升任务3的优先级。任务完成时予以恢复。任务3的优先级必须升至最高高于允许使用该资源的任何任务。多任务内核应允许动态改变任务的优先级以避免发生优先级反转现象。然而改变任务的优先级是很花时间的。如果任务3并没有先被任务1剥夺CPU使用权又被任务2抢走了CPU使用权花很多时间在共享资源使用前提升任务3的优先级然后又在资源使用后花时间恢复任务3的优先级则无形中浪费了很多CPU时间。真正需要的是为防止发生优先级反转内核能自动变换任务的优先级这叫做优先级继承Priority inheritance但μC/OS-?不支持优先级继承一些商业内核有优先级继承功能。 图2.7优先级反转问题 图2.8解释如果内核支持优先级继承的话在上述例子中会是怎样一个过程。任务3在运行图2.81任务3申请信号量以获得共享资源使用权图2.82任务3得到并开始使用共享资源图2.83。后来CPU使用权被任务1剥夺图2.84任务1开始运行图2.85任务1申请共享资源信号量图2.86。此时内核知道该信号量被任务3占用了而任务3的优先级比任务1低内核于是将任务3的优先级升至与任务1一样然而回到任务3继续运行使用该共享资源图2.77直到任务3释放共享资源信号量图2。88。这时内核恢复任务3本来的优先级并把信号量交给任务1任务1得以顺利运行。 图2.89任务1完成以后图2.810那些任务优先级在任务1与任务3之间的任务例如任务2才能得到CPU使用权并开始运行 图2.811。注意任务2在从图2.83到图2.810的任何一刻都有可能进入就绪态并不影响任务1、任务3的完成过程。在某种程度上任务2和任务3之间也还是有不可避免的优先级反转。 图2.8 2.17 任务优先级分配 给任务定优先级可不是件小事因为实时系统相当复杂。许多系统中并非所有的任务都至关重要。不重要的任务自然优先级可以低一些。实时系统大多综合了软实时和硬实时这两种需求。软实时系统只是要求任务执行得尽量快并不要求在某一特定时间内完成。硬实时系统中任务不但要执行无误还要准时完成。 一项有意思的技术可称之为单调执行率调度法RMSRate Monotonic Scheduling用于分配任务优先级。这种方法基于哪个任务执行的次数最频繁执行最频繁的任务优先级最高。见图2.9。 图2.9 基于任务执行频繁度的优先级分配法 任务执行频繁度Hz RMS做了一系列假设 所有任务都是周期性的 任务间不需要同步没有共享资源没有任务间数据交换等问题 CPU必须总是执行那个优先级最高且处于就绪态的任务。换句话说要使用可剥夺型调度法。 给出一系列n值表示系统中的不同任务数要使所有的任务满足硬实时条件必须使不等式2.1成立这就是RMS定理 2.1 这里Ei是任务i最长执行时间Ti是任务i的执行周期。换句话说Ei/Ti是任务i所需的CPU时间。表2.1给出n21/n - 1 的值n是系统中的任务数。对于无穷多个任务极限值是 或0.693。这就意味着基于RMS要任务 都满足硬实时条件所有有时间条件要求的任务i总的CPU利用时间应小于70请注意这是指有时间条件要求的任务系统中当然还可以有对时间没有什么要求的任务使得CPU的利用率达到100。使CPU利用率达到100并不好因为那样的话程序就没有了修改的余地也没法增加新功能了。作为系统设计的一条原则CPU利用率应小于60到70。 RMS认为最高执行率的任务具有最高的优先级但最某些情况下最高执行率的任务并非是.
本文档为【ucos 操作系统】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_348501
暂无简介~
格式:doc
大小:26KB
软件:Word
页数:10
分类:互联网
上传时间:2017-10-11
浏览量:31