考虑功能/过程,
void task_fun(void)
{
while(1)
}
如果这个过程是在普通的PC操作系统上运行的话,它会很乐意永远运行。但是在手机上,随着硬件监视器到期并重置系统,它肯定会在几分钟内崩溃整个手机。
在PC上,此过程在其到期后的规定时间片将被安排出来,并且将安排新的可运行过程运行。
我怀疑为什么我们不能在RTOS上应用相同的策略?如果在RTOS上实施这样的调度策略,所涉及的性能限制是什么?
还有一个疑问是我检查了我的PC OS(Ubuntu)和我的手机schedule()
的功能,它也运行Linux内核。我发现它们几乎都是一样的。看门狗在我手机上的处理方式在哪里?我的假设是调度程序是在让进程运行之前启动监视程序的人。有人能指出我在代码中的位置吗?
答案 0 :(得分:1)
可以通过多种方式实现监视程序,其中没有一种是由Linux强加的:
这里没有任何内容无法在RTOS或任何其他多任务操作系统上完成。
答案 1 :(得分:1)
Linux,在台式计算机或移动电话上,不是RTOS。其调度政策是时间驱动的。
在RTOS上,调度由事件触发,无论是从环境到ISR,还是从软件本身通过系统调用(发送消息,等待互斥,......)
答案 2 :(得分:1)
手机“崩溃”是手机设计或特定操作系统的问题,而不是嵌入式操作系统或RTOS。它会“挨饿”低优先级任务(可能包括看门狗服务),这可能就是这里发生的事情。
在大多数嵌入式RTOS中,系统设计人员在部署时定义所有进程,并且设计是根据需要调度所有进程。在这样的系统上放置用户定义或第三方代码可能会损害其调度方案,如您的示例所示。我建议所有这些进程应该以与所有其他进程相同的低优先级运行,以便循环调度程序能够平等地为用户应用程序提供服务,而不会影响系统服务。
手机操作系统通常是RTOS,但用户进程不应以系统处理的更高优先级运行。可能有意的是,此类进程的运行速度高于看门狗服务,以保护系统免受您模拟的“行为不当”应用程序的影响。
大多数RTOS使用基于优先级的优先级调度程序(最高优先级就绪任务一直运行,直到它终止,产生或被更高优先级的任务或中断抢占)。有些还为相同优先级的任务安排循环(任务运行直到它终止,产生或消耗其时间片,并且其他具有相同优先级的任务已准备好运行)。
答案 3 :(得分:0)
在正常的操作系统中,我们有两种类型的进程。用户流程&内核进程。内核进程有时间限制。但是,用户进程没有时间限制。
在RTOS中,所有进程都是内核进程&因此应严格遵守时间限制。所有过程/任务(可以互换使用)都基于优先级,时间约束对于系统正确运行很重要。
因此,如果您的代码 void task_fun(void){while(1)} 永远运行,其他优先级较高的任务将会挨饿。因此,看门狗会使系统崩溃,以指定开发人员不满足其他任务的时间限制。
例如,GSM Scheduler需要每隔4.6ms运行一次,如果您的任务运行时间更长,则无法满足GSM Scheduler任务的时间限制。因此系统必须重新启动,因为它的目的被打败了。
希望这会有所帮助:)