7

考虑功能/过程,

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

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

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

4

4 回答 4

1

有几种方法可以实现看门狗,但 Linux 都没有强加:

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

这里没有什么是在 RTOS 或任何其他多任务操作系统上无法完成的。

于 2011-06-10T06:52:26.770 回答
1

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

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

于 2011-06-10T07:58:56.830 回答
1

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

在大多数嵌入式 RTOS 中,所有进程都由系统设计人员在部署时定义,并且该设计旨在根据需要安排所有进程。将用户定义或第三方代码放在这样的系统上可能会损害其调度方案,如您的示例所示。我建议所有此类进程应以与所有其他进程相同的低优先级运行,以便循环调度程序平等地为用户应用程序提供服务,而不会损害系统服务。

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

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

于 2011-06-11T07:43:24.560 回答
0

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

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

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

例如,GSM Scheduler 需要每 4.6ms 运行一次,如果您的任务运行时间更长,则无法满足 GSM Scheduler 任务的时间限制。所以系统必须重新启动,因为它的目的被打败了。

希望这可以帮助 :)

于 2012-03-29T08:06:35.847 回答