您的位置:首页 > 其它

进程调度的一些概念---实时调度、时间片、优先级,优先级反转问题

2013-06-06 17:05 309 查看


进程调度的一些概念---实时调度、时间片、优先级,优先级反转问题

今天中午跟一兄弟讨论其进程调度,有人告诉他:如果是实时调度的话,就不能时间片轮转了。炸一听,觉得不妥。

我觉得,实时调度讲的是对事件的相应要快,可以在规定的时间内完成一定的操作;而时间片的概念,是用来控制一个进程可以占用cpu的周期长短。时间片轮转和基于优先级的抢占,是两种不同的调度策略。

查了点资料发现,目前vxworks系统,已经支持同优先级的task基于时间片轮转调度,不同优先级的task基于优先级抢占。

引用如下:

任务调度 VxWorks有两种任务调度策略,优先级抢先调度和时间片轮转调度。

这两种调度 策略都是系统级的,与POSIX进程级的调度策略不同。即整个系统里要么是优先 级抢先调度,要么是时间片轮转调度;而POSIX标准下可以每个进程使用自己的 调度策略。系统共有256个优先级。

优先级抢先调度指的是一个优先级较低的任务正在执行中,另一个优先级较高的任务进入就绪状态,则马上进行处理器抢先,执行高优先级任务。直到高优先级释放处理器(完成、挂起、阻塞…)才继续执行低优先级任务。优先级抢先调度可以保证实时系统的迅速响应特性,但是也带来一个问题:当系统中存在几个相同优先级的任务时,就会使单一任务独占处理器直至完成。所以加入了基于优先级的时间片轮转调度方式。在不同优先级的任务间以抢先方式调度,相同优先级的任务则以时间片进行轮转。

VxWorks是指令级的抢先,即调度发生在当前指令结束时。

自己添加:目前Linux新的调度算法,基于时钟中断,进行调度更新RBTree,调度的粒度要比时间片小,比指令级如何呢???

优先级反转问题:

任务t3获取某种资源S后被高优先级任务t1抢先,在t1执行中也需要申请资源S,于是t1被阻塞,t3继续执行,但t3迅速被另一较高优先级任务t2所抢先,于是t1就必须无限期地等待t2完成,然后执行t3直至t3释放资源S。

为了解决这个问题,VxWorks引入一种称为优先级继承(Priority Inheritance)的方法。当高优先级任务t1因为t3占用的资源而被阻塞时,t3就具有与t1相同的临时优先级,以保证它不会被t2所抢先,直至t3释放资源后恢复原有的优先级。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐