分享

VxWorks任务调度与中断 | 学步园

 立志德美 2020-06-20

最近在看有关任务调度和中断的文章,主要的话题或者讨论点可以归为如下几个递进的问题:
(1)引发任务调度的情况、原因
(2)何为抢占调度?抢占调度是否就指中断引发的调度?
(3)关中断是否禁止任务调度?
针对上述问题,本文简单说一下个人的理解,有不妥之处还请大家多指点。
下面就以VxWorks操作系统为例,讨论任务调度和中断的关系。

问题(1)引发任务调度的情况、原因

首先,看一下VxWorks任务调度时机的两种情况:
1) 同步任务切换
    引起的原因是当前运行的任务可能执行了如下下列操作:
    ①进行阻塞、延迟、挂起的调用
        如,调用 taskDelay、taskSuspend、semTake等。
    ②使更高优先级任务就绪而发生优先级抢占
        如,通过semGive释放信号量,导致更高优先级的任务就绪。
    ③降低自身优先级或者退出
        如,任务可通过taskPrioritySet改变自身优先级;通过exit终止自身执行等。

2) 异步任务切换
    通常由中断服务使高优先级任务就绪引起(如)
由上面的描述可知,中断是导致任务可能发生调度的一种情况,而且一般被归为异步任务切换。
而除了同步任务切换和异步任务切换之外,可能还有提及到抢占调度和非抢占调度,进而又联系
到中断。

问题(2)何为抢占调度?抢占调度是否就指中断引发的调度?

个人认为,VxWorks的抢占调度就是指,由于有高优先级的任务处于就绪状态,而导致系统需要进行任务切换。
另外,我们知道VxWorks系统(wind内核)采用的调度策略为:
          默认采用基于优先级的抢占式调度;同时,还使用轮转调度。
从这点也能说明,所谓抢占式调度主要是基于任务优先级而言的,而不是针对中断(或者异步任务切换)。
如果非要额外再给抢占式调度下个定义或者归类的话(虽然个人觉得没必要,理解即可),应该包括:
1)异步任务切换(中断引发)
2)同步任务切换中的第②类,即由于当前运行任务的某种操作,使更高优先级任务就绪而发生优先级抢占
除了上述两种情况之外的其他任务切换,都可以认为是当前运行的任务主动放弃CPU使用权,而非被抢占。
因此,中断引发的任务调度,只是抢占调度中的一种情况而已。

问题(3)关中断是否禁止任务调度?

综合上面的描述可知,中断只是引发任务切换的一种情况,因此,关中断并不意味着禁止任务调度。
但是,关中断确实可以用来保护代码临界区(防止任务切换),只不过前提条件是,临界区代码本身不能
包含任何可能导致当前运行任务变为阻塞、延时、挂起等状态的操作。

http://www./Blog/Detail_RD.Blog_imjacob_16830.html 点击打开链接
引用上文中一段关中断的描述:
关中断之后,任何外部事件都不能打扰处理机连续执行临界区程序。如果临界区程序本身并不包含使它的进程
转变为封锁状态的因素,那么这种方法就能保证临界区作为一个整体执行。这种方法的优点是简单、可靠,但是
它也有一定的局限性和若干不足之处。
(1) 它不能用于多处理机系统。其原因是:由于该系统中的多个处理机都有其各自的中断开关,因此一个处理机
     并不能阻止在其它处理机上运行的进程进入同类临界区。
(2) 在临界区中如果包含有使执行它的进程有可能进入封锁状态的因素,则也不能使用这种方法。因为在该进程
     进入封锁状态后,系统将调度另一进程使用处理机,如果需要,该进程也可以执行临界区程序,不会受到任
     何阻拦,所以在这种情况下,开、关中断不能实施临界区互斥。
(3) 如果临界区比较长,则本方法会降低中断响应速度。
(4) 这是一把锁处理各类临界区,不必要地扩大了互斥范围。关中断是实现互斥的一种粗暴的方式。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多