如果我有一个非RTOS单核系统,可以执行一项任务,比如taskA中断另一个任务,比如taskB,其中taskA或taskB都不是中断例程吗?或者只能通过非RTOS系统上的ISR(中断服务程序)中断一个任务?
答案 0 :(得分:4)
对于您的系统有多个非ISR线程意味着存在某种多任务 - 并且多任务不是RTOS独有的。一个“中断”另一个任务的任务称为 preemption 。抢占需要抢占式调度程序,而RTOS必然是先发制人的调度程序,例如Windows和Linux - 但这些不是实时,因为调度和先发制人不是确定性的。
抢占式多任务是支持抢占的必要条件,但不需要实时确定性调度。然而抢占并不是多任务处理的必要条件;某些系统(尤其是Win95之前的16位Windows版本和OSX之前的MacOS)是协作式多任务系统,其中正在运行的任务必须产生CPU以允许其他任务运行。
在抢占式多任务系统中,调度程序在退出中断上下文时执行,并且每当任务调用可调度事件时(例如给出信号量,排队消息或释放互斥锁。如果调度程序运行任务已准备就绪)要运行并且调度策略需要或允许它抢占当前任务,将发生上下文切换。
因此,简而言之,一个非ISR线程或进程“中断”另一个需要一个支持抢占的操作系统,它不一定是RTOS。
答案 1 :(得分:3)
必须对任务调度程序进行控制才能进行上下文切换。如果中断处理程序被设计为调用调度程序,则可能由于中断而发生。或者,如果该函数调用调度程序,它可能会因某些函数调用(例如yield,post或pend)而发生。
此任务调度程序可以是RTOS的一部分。或者它可能是一些你不认为是RTOS的最小任务切换内核。无论如何,某种调度程序必须获得控制才能执行任务上下文切换。