是什么让VxWorks如此确定和快速?

Piy*_*sal 9 performance operating-system vxworks

我很久以前就在VxWorks 5.5上工作,这是在世界上最好的实时操作系统上工作的最佳体验.从那时起,我再也没有机会继续努力.但是,一个问题不断涌现,让我如此快速和确定性?

我无法通过Google找到这个问题的很多参考资料.

所以,我只是想到了什么使常规操作系统不确定:

  1. 内存分配/解除分配: - Wiki说RTOS使用固定大小的块,因此这些块可以直接编入索引,但这会导致内部碎片,我相信这对于内存是关键任务系统来说根本不可取.已经有限了.

  2. 分页/分段: - 它与点1的链接

  3. 中断处理: - 不确定VxWorks如何实现它,因为这是VxWorks非常好的处理

  4. 上下文切换: - 我相信VxWorks 5.5用于在内核地址空间中执行的所有进程,因此上下文切换过去只涉及保存寄存器值而不涉及PCB(进程控制块),但我仍然不是100%肯定

  5. 进程调度算法: - 如果Windows实现抢占式调度(优先级/循环),那么处理调度的速度和VxWorks一样快吗?我不这么认为.那么,VxWorks如何处理调度?

请在需要时纠正我的理解.

Ben*_*oit 12

我相信以下会解释很多差异:

没有分页/交换

确定性RTOS根本无法将内存页面交换到磁盘.这会杀死决定论,因为在任何时候你都必须交换存储器.vxWorks要求您的应用程序完全适合RAM

没有进程

在vxWorks 5.5中,有任务,但没有像Windows或Linux这样的过程.任务更类似于线程和切换上下文是一种相对便宜的操作.在Linux/Windows中,切换过程非常昂贵.

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

固定优先权

在vxWorks中,任务优先级由开发人员设置,并且是系统范围的.在任何给定时间的最高优先级任务将是运行的任务.因此,您可以设计系统,以确保具有最紧迫期限的任务始终先于其他任务执行.

在Linux/Windows中,一般来说,虽然您可以控制进程的优先级,但即使优先级较高的进程仍处于活动状态,调度程序最终也会使较低优先级进程运行.

  • 我5.5没有"无效的内存访问",除非系统真正访问没有映射的地址.然后调用异常处理程序.任务可以访问整个内存.甚至是其他任务甚至是内核数据结构.6.x过程模型使用MMU限制对进程空间的内存访问. (2认同)