在非 RTOS 系统中任务之间是否可能中断
Is interruption between task is possible in Non RTOS system
如果我有一个非 RTOS 单核系统,一个任务,比如 taskA,是否可以中断另一个任务,比如 taskB,其中 taskA 或 taskB 都不是中断例程?还是只能通过非 RTOS 系统上的 ISR(中断服务例程)才能中断一项任务?
必须将控制权交给任务计划程序才能进行上下文切换。如果中断处理程序设计为调用调度程序,则可能会因中断而发生这种情况。或者,如果该函数调用调度程序,则它可能由于某些函数调用(例如 yield、post 或 pend)而发生。
此任务计划程序可能是 RTOS 的一部分。或者它可能是一些您不认为是 RTOS 的最小任务切换内核。无论如何,某种调度程序必须获得控制才能执行任务上下文切换。
您的系统拥有多个非 ISR 线程意味着存在某种多任务处理 - 并且多任务处理并非 RTOS 所独有。一项任务 "interrupting" 另一项任务称为 抢占 。抢占需要 抢占式调度器 ,而 RTOS 必然是抢占式调度器,例如 Windows 和 Linux 也是如此 - 但是这些不是实时,因为调度和抢占是不确定的。
抢占式多任务支持抢占是必要的,但实时确定性调度不是必需的。然而,抢占并不是多任务所必需的;某些系统(特别是 Win95 之前的 Windows 的 16 位版本,以及 OSX 之前的 MacOS)是协作式多任务系统,其中 运行ning 任务必须产生 CPU 允许其他任务 运行.
在抢占式多任务系统中,调度程序在从中断上下文退出时以及任务调用可调度事件(例如发出信号量、排队消息或释放互斥量)时执行。如果调度程序 运行如果任务准备就绪 运行 并且调度策略要求或允许它抢占当前任务,则会发生上下文切换。
所以简而言之,一个非 ISR 线程或进程 "interrupting" 另一个需要一个支持抢占的 OS,它不需要是一个 RTOS。
如果我有一个非 RTOS 单核系统,一个任务,比如 taskA,是否可以中断另一个任务,比如 taskB,其中 taskA 或 taskB 都不是中断例程?还是只能通过非 RTOS 系统上的 ISR(中断服务例程)才能中断一项任务?
必须将控制权交给任务计划程序才能进行上下文切换。如果中断处理程序设计为调用调度程序,则可能会因中断而发生这种情况。或者,如果该函数调用调度程序,则它可能由于某些函数调用(例如 yield、post 或 pend)而发生。
此任务计划程序可能是 RTOS 的一部分。或者它可能是一些您不认为是 RTOS 的最小任务切换内核。无论如何,某种调度程序必须获得控制才能执行任务上下文切换。
您的系统拥有多个非 ISR 线程意味着存在某种多任务处理 - 并且多任务处理并非 RTOS 所独有。一项任务 "interrupting" 另一项任务称为 抢占 。抢占需要 抢占式调度器 ,而 RTOS 必然是抢占式调度器,例如 Windows 和 Linux 也是如此 - 但是这些不是实时,因为调度和抢占是不确定的。
抢占式多任务支持抢占是必要的,但实时确定性调度不是必需的。然而,抢占并不是多任务所必需的;某些系统(特别是 Win95 之前的 Windows 的 16 位版本,以及 OSX 之前的 MacOS)是协作式多任务系统,其中 运行ning 任务必须产生 CPU 允许其他任务 运行.
在抢占式多任务系统中,调度程序在从中断上下文退出时以及任务调用可调度事件(例如发出信号量、排队消息或释放互斥量)时执行。如果调度程序 运行如果任务准备就绪 运行 并且调度策略要求或允许它抢占当前任务,则会发生上下文切换。
所以简而言之,一个非 ISR 线程或进程 "interrupting" 另一个需要一个支持抢占的 OS,它不需要是一个 RTOS。