>内核是否可以实时调用,因为它具有实时调度程序?或者换句话说,假设我有一个Linux内核,如果我将默认调度程序从O(1)或CFS更改为实时调度程序,它是否会成为RTOS?
>它需要硬件的任何支持吗?通常我看到嵌入式设备有RTOS(例如VxWorks,QNX),这些有没有特殊规定/ hw来支持它们?我知道RTOS进程的运行时间是确定性的,但是可以使用longjump / setjump在确定的时间内获得输出.
我真的很感激它的一些输入/见解,如果我对某事有误,请纠正我.
解决方法
在Jamie Hanrahan的话中 –
是什么让内核实时?
实时操作系统的必要条件 –
>能够保证外部中断与中断处理程序启动之间的最大延迟.
请注意,最大延迟不需要特别短(例如微秒),您可以拥有一个实时操作系统,保证绝对最大延迟为137毫秒.
>实时调度程序是一个为线程调度提供完全可预测(对开发人员)行为的调度程序 – “下一个运行的线程”.
这通常与保证响应中断的最大延迟的问题是分开的(因为中断处理程序不一定像普通线程一样进行调度),但通常需要实现实时应用程序.实时操作系统中的调度程序通常实现大量优先级.并且它们几乎总是实现优先级继承,以避免优先级反转情况.
因此,保证中断的延迟和线程调度的可预测性是好的,那么为什么不让每个操作系统都实时?
>因为适合一般用途(服务器和/或桌面)的操作系统需要具有通常与实时延迟保证不一致的特性.
例如,实时调度程序应具有完全可预测的行为.这意味着,除了其他事项之外,开发人员为各种任务分配的优先级应由操作系统单独留下.这可能意味着一些低优先级的任务最终会长时间处于饥饿状态.但RT操作系统不得不耸耸肩说“这就是开发人员想要的东西”.请注意,为了获得正确的行为,RT系统开发人员必须担心任务优先级和cpu亲和力等问题.
通用操作系统正好相反.您希望能够在其上抛出应用程序和服务,几乎总是由许多不同供应商编写的东西(而不是像大多数R-T系统那样紧密集成的系统),并获得良好的性能.也许不是绝对最好的表现,但好.
请注意,“良好性能”不仅仅是在中断延迟中测量的.特别是,您希望cpu和其他资源分配通常被描述为“公平”,没有用户或管理员,甚至应用程序开发人员不必担心线程优先级和cpu关联性和NUMA节点等问题.一项工作可能比另一项工作更重要,但在通用操作系统中,这并不意味着第二项工作根本就没有资源.
因此,通用操作系统通常会在相同优先级的线程之间实现时间分片,并且可以根据其过去的行为调整线程的优先级(例如,cpu hog可能优先级降低; I / O绑定线程可能具有其优先级优先级增加,因此它可以保持I / O设备正常工作; cpu缺乏的线程可能会提升其优先级,因此它可以获得一点cpu时间.
内核可以实时调用,因为它有实时调度程序吗?
>不,RT调度程序是RT OS的必要组件,但您还需要在OS的其他部分中进行可预测的行为.
它需要硬件的任何支持吗?
>通常,硬件越简单,其行为越可预测.因此,PCI-E比PCI更难以预测,并且PCI比ISA等更不可预测.有一些特定的I / O总线被设计用于(除此之外)容易预测的例如.中断延迟,但现在可以通过商用硬件满足很多R-T要求.