OS调度与RTOS调度的区别

时间:2011-06-10 06:06:11

标签: linux operating-system linux-kernel scheduling rtos

考虑功能/过程,

void task_fun(void) { while(1) } 如果这个过程是在普通的PC操作系统上运行的话,它会很乐意永远运行。但是在手机上,随着硬件监视器到期并重置系统,它肯定会在几分钟内崩溃整个手机。 在PC上,此过程在其到期后的规定时间片将被安排出来,并且将安排新的可运行过程运行。

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

还有一个疑问是我检查了我的PC OS(Ubuntu)和我的手机schedule()的功能,它也运行Linux内核。我发现它们几乎都是一样的。看门狗在我手机上的处理方式在哪里?我的假设是调度程序是在让进程运行之前启动监视程序的人。有人能指出我在代码中的位置吗?

4 个答案:

答案 0 :(得分:1)

可以通过多种方式实现监视程序,其中没有一种是由Linux强加的:

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

这里没有任何内容无法在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任务的时间限制。因此系统必须重新启动,因为它的目的被打败了。

希望这会有所帮助:)