在非 RTOS 系统中是不是可以中断任务

Posted

技术标签:

【中文标题】在非 RTOS 系统中是不是可以中断任务【英文标题】:Is interruption between task is possible in Non RTOS system在非 RTOS 系统中是否可以中断任务 【发布时间】:2016-09-27 21:19:40 【问题描述】:

如果我有一个非 RTOS 单核系统,一个任务,比如 taskA,是否可以中断另一个任务,比如 taskB,其中 taskA 或 taskB 都不是中断例程?还是只能通过非 RTOS 系统上的 ISR(中断服务例程)来中断一个任务?

【问题讨论】:

【参考方案1】:

如果您的系统有多个非 ISR 线程,则意味着存在某种多任务处理 - 并且多任务处理并不是 RTOS 独有的。一项任务“中断”另一项任务称为抢占。抢占需要抢占式调度器,而 RTOS 必然是抢占式调度器,例如 Windows 和 Linux 也是如此 - 但这些都不是实时,因为调度和抢占不是确定性的。

抢占式多任务是支持抢占所必需的,但不需要实时确定性调度。然而,多任务处理不需要抢占;一些系统(尤其是 Win95 之前的 16 位版本的 Windows 和 OSX 之前的 MacOS)是协作式多任务系统,其中一个正在运行的任务必须让出 CPU 以允许其他任务运行。

在抢占式多任务系统中,调度程序在退出中断上下文时执行,并且每当任务调用可调度事件(例如提供信号量、排队消息或释放互斥锁)时执行。如果调度程序运行时任务准备就绪要运行并且调度策略要求或允许它抢占当前任务,将发生上下文切换。

因此,简而言之,一个非 ISR 线程或进程“中断”另一个线程或进程需要支持抢占的操作系统,而该操作系统不必是 RTOS。

【讨论】:

确实,在嵌入式世界中,“RTOS”(错误地)被用作“抢占式调度器”的同义词;更糟糕的是,“RTOS”总是而不是使用正确的术语。【参考方案2】:

必须将控制权交给任务调度程序才能发生上下文切换。如果中断处理程序旨在调用调度程序,则可能由于中断而发生这种情况。或者,如果某个函数调用了调度程序(例如 yield、post 或 pend),它可能会发生。

此任务调度程序可能是 RTOS 的一部分。或者,也许它是一些您不认为是 RTOS 的最小任务切换内核。无论如何,为了执行任务上下文切换,某种调度程序必须获得控制权。

【讨论】:

好简洁的答案,但它不必只是一个 RTOS 或“最小任务调度程序” - 例如,所有现代 GPOS,如 WIndows、Linux 和 OSX 都有抢占式调度程序。

以上是关于在非 RTOS 系统中是不是可以中断任务的主要内容,如果未能解决你的问题,请参考以下文章

free rtos 任务切换的理解

free rtos 任务切换的理解

认识RTOS

认识RTOS

RTOS系统

RTOS临界段的保护