嵌入式操作系统复习

单等待队列

  • 资源对应的事件发生时,内核需要扫描整个等待队列,搜索等待该资源的任务,并按照一定的策略选取任务,把任务的任务控制块放置到就绪队列。
  • 如果系统的资源和任务比较多,搜索等待该资源的任务所需要的时间就比较长,会影响整个系统的实时性能。

在这里插入图片描述

多等待队列

  • 资源对应的事件发生时,能够在较短的时间内确立等待该资源的任务等待队列。
    在这里插入图片描述

基于位图的优先级调度算法【大题】

对于就绪任务,如果采用上述队列方式(单/多等待队列)进行管理,在基于优先级的调度处理中,要获得当前具有最高优先级的就绪任务:

  • 方式一:任务就绪时,把就绪任务的任务控制块放在就绪队列的末尾。
    调度程序需要从就绪队列的头部到尾部进行一次遍历,才能获得就绪队列中具有最高优先级的任务;
  • 方式二:就绪队列按照优先级从高到低的顺序排列。
    新的就绪任务到达时,需要插入到就绪队列的合适位置,确保就绪队列保持优先级从高到低排列的顺序性。

在这两种处理方式中,所花费的时间与任务数量有密切的关系,具有不确定性。
为提高实时内核的确定性,可采用一种被称为优先级位图的就绪任务处理算法。

调度用来确定多任务环境下任务执行的顺序和在获得CPU资源后能够执行的时间长度。

数据结构

要使用该算法,首先需要维护四个数据结构:

  • 优先级就绪组 OSRdyGrp,原型:char OSRdyGrp
  • 优先级就绪表 OSRdyTbl,原型:char OSRdyTbl[8]
  • 优先级映射表 OSMapTbl,原型:char OSMapTbl[8]
  • 优先级判定表 OSUnMapTbl,原型:char OSUnMapTbl[256]

其中,OSRdyGrpOSRdyTbl的值是随任务调度动态发生变化的。OSMapTblOSUnMapTbl是固定的值,仅用来做转换操作

OSRdyGrp 和 OSRdyTbl

二者关系见图:
在这里插入图片描述

  • OSRdyGrp用来表示OSRdyTbl当中的行是否存在就绪任务
  • OSRdyTbl一共8行8列,共64位,可以表示64种不同的优先级(0-63)。其中63为最低优先级,表示空闲任务
  • 同时上图还表现出以下事实:任务的优先级中仅有6位是有效的(0-63中第6、7位为0当然无效),同时高三位表示Y即行,低三位表示X即列。将OSRdyTbl中对应行列置1,表示该优先级的任务已就绪,反之,也可以通过Y*8(或Y<<3) + X,得到对应位置的优先级
OSMapTbl

OSMapTbl

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
1.嵌入式实时操作系统的特点与常用的几种嵌入式操作系统。 实时性,可裁剪性。 ucos-Ⅱ RTLinux ARM-Linux KURT TimeSys Linux Mach 商业常见 VxWorks QNX pSOS Windows CE 2.掌握uC/OS-Ⅱ操作系统任务的存储结构与任务控制块主要成员变量的作用、任务的程序结构、任务的调度过程、任务状态的转换过程、任务的创建过程。任务级的切换与断级的切换。 一.任务的存储结构P74 前一个任务控制块的Ptr 后一个任务控制块的Ptr 指向任务的Ptr 指向堆栈的Ptr 任务优先级别 ............................ 任务的代码: void mytask(void * ) {......... For( ; ; ) {......} } 任务的堆栈: ....................... 系统在运行一个任务是,先按优先级找到任务控制块,在任务堆栈找到任务代码的指针。 任务控制块是系统管理任务的依据。 任务控制块-------保存任务的属性 任务的代码-------任务的执行部分 任务的堆栈-------保存任务的工作环境 二.任务控制块主要成员变量的作用P78 不同任务 TCB成员变量个数不是固定的。 其 OSTCBStat 用来存放任务当前状态。 其 OSTCBDly 用来存放任务等待时限(节拍数)。 其 OSTCBPrio 用来存放任务优先级。 所有任务控制块分为2条链表:空闲任务块链表和任务块链表。 空闲任务块是uC/OS-Ⅱ的全局数据结构 OSInit()创建空闲任务控制块链表的步骤:1先在RAM建立一个OS_TCB结构类型的OSTCBTb1[]使数组每个元素都是一个任务控制块,然后利用OS_TCB结构的OSTCBTNext和OSTCBPrev连起来构成一个链表。 为了加快对任务控制块的访问速度:除了任务控制块链表创建成双向链表外在uC/OS-Ⅱ的uCOS-Ⅱ.H还定义了一个OS_TCB*类型的数组OSTCBTb1[]专门用来存放指向各任务控制块的指针。 删除一个任务的实质:把任务的控制块从任务控制块链表删除,并把它归还给任务控制块链表。但是任务的代码还在内存没被删除。 任务的程序结构 任务的调度过程 在就绪任务寻找优先级最高的就绪任务置为运行态,然后当前正在运行的任务,从而运行刚刚那个置为运行态的任务 若 OSLockNesting当前的值不为0则 禁止调度 任务状态的转换过程 任务的创建过程 先检测任务优先级是否合法 然后检测该优先级是否被占用 然后保留该优先级 然后初始化任务堆栈 然后获得任务控制块并初始化 然后任务计数器+1 最后调度 否则放弃任务 任务级的切换与断级的切换 OSIntCtxSw() -- 断级任务切换函数与OSCtxSw() -- 任务级切换函数的区别: OSIntCtxSw()与OSCtxSw()的后半部分相同,而OSIntCtxSw()缺少的断点保护,则在断子程序完成。但是两者都完成两任务的切换: OSCtxSw() 完成两个不同任务间的切换; OSIntCtxSw()则是在一定条件下,在断结束后,原被断的程序与更高优先级任务之间的切换。 掌握五种任务的通信与同步的方法。对应的事件控制块与信号量集标志组的结构。并比较这五种任务的通信与同步的方法在请求、发送过程的各自特点。 C/OS-Ⅱ操作系统初始化所须完成的的五件事:初始化几个重要的全局变量、数组OSTCBPrioTbl[ ]、就绪表、五个链表(空任务控制块、空事件控制块、空队列控制块、空信号量集标志组、空内存控制块)、创建空闲任务。或有条件创建统计任务断及断服务程序。定时断服务及时钟节拍服务函数OSTimTick()的作用 CPU相应断的条件:1至少有一个断源向CPU 发出信号 2系统允许信号且未对此信号屏蔽。 钟节拍服务函数OSTimTick()的作用:1把用来记录时间进程的计数器OSTime+1 2遍历任务控制块链表所有任务控制块,吧各个任务控制块用来存放任务延时的OSTCBDly-1,并使该项为0,同时又不是被挂起的任务进入就绪状态。 6.掌握创建、请求与发送一个信号量与消息邮箱的程序流程。 7.熟练应用信号量与消息邮箱实现任务的通信与同步的程序设计。一个应用程序的基本框架。 8.了解C/OS-Ⅱ移植的一般原则。 C/OS-Ⅱ移植的条件:1在程序可以开关断2处理器支持断并能产生定时断3处理器支持断且容纳一定数据的硬件堆栈4处理器有将堆栈指针和其他CPU存储器存储读取到堆栈的指令。 9.了解一个完整的基于C/OS-Ⅱ内核的操作系统的组成。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tanleiDD

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值