Linux 操作系统调度与实时操作系统调度的区别

Linux 操作系统调度与实时操作系统调度的区别,linux,operating-system,linux-kernel,scheduling,rtos,Linux,Operating System,Linux Kernel,Scheduling,Rtos,考虑功能/流程 void任务\u乐趣(void) { 而(1) } 如果这个过程在一个普通的PC操作系统上运行,它将永远快乐地运行。但在手机上,它肯定会在几分钟内使整个手机崩溃,因为硬件看门狗将过期并重置系统。 在PC机上,此进程在其规定的时间片到期后将被调度出去,并将调度一个新的可运行进程运行 我的疑问是,为什么我们不能在RTO上应用相同的策略?如果在RTOS上实施这样的调度策略,那么所涉及的性能限制是什么 还有一个疑问是,我检查了我的PC操作系统(Ubuntu)和我的手机的schedule

考虑功能/流程

void任务\u乐趣(void)
{
而(1)
}
如果这个过程在一个普通的PC操作系统上运行,它将永远快乐地运行。但在手机上,它肯定会在几分钟内使整个手机崩溃,因为硬件看门狗将过期并重置系统。 在PC机上,此进程在其规定的时间片到期后将被调度出去,并将调度一个新的可运行进程运行

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


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

有几种方法可以实现看门狗,但没有一种是由Linux强加的:

  • 进程或线程定期运行,以测试是否正在执行重要操作。如果没有,则会采取纠正措施,如重新启动机器或重置故障组件
  • 进程或线程连续运行以占用额外的CPU时间并重置计时器。如果任务无法运行,计时器将过期并采取纠正措施
  • 如果没有周期性地对系统进行按摩,则硬件组件重置系统;也就是说,硬件计时器过期

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

在台式计算机或移动电话上的Linux不是RTOS。它的调度策略是时间驱动的

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

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

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

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


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

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

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

因此,如果您的代码void task\u-fun(void){while(1)}永远运行,那么其他更高优先级的任务将处于饥饿状态。因此,看门狗将使系统崩溃,以指定开发人员不满足其他任务的时间限制

例如,GSM调度器需要每4.6ms运行一次,如果您的任务运行时间较长,则无法满足GSM调度器任务的时间限制。因此,系统必须重新启动,因为它的目的失败了


希望这能有所帮助:)

我对您在这里使用的术语不太有信心:RTOS通常是一种有保证的最长服务时间的操作系统(如ISR)。如果操作系统正确地预先安排任务,那么实际上并不需要看门狗定时器,只有当一个任务可以独占处理器时,比如协同多任务处理。通常,看门狗定时器是一种硬件设备,你必须经常“踢”它(比如在任务开关上),以确保它不会重置设备。也许使用“嵌入式操作系统”一词争议较小?你的手机使用哪种操作系统?@John Mulder:是的,你说得对!嵌入式操作系统将是一个更好的术语!我的手机正在运行Linux内核2.6.35.11!你怎么知道这会让你的手机崩溃?@nos:我已经在很多嵌入式手机平台上工作过了。当任务中有一个耗时的过程(如联系人数据库更新)或系统中有一个导致简单错误的错误时,手机就会崩溃,而(1){}您的所有观点都是正确的!但我的疑问是,为什么PC操作系统不实施这些措施,而嵌入式操作系统却实施了这些措施,如果在嵌入式操作系统上没有实现这些措施,或者在PC操作系统上实现了这些措施,那么性能会受到什么影响呢?@PavanM:大多数嵌入式系统都有众所周知的特征,因此很容易识别“正常行为”大多数电脑都是通用的:有时它们运行的程序会添加一些数字;其他时候,他们运行的程序将pi计算到一千万位小数。O/S如何识别错误的程序?还有时间驱动的RT调度策略。见费率单调/最早截止日期批准