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

上传人:今*** 文档编号:107216945 上传时间:2019-10-18 格式:PPT 页数:271 大小:3.61MB
返回 下载 相关 举报
【第4章】嵌入式操作系统原理概要_第1页
第1页 / 共271页
【第4章】嵌入式操作系统原理概要_第2页
第2页 / 共271页
【第4章】嵌入式操作系统原理概要_第3页
第3页 / 共271页
【第4章】嵌入式操作系统原理概要_第4页
第4页 / 共271页
【第4章】嵌入式操作系统原理概要_第5页
第5页 / 共271页
点击查看更多>>
资源描述

《【第4章】嵌入式操作系统原理概要》由会员分享,可在线阅读,更多相关《【第4章】嵌入式操作系统原理概要(271页珍藏版)》请在金锄头文库上搜索。

1、1,第4章嵌入式操作系统原理,邹昕光 哈尔滨工业大学自动化测试与控制研究所,2,课程内容,4.1 嵌入式实时操作系统概念 4.2 任务和任务管理 4.3 VxWorks任务管理 4.4 任务间的同步和通信 4.5 VxWorks任务间同步和通信 4.6 VxWorks其他服务 4.7 VxWorks对POSIX的支持,3,4.1嵌入式实时操作系统概念,嵌入式实时操作系统定义 负责对计算机硬件直接控制和管理,并提供实时性保证的系统软件。 现代嵌入式实时操作系统主要功能 任务管理 任务间同步和通信 内存管理 中断管理,4,4.2 任务和任务管理,【任务定义】 任务是最基本的独立运行单位; 每个任务

2、都赋予一定优先级,有自己一套CPU寄存器副本和栈空间,称为context。,5,4.2 任务和任务管理,6,4.2.1 任务的状态,任务在特定时间点上都处在某种状态下,例如休眠、运行、挂起(等待某一个事件发生)和被中断等; 任务在代码的表现形式上是一个无限循环。,Task States,READY 就绪态 PEND 阻塞态 DELAY 延迟态 SUSPEND 挂起态,Task States,DELAY+S 延迟挂起态 调用taskDelay()后被其他任务挂起 PEND+S 阻塞挂起态 等待信号量可用时被其他任务挂起 PEND+T 阻塞延迟态 以某个超时值等待信号量可用 PEND+S+T 阻塞

3、挂起延迟态 以某个超时值等待信号量可用时被其他任务挂起,Task States,Task States,ready - pended semTake()/msgQReceive() ready - delayed taskDelay() ready -suspended taskSuspend() shell ts,Task States,pended -ready semGive()/msgQSend() pended -suspended taskSuspend() shell ts,Task States,delayed - ready expired delay delayed -su

4、spended taskSuspend() shell ts,Task States,suspended - ready taskResume()/taskActive() shell tr suspended - pended taskResume() shell tr suspended - delayed taskResume() shell tr,14,4.2.2 任务调度和管理,操作系统内核负责为对任务进行调度和管理; 为每个任务分配CPU时间; 负责任务切换工作; 按照一定的策略,在就绪态任务列表中选择一个任务执行; 负责任务间的同步和通信。,15,调度机制,调度机制 (Sched

5、uling Mechanism) 确定任务管理器如何分时复用CPU,任务如何被分配CPU和放弃CPU,即任务切换;如何在任务就绪队列中选择下一个执行的任务。,16,任务调度工作原理,任务调度程序分为三个部分 排队器 (Enqueuer):将任务放入就绪队列中; 任务切换器 (Context Switcher):保存换出任务所有CPU寄存器的内容,恢复换入任务所有CPU寄存器的内容; 调度器 (Dispatcher):从就绪队列中选择一个任务,之后完成从它自己到选择的进程间的Context切换。,17,调度策略,内核调度策略选择依据 如何设计调度程序为竞争的任务分配CPU,以满足外部的目标要求?

6、 是否应该基于优先级来分配CPU? 是否应该基于公平的原则分配CPU? 是否应该基于任务执行时间的长短来分配CPU?,18,调度策略,非抢占式调度 任何一个任务一旦被分配CPU,该任务可以运行到结束;中断可以打断任务的执行,但中断返回后CPU控制权仍回到被中断的任务。 实际调度模型 先来先服务 FCFS 最短任务优先调度 基于优先级的非抢占式调度,19,非抢占式调度,20,非抢占式调度,21,先来先服务,按任务请求CPU的先后次序确定获得CPU的次序; 例子 假设就绪任务队列中有5个任务; 它们进入就绪队列的次序为P0, P1, P2, P3和P4; 每个任务需要的运行时间如下表,22,先来先

7、服务,23,先来先服务,任务等待时间 平均等待时间,24,最短任务优先调度,假设所有任务的服务时间都事先知道,一个合理的调度策略是先选择服务时间少的任务执行;,25,最短任务优先调度,任务等待时间 平均等待时间,26,基于优先级的非抢占式调度,当调度器在就绪任务队列中选择任务执行时,总是选择优先级最高的任务;,27,基于优先级的非抢占式调度,任务等待时间 平均等待时间,28,调度策略,抢占式调度 任务在运行的过程中会被调度器打断,CPU分配给其他就绪任务; 实际调度模型 轮转调度 RR 基于优先级的抢占式调度,29,抢占式调度,30,抢占式调度,31,轮转调度,在多个请求CPU的任务之间公平分

8、配CPU时间。 调度器按照固定的时间单位分配CPU给任务; 该时间单位称为时间额度; 满足下列条件时,把CPU控制权交给下一个就绪任务 当前任务的时间片还没有用完就结束退出; 当前任务睡眠; 当前任务的时间额度用完; 当前任务正在申请一个不可获得的资源。,32,轮转调度,系统采用定时器中断; 每个时间中断产生后,执行时间中断处理程序; 时间中断处理程序调用调度器; 调度器选择新的任务执行;原有任务进入任务就绪队列,等待下次执行。,33,轮转调度,假设时间额度为50,忽略任务Contex切换时间,则调度结果如下图。,34,轮转调度,35,基于优先级的抢占式调度,CPU总是分配给就绪队列中优先级最

9、高的任务,该任务可以打断正在执行的优先级低的任务;被抢占的较低优先级任务进入就绪任务队列,等待下一次调度;,36,基于优先级的抢占式调度,多级队列 将相同优先级的任务放在同一个就绪任务队列中;不同优先级任务放在不同就绪任务队列中;,37,基于优先级的抢占式调度,调度策略1 总是选择高优先级任务就绪队列的任务执行,直到高优先级队列为空,转而选择次一级的高优先级队列; 同一优先级的任务之间可按照RR等方式调度; 优点:高优先级的任务获得CPU的机会尽可能多; 缺点:低优先级的任务有可能会饿死。,38,基于优先级的抢占式调度,调度策略2 队列的优先级从1-N,依次降低; 将总的CPU时间的 的时间分

10、配给优先级为j的队列; 同一优先级的任务之间可按照RR等方式调度; 优点:低优先级任务总能获得一些CPU资源;,39,基于优先级抢占式调度的问题,40,基于优先级抢占式调度的问题,优先级反转 高优先级的任务在申请已经被低优先级任务占据的资源时,高优先级被迫进入等待态,如果有一个中优先级的任务一直在执行,则高优先级将无法执行。,41,优先级反转问题实例,42,问题在何处?,低优先级的任务被中度优先级的任务抢占,一直无法释放资源锁。 这就导致高优先级任务一直等待。,43,优先级反转的解决方法,优先级继承 高优先级任务Thigh和低优先级任务Tlow优先级分别为Phigh,Plow; 拥有资源R的任

11、务Tlow被任务Thigh抢占; 任务Thigh开始申请被任务Tlow占据的资源; 任务Tlow的优先级由Plow变为Phigh ; 任务Tlow运行,就可以尽快释放资源; 释放资源后,任务优先级恢复为Plow ; 任务Thigh抢占Tlow得到运行机会,占有资源。,44,优先级反转的解决方法,45,优先级反转的解决方法,天花板优先级 Ceiling Priority 三个任务Tlow ,Thigh, Tmedium和的优先级分别为 Plow ,Pmedium和Phigh ; 任务共享资源R,系统设置R的天花板优先级为所有任务的最高优先级Phigh; 任务Tlow在拥有资源R后,优先级由Plo

12、w变为 Phigh ; 任务Tlow不会被其他任务抢占,一直运行; 任务Tlow释放资源R后,优先级由Phigh恢复为Plow;,46,优先级反转的解决方法,天花板优先级 Ceiling Priority (续) 任务Thigh抢占任务Tlow,开始执行并申请资源R。,47,优先级反转的解决方法,48,关于调度的一些问题,【Q】内核如何知道一个任务将从就绪态进入等待态或者从等待态进入就绪态? 【A】内核提供一套申请系统资源的API。 当任务需要系统资源时就需要调用这些API; 这时内核会检查资源是否可用;如果不可用任务就由就绪态进入等待态; 当某个资源变为可用,内核会检查是否有等待该资源的任务

13、,如果有则将任务由等待态专为就绪态。,49,关于调度的一些问题,【Q】如果所有任务都处于等待态系统会怎样? 【A】这时内核不能让任何一个任务运行; 内核不断检查是否有资源可用; 如果总是没有资源可用,则一般就是程序设计的问题了(可能出现了死锁问题); 程序员应该保证一个任务要等待的资源迟早能等到。,50,关于调度的一些问题,【Q】对于两个相同优先级的就绪态任务,内核如何调度? 【A】不同系统解决的办法各不相同; 内核可以采用time slice round robin (时间片轮转)的调度方式,让两个任务轮流分享CPU。,51,任务调度案例,油箱油量监控系统 油量监视任务:对多个油箱的油量依次

14、进行测量和计算。计算量较大; 用户控制任务:用户按下对应某个油箱的按钮,显示当前油箱的油量。要求有很好的响应速度。,52,任务调度案例,void UserControlTask(void) while (TRUE) ! Wait Signal X buttonID = ! ID of button pressed PrintInfo(tankDatabuttonID); void TanksMonitoringTask(void) while (TRUE) for each (tank in Tanks) ! Read the oil level in tank ! Do some compl

15、ex calculation ! Store the value ,void main(void) ! Initialize Signal X; TaskSpawn(UserControlTask, HighPriority); TaskSpawn(TanksMonitoringTask, LowPriority); ,void interrupt ButtonPush() ! Take care hardware ! Set Signal X; ,53,任务调度案例,5.2 VxWorks任务的管理,每个任务都有自己的上下文(context),包括CPU的执行环境和系统执行时需要的资源。 V

16、xWorks的任务context保存在任务的TCB (Task Control Block)中。 TCB是一个内核对象,由操作系统内核管理。,任务的context,program counter the CPU registers and (optionally) floating-point registers I/O assignments for standard input, output, and error a delay timer a time-slice timer kernel control structures signal handlers debugging and performance monitoring values,4.3 VxWorks的任务管理,Wind内核的缺省任务调度算法是基于优先级的抢占式调度。 时间片轮转调度(Round Robin)为可选调度算法。 Wind内核有256级优先级,编号分别为0到25

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号