linux – 什么使内核/ OS实时?

前端之家收集整理的这篇文章主要介绍了linux – 什么使内核/ OS实时?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_301_0@
我正在阅读 this文章,但我的问题是一般性的,我在考虑以下几点:

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

我真的很感激它的一些输入/见解,如果我对某事有误,请纠正我.

解决方法

在做了一些研究之后,与人们交谈(Jamie Hanrahan,Juha Aaltonen @linkedIn Group – 设备驱动专家)以及@Jim Garrison的输入,我可以得出结论:

在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要求.

猜你在找的Linux相关文章