我很早以前就从事VxWorks 5.5的工作,这是在世界上最好的实时OS上工作的最佳体验。从那时起,我再也没有机会再做一次。但是,一个问题不断涌向我,是什么使得如此快速和确定性的呢?

我无法通过Google找到很多有关此问题的引用。

因此,我只是想着是什么使常规操作系统变得不确定:

  • 内存分配/取消分配:-Wiki表示RTOS使用固定大小的块,以便可以直接为这些块建立索引,但是这会导致内部碎片,并且我敢肯定,这对于内存在任务关键型系统上根本不是可取的已经受到限制。
  • 分页/分段:-链接到Point 1
  • 的一种
  • 中断处理:-不知道VxWorks如何实现它,因为这是VxWorks很好地处理的
  • 上下文切换:-我相信在VxWorks 5.5中,所有用于在内核地址空间中执行的进程,因此上下文切换曾经只涉及保存寄存器值,而与PCB(进程控制块)无关,但是我仍然不是100%确定
  • 进程调度算法:-如果Windows实现抢占式调度(优先级/循环调度),那么进程调度将与VxWorks中的进程调度一样快吗?我不这么认为。那么,VxWorks如何处理调度?

  • 请根据需要更正我的理解。

    最佳答案

    我相信以下内容可以解释很多差异:

    没有分页/交换

    确定性RTOS只是不能将内存页面交换到磁盘。这将破坏确定性,因为在任何时候您都可能需要换入或换出内存。
    vxWorks要求您的应用程序完全适合RAM

    无进程

    在vxWorks 5.5中,有任务,但是没有Windows或Linux之类的过程。这些任务更类似于线程,并且切换上下文是相对便宜的操作。在Linux/Windows中,切换过程非常昂贵。

    请注意,在vxWorks 6.x中引入了过程模型,该过程模型增加了一些开销,但主要与从用户模式转换为Supervisor模式有关。新模型不一定会直接影响任务切换时间。

    固定优先级

    在vxWorks中,任务优先级由开发人员设置并且在系统范围内。在任何给定时间,最高优先级的任务将是正在运行的任务。因此,您可以设计系统以确保截止日期最短的任务总是先于其他任务执行。

    一般来说,在Linux/Windows中,尽管您可以控制进程的优先级,但调度程序最终将允许低优先级的进程运行,即使高优先级的进程仍处于事件状态。

    关于performance - 是什么使VxWorks如此确定性和快速性?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8800371/

    10-11 16:44