请选择 进入手机版 | 继续访问电脑版
快捷导航
本帖最后由 袁绪蝶 于 2017-12-19 20:04 编辑

任务调度:结合操作系统里的进程调度,任务调度,应该是指,选择一个可用的进程(可能从多个可用进程集合中选择)到CPU上执行。

调度启动时机
在实时系统中,只有当就绪进程集合发生变动时才有调度的需要,而就绪进程集合的变动只可能发生在几种情况下:
①运行中的进程受阻或自动放弃CPU;
②系统中新建了进程;
③运行中的进程“自杀”或“被杀”;
④运行中的进程唤醒了某个线程;
⑤中断服务子程序结束时唤醒了其他进程。

实际上存在着不可调度的时隙,称为不可调度窗口:
①正在进行进程切换,不能进行调度;
②中断响应期间,不能进行调度;
③进入临界区,不能进行调度;
④DMA期间CPU已被挂起,不可能进行调度。
在实时系统里,必须努力缩小不可调度窗口。

μC/OS-Ⅱ的任务调度是由调度器(scheduler)完成的。
任务级的调度是由函数OS_Sched()完成的;中断级的调度是由OSIntExit()完成的。
µC/OS-II任务调度的执行时间是常数,与应用程序建立了多少个任务没有关系。

μC/OS-Ⅱ的任务切换
将被挂起的任务寄存器入栈
将较高优先级任务的寄存器出栈
?问题?这个栈里存放的是已经被“就绪”“睡眠”的任务吗??
猜想:联系之前的任务控制块和事件控制块,任务的转换也应该利用了这两者之间的关系进行通信。


OS_TASK_SW是在uC/OS-II从低优先级任务切换到最高优先级任务时被调用的


上锁和开锁
OSSchedlock() 和OSSchedUnlock()
给调度器上锁函数OSSchedlock(),用于禁止任务调度,直到任务完成后调用给调度器开锁函数OSSchedUnlock()为止。
这期间中断是可以被识别的。 (这句话的意思是否是:上锁期间,可以执行中断?)
必须成对使用。
变量OSLockNesting跟踪OSSchedLock()函数被调用的次数。μC/OS-Ⅱ允许嵌套深度达255层。





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
Connecting & Messaging from Any.

共 0 个关于本帖的回复 最后回复于 2017-12-19 17:02

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

推荐板块

精彩推荐

热门排行

明星用户

手机版|小黑屋|AnyMSG ( ©AnyMSG 2009 - 2017 · ICP备16009991号 )

GMT+8, 2019-4-25 22:52