OS调度和RTOS调度之间的区别

考虑function/过程,

void task_fun(void) { while(1) }如果这个进程是在一个普通的PC上运行的,它将会永远快乐地运行。 但是在手机上,随着硬件看门狗过期并重置系统,肯定会在几分钟内使整个手机崩溃。 在PC上,这个过程在到达规定的时间片之后将被调度,并且将运行一个新的可运行的过程。

我怀疑为什么我们不能在RTOS上应用相同的策略? 如果在RTOS上实施这样的调度策略,涉及的性能限制是什么?

还有一个疑问是,我检查了我的PC操作系统(Ubuntu)和运行Linux Kernel的手机的schedule()函数。 我发现他们两个几乎是一样的。 看门狗在我的手机上完成的交易在哪里? 我的假设是调度程序是在让进程运行之前启动看门狗的人。 有人能指出我的代码在哪里吗?

电话“崩溃”是电话设计或特定操作系统的问题,而不是一般的嵌入式操作系统或RTOS。 它会'饿死'较低优先级的任务(可能包括看门狗服务),这可能是这里发生的事情。

在大多数嵌入式实时操作系统中,所有进程都是由系统设计者在部署时定义的,而设计则是根据需要对所有进程进行调度。 将用户定义或第三方代码放在这样一个系统上可能会危及其调度方案,就像你的例子。 我建议所有这些进程应该和其他所有进程的优先级一样低,以便循环调度程序能够在不损害系统服务的前提下平等地为用户应用程序提供服务。

电话操作系统通常是RTOS,但是用户进程不应该以比系统进程更高的优先级运行。 可能有意识的是,这些进程比看门狗服务运行得更高,以保护系统免受您模拟的“行为不端”应用程序的侵害。

大多数RTOS使用先进的基于优先级的调度器(最高优先级就绪任务运行,直到它终止,产出或被更高优先级的任务或中断抢占)。 有些还为相同优先级的任务安排循环(任务运行直到终止,产生或消耗其时间片,并且具有相同优先级的其他任务已准备好运行)。

看门狗可以通过几种方式实现,Linux中没有任何一种方式:

  • 进程或线程定期运行以测试正在执行的重要操作。 如果没有,则采取纠正措施,如重新启动机器,或重置一个麻烦的组件。
  • 进程或线程连续运行以吸收额外的CPU时间并重置计时器。 如果任务无法运行,则计时器到期并采取纠正措施。
  • 如果没有定期按摩,硬件组件会重置系统; 即硬件定时器到期。

在RTOS或任何其他多任务操作系统上都无法做到这一点。

Linux,在台式电脑或手机上,不是RTOS。 它的调度策略是时间驱动的。

在RTOS上,调度是由事件触发的,无论是从环境到ISR,还是从软件本身通过系统调用(发送消息,等待互斥,…)

在一个正常的操作系统中,我们有两种类型的进程。 用户进程和内核进程。 内核进程有时间限制。但是,用户进程没有时间限制。

在RTOS中,所有进程都是内核进程,因此应该严格遵守时间限制。 所有过程/任务(可互换使用)都基于优先级,时间限制对于系统正确运行非常重要。

所以,如果你的代码void task_fun(void){while(1)}永远运行,其他更高优先级的任务将会挨饿。 因此,看门狗会使系统崩溃,指定开发人员不符合其他任务的时间限制。

例如,GSM调度器需要每4.6ms运行一次,如果你的任务运行时间更长,GSM调度器任务的时间限制就不能满足。 所以系统必须重新启动,因为它的目的是失败的。

希望这可以帮助 :)