【第4章】嵌入式操作系统原理

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

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

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

资源描述

1第4章嵌入式操作系统原理邹昕光哈尔滨工业大学自动化测试与控制研究所2课程内容4.1嵌入式实时操作系统概念4.2任务和任务管理4.3VxWorks任务管理4.4任务间的同步和通信4.5VxWorks任务间同步和通信4.6VxWorks其他服务4.7VxWorks对POSIX的支持34.1嵌入式实时操作系统概念嵌入式实时操作系统定义负责对计算机硬件直接控制和管理,并提供实时性保证的系统软件。现代嵌入式实时操作系统主要功能任务管理任务间同步和通信内存管理中断管理44.2任务和任务管理【任务定义】任务是最基本的独立运行单位;每个任务都赋予一定优先级,有自己一套CPU寄存器副本和栈空间,称为context。54.2任务和任务管理任务1堆栈任务2堆栈任务n堆栈StatusSPPriority...任务控制块StatusSPPriority...任务控制块StatusSPPriority...任务控制块…………SP...CPU寄存器存储器CPU64.2.1任务的状态任务在特定时间点上都处在某种状态下,例如休眠、运行、挂起(等待某一个事件发生)和被中断等;任务在代码的表现形式上是一个无限循环。TaskStatesREADY就绪态PEND阻塞态DELAY延迟态SUSPEND挂起态TaskStatesDELAY+S延迟挂起态调用taskDelay()后被其他任务挂起PEND+S阻塞挂起态等待信号量可用时被其他任务挂起PEND+T阻塞延迟态以某个超时值等待信号量可用PEND+S+T阻塞挂起延迟态以某个超时值等待信号量可用时被其他任务挂起TaskStatesTaskStatesready-pendedsemTake()/msgQReceive()ready-delayedtaskDelay()ready-suspendedtaskSuspend()[shell]tsTaskStatespended-readysemGive()/msgQSend()pended-suspendedtaskSuspend()[shell]tsTaskStatesdelayed-readyexpireddelaydelayed-suspendedtaskSuspend()[shell]tsTaskStatessuspended-readytaskResume()/taskActive()[shell]trsuspended-pendedtaskResume()[shell]trsuspended-delayedtaskResume()[shell]tr144.2.2任务调度和管理操作系统内核负责为对任务进行调度和管理;为每个任务分配CPU时间;负责任务切换工作;按照一定的策略,在就绪态任务列表中选择一个任务执行;负责任务间的同步和通信。15调度机制调度机制(SchedulingMechanism)确定任务管理器如何分时复用CPU,任务如何被分配CPU和放弃CPU,即任务切换;如何在任务就绪队列中选择下一个执行的任务。16任务调度工作原理任务调度程序分为三个部分排队器(Enqueuer):将任务放入就绪队列中;任务切换器(ContextSwitcher):保存换出任务所有CPU寄存器的内容,恢复换入任务所有CPU寄存器的内容;调度器(Dispatcher):从就绪队列中选择一个任务,之后完成从它自己到选择的进程间的Context切换。17调度策略内核调度策略选择依据如何设计调度程序为竞争的任务分配CPU,以满足外部的目标要求?是否应该基于优先级来分配CPU?是否应该基于公平的原则分配CPU?是否应该基于任务执行时间的长短来分配CPU?18调度策略非抢占式调度任何一个任务一旦被分配CPU,该任务可以运行到结束;中断可以打断任务的执行,但中断返回后CPU控制权仍回到被中断的任务。实际调度模型先来先服务FCFS最短任务优先调度基于优先级的非抢占式调度19非抢占式调度(1)时间(2)(4)(3)(5)(6)(7)低优先级任务ISR低优先级任务释放CPU使用权t0t1t2t4t3高优先级任务就绪态运行态等待态被中断态20非抢占式调度(1)时间(2)(4)(3)(5)(6)(7)低优先级任务ISR中断服务程序使高优先级任务就绪低优先级任务释放CPU使用权t0t1t2t3高优先级任务就绪态运行态等待态被中断态21先来先服务按任务请求CPU的先后次序确定获得CPU的次序;例子假设就绪任务队列中有5个任务;它们进入就绪队列的次序为P0,P1,P2,P3和P4;每个任务需要的运行时间如下表22先来先服务任务运行时间P0350P1125P2475P3250P475P0P1P2P3P403504759501200127523先来先服务任务等待时间平均等待时间1200250950950475475475125350350043210pWpWpWpWpW595512009504753500W24最短任务优先调度假设所有任务的服务时间都事先知道,一个合理的调度策略是先选择服务时间少的任务执行;P0P1P2P3P40752004508001275任务运行时间P0350P1125P2475P3250P47525最短任务优先调度任务等待时间平均等待时间02008007545043210pWpWpWpWpW3055020080075450W26基于优先级的非抢占式调度当调度器在就绪任务队列中选择任务执行时,总是选择优先级最高的任务;任务运行时间优先级P03505P11252P24753P32501P4754P0P1P2P3P40250375850925127527基于优先级的非抢占式调度任务等待时间平均等待时间850037525092543210pWpWpWpWpW48058500375250925W28调度策略抢占式调度任务在运行的过程中会被调度器打断,CPU分配给其他就绪任务;实际调度模型轮转调度RR基于优先级的抢占式调度29抢占式调度(1)时间(2)(4)(3)(5)(7)(8)低优先级任务ISR高优先级任务释放CPU使用权t0t1t2t4t3高优先级任务就绪态运行态等待态高优先级任务抢占低优先级任务(6)被中断态(9)30抢占式调度(1)时间(2)(3)(4)(5)低优先级任务ISR中断服务程序使高优先级任务就绪高优先级任务释放CPU使用权t0t1t2t3高优先级任务就绪态运行态等待态被中断态(6)31轮转调度在多个请求CPU的任务之间公平分配CPU时间。调度器按照固定的时间单位分配CPU给任务;该时间单位称为时间额度;满足下列条件时,把CPU控制权交给下一个就绪任务当前任务的时间片还没有用完就结束退出;当前任务睡眠;当前任务的时间额度用完;当前任务正在申请一个不可获得的资源。32轮转调度系统采用定时器中断;每个时间中断产生后,执行时间中断处理程序;时间中断处理程序调用调度器;调度器选择新的任务执行;原有任务进入任务就绪队列,等待下次执行。33轮转调度假设时间额度为50,忽略任务Contex切换时间,则调度结果如下图。任务运行时间P0350P1125P2475P3250P47534轮转调度P00100200P1P2P3P4P0P1P2P3P4P0T(P0)=300T(P1)=75T(P2)=425T(P3)=200T(P4)=25T(P0)=250T(P1)=25T(P2)=375T(P3)=150T(P4)=0P1P2P3T(P0)=200T(P1)=0T(P2)=325T(P3)=100T(P4)=0P0P2P3T(P0)=150T(P1)=0T(P2)=275T(P3)=50T(P4)=0P0P2P3T(P0)=100T(P1)=0T(P2)=225T(P3)=0T(P4)=0P0P2T(P0)=50T(P1)=0T(P2)=175T(P3)=0T(P4)=0P0P2T(P0)=0T(P1)=0T(P2)=125T(P3)=0T(P4)=0P2T(P0)=0T(P1)=0T(P2)=0T(P3)=0T(P4)=0P2P23004004755506507508509501050115012501275T(P0)=350T(P1)=125T(P2)=475T(P3)=250T(P4)=7535基于优先级的抢占式调度CPU总是分配给就绪队列中优先级最高的任务,该任务可以打断正在执行的优先级低的任务;被抢占的较低优先级任务进入就绪任务队列,等待下一次调度;36基于优先级的抢占式调度多级队列将相同优先级的任务放在同一个就绪任务队列中;不同优先级任务放在不同就绪任务队列中;37基于优先级的抢占式调度调度策略1总是选择高优先级任务就绪队列的任务执行,直到高优先级队列为空,转而选择次一级的高优先级队列;同一优先级的任务之间可按照RR等方式调度;优点:高优先级的任务获得CPU的机会尽可能多;缺点:低优先级的任务有可能会饿死。38基于优先级的抢占式调度调度策略2队列的优先级从1-N,依次降低;将总的CPU时间的的时间分配给优先级为j的队列;同一优先级的任务之间可按照RR等方式调度;优点:低优先级任务总能获得一些CPU资源;j239基于优先级抢占式调度的问题40基于优先级抢占式调度的问题优先级反转高优先级的任务在申请已经被低优先级任务占据的资源时,高优先级被迫进入等待态,如果有一个中优先级的任务一直在执行,则高优先级将无法执行。41优先级反转问题实例时间t0t1t2t3t4t5T3拥有T1拥有空闲就绪态等待态运行态t0:Tlow获得资源t1:Thigh抢占Tlow,Tlow进入就绪态t2:Thigh试图获得资源,进入等待态,Tlow运行t3:Tmedium抢占Tlow,Tlow进入就绪态t4:Tmedium结束,Tlow运行t5:Tlow释放资源,Thigh抢占Tlow,Tlow进入就绪态highTmediumTlowT42问题在何处?低优先级的任务被中度优先级的任务抢占,一直无法释放资源锁。这就导致高优先级任务一直等待。43优先级反转的解决方法优先级继承高优先级任务Thigh和低优先级任务Tlow优先级分别为Phigh,Plow;拥有资源R的任务Tlow被任务Thigh抢占;任务Thigh开始申请被任务Tlow占据的资源;任务Tlow的优先级由Plow变为Phigh;任务Tlow运行,就可以尽快释放资源;释放资源后,任务优先级恢复为Plow;任务Thigh抢占Tlow得到运行机会,占有资源。44优先级反转的解决方法T3拥有时间t0t1t2t3t5空闲T1拥有就绪态等待态运行态t0:Tlow获得资源t1:Thigh抢占Tlow,Tlow进入就绪态t2:Thigh试图获得资源锁,Thigh进入等待态,Tlow优先级升高,Tlow运行t3:Tlow释放资源,Thigh抢占Tlow,Tlow进入就绪态t4:Thigh结束,Tmedium运行t5:Tmedium结束,Tlow运行空闲t4highTmediumTlowT45优先级反转的解决方法天花板优先级CeilingPriority三个任务Tlow,Thigh,Tmedium和的优先级分别为Plow,Pmedium和Phigh;任务共享资源R,系统设置R的天花板优先级为所有任务的最高优先级Phigh;任务Tlow在拥有资源R后,优先级由Plow变为Phigh;任务Tlow不会被其他任务抢占,一直运行;任务Tlow释放资源R后,优先级由Phigh恢复为Plow;46优先级反转的解决方法天花板优先级CeilingPriority(续)任务Thigh抢占任务Tlow,开始执行并申请资源R。47优先级反转的解决方法T3拥有时间t0t1t2t4空闲T1拥有就绪态等待态运行态t0:Tlow获得资源,优先级最高t1:Tlow释放资源,优先级恢复为最低,Thigh抢占Tlow,Tlow进入就绪态t

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

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

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

×
保存成功