考虑函数/过程,
void task_fun(void) { while(1) }如果这个进程在普通的PC OS上运行,它将永远运行。但在移动电话上,它肯定会在几分钟内使整个手机崩溃,因为HW watchdog过期并重置系统。在PC上,此进程在其规定的时间片到期后将被调度出来,并安排一个新的可运行进程运行。
我的疑问是,为什么我们不能在RTOS上应用相同的策略?如果在RTOS上实现这样的调度策略,涉及的性能限制是什么?
还有一个疑问是,我检查了我的PC操作系统( Ubuntu )和同样运行Linux内核的手机的schedule()功能。我发现它们几乎都是一样的。看门狗在哪里处理我的手机?我的假设是,调度程序是在进程运行之前启动看门狗的程序。有人能告诉我在代码的什么地方完成了吗?
发布于 2011-06-11 15:43:25
手机“崩溃”是手机设计或特定操作系统的问题,而不是一般的嵌入式OSes或RTOSes。它会“饿死”优先级较低的任务(可能包括看门狗服务),这可能就是这里正在发生的事情。
在大多数嵌入式RTOSes中,所有进程都是由系统设计人员在部署时定义的,并且设计是根据需要调度所有进程。将用户定义的代码或第三方代码放在这样的系统上可能会影响其调度方案,如您的示例所示。我建议所有这样的进程都应该以与所有其他进程相同的低优先级运行,以便循环调度程序将平等地为用户应用程序服务,而不会影响系统服务。
电话操作系统通常是RTOS,但是用户进程不应该以比系统进程更高的优先级运行。这可能是故意让这样的进程比看门狗服务运行得更高,以保护系统不受您模拟的应用程序的“不良行为”影响。
大多数RTOSes使用基于抢占式优先级的调度器(最高优先级就绪任务一直运行,直到它终止、产生或被更高优先级的任务或中断抢占)。一些还为具有相同优先级的任务调度轮询(任务运行,直到它终止、产生或消耗其时间片,并且具有相同优先级的其他任务准备运行)。
发布于 2011-06-10 14:52:27
有几种方法可以实现看门狗,但没有一种是由Linux强制实现的:
这里没有在RTOS或任何其他多任务操作系统上都做不到的事情。
发布于 2011-06-10 15:58:57
无论是在台式电脑上还是在移动电话上,Linux都不是RTOS。它的调度策略是时间驱动的。
在RTOS上,调度是由事件触发的,既可以通过ISR从环境触发,也可以通过系统调用从软件本身触发(发送消息、等待互斥...)
https://stackoverflow.com/questions/6302577
复制相似问题