什么使内核/操作系统实时?

我正在阅读这篇文章,但我的问题是在一个通用的层面上,我正在思考如下几行:

  1. 一个内核可以被称为实时只是因为它有一个实时调度程序? 换句话说,如果我有一个Linux内核,并且如果我将默认的调度程序从O(1)CFS更改为real time scheduler ,它会变成一个RTOS吗?
  2. 它是否需要硬件的任何支持? 通常我看到embedded式设备有一个RTOS(例如VxWorks,QNX),这些是否有特殊的规定/ hw来支持它们? 我知道RTOS进程的运行时间是确定性的,但是可以使用longjump / setjump在确定的时间内获得输出。

我真的很感激一些意见,如果我错了什么,请纠正我。

在做了一些研究之后,我们可以总结一下(Jamie Hanrahan,Juha Aaltonen @ Grouped – 设备驱动专家)和@Jim Garrison的意见,我可以得出这样的结论:

杰米汉拉汉的话中 –

什么使内核实时?
实时操作系统的必要条件

  • 能够保证外部中断和中断处理程序启动之间的最大延迟

    请注意,最大延迟不需要特别短(如微秒),您可以有一个实时操作系统,保证绝对最大延迟137毫秒。

  • 一个实时调度程序是为线程调度提供完全可预测(对开发人员)的行为 – “哪个线程运行下一个”。

    这通常与确保响应中断的最大延迟问题是分开的(因为中断处理程序不一定像普通线程那样进行调度),但通常需要实现实时应用程序。 实时操作系统中的调度器通常实现大量的优先级。 而且他们几乎总是执行优先级继承,以避免优先级倒置的情况。

所以,对于中断和线程调度的可预测性来说,保证延迟是很好的,那么为什么不使每个操作系统都是实时的呢?

  • 因为适用于一般用途的操作系统(服务器和/或桌面)需要具有通常与实时延迟保证不一致的特性。

    例如,实时调度程序应该具有完全可预测的行为。 这意味着,除了别的以外,开发人员为各项任务分配的任何优先级都应由操作系统独立完成。 这可能意味着一些低优先级任务最终会长时间处于饥饿状态。 但RT操作系统不得不耸耸肩说“这就是开发人员想要的”。 请注意,要获得正确的行为,RT系统开发人员不得不担心诸如任务优先级和CPU亲和力等事情。

    通用操作系统正好相反。 您希望能够仅仅投放应用程序和服务,几乎总是由许多不同的供应商编写的东西(而不是像大多数RT系统那样是一个紧密集成的系统),并获得良好的性能。 也许不是绝对最好的表现,但很好。

    请注意,“良好的性能”不仅仅是测量中断延迟。 特别是,您希望CPU和其他资源分配经常被描述为“公平”,而不需要用户或管理员,甚至应用程序开发人员也不必担心如果线程优先级和CPU亲和力以及NUMA节点等问题。 一份工作可能比另一份更重要,但是在一个通用的操作系统中,这并不意味着第二份工作根本就没有资源。

    所以通用操作系统通常会在同等优先级的线程之间实现时间切片,并且可以根据它们过去的行为来调整线程的优先级(例如,CPU可能会优先级降低; I / O绑定线程可能会有优先级增加,所以它可以保持I / O设备工作;一个CPU饥饿的线程可能会优先增强,所以它可以得到一点CPU时间)。

一个内核可以被称为实时只是因为它有一个实时调度程序?

  • 不,RT调度程序是RT OS的必要组件,但是在操作系统的其他部分也需要预测行为。

它是否需要硬件的任何支持?

  • 一般来说,硬件越简单,其行为就越可预测。 所以PCI-E比PCI更难预测,PCI比ISA更难预测。有一些特殊的I / O总线可以很容易的预测中断延迟,但是很多RT需求可以现在用商品硬件来满足。