Performance 是什么让VxWorks如此具有确定性和快速性?
很久以前我就在VxWorks 5.5上工作过,这是在世界上最好的实时操作系统上工作的最好体验。从那以后,我再也没有机会做这件事了。但是,一个问题不断向我袭来,是什么让它如此快速和确定 我还没有通过谷歌找到很多关于这个问题的参考资料 所以,我试着思考是什么让常规操作系统变得不确定性:Performance 是什么让VxWorks如此具有确定性和快速性?,performance,operating-system,vxworks,Performance,Operating System,Vxworks,很久以前我就在VxWorks 5.5上工作过,这是在世界上最好的实时操作系统上工作的最好体验。从那以后,我再也没有机会做这件事了。但是,一个问题不断向我袭来,是什么让它如此快速和确定 我还没有通过谷歌找到很多关于这个问题的参考资料 所以,我试着思考是什么让常规操作系统变得不确定性: 内存分配/取消分配:-Wiki说RTO使用固定大小的块,因此这些块可以直接索引,但这会导致内部碎片,我相信这在内存已经有限的任务关键型系统上是不可取的 分页/分段:-其类型链接到第1点 中断处理:-不确定VxWork
如果需要,请更正我的理解。我相信以下几点可以解释其中的许多差异: 无分页/交换 确定性RTO不能将内存页交换到磁盘。这将扼杀决定论,因为在任何时候你都可能需要交换内存。 vxWorks要求应用程序完全适合RAM 无流程 在vxWorks 5.5中,有任务,但没有像Windows或Linux这样的进程。任务更类似于线程,切换上下文是一种相对便宜的操作。在Linux/Windows中,切换过程非常昂贵 注意,在vxWorks 6.x中,引入了一个过程模型,这增加了一些开销,但主要与从用户模式转换到主管模式有关。新模型不一定直接影响任务切换时间 固定优先级 在vxWorks中,任务优先级由开发人员设置,并且是系统范围内的。在任何给定时间,优先级最高的任务都将是正在运行的任务。因此,您可以设计您的系统,以确保具有最严格截止日期的任务总是在其他任务之前执行
一般来说,在Linux/Windows中,虽然您可以控制进程的优先级,但调度程序最终会让优先级较低的进程运行,即使优先级较高的进程仍处于活动状态。我同意您的大多数观点,但它如何处理无效的内存访问。它是否强制执行一个构造,即在任务开始之前,它必须请求将要使用的内存量?Bcoz这是唯一的方法,VxWorks可以设置任务的边界区域。I 5.5没有“无效内存访问”,除非系统真正访问没有映射的地址。然后调用异常处理程序。任务可以访问整个内存。甚至是其他任务,甚至是内核数据结构。6.x Process model使用MMU限制对进程空间的内存访问。交换部分实际上可能是“大”RTO的情况,但决不是必须的。RTO只需保证进程的最后期限——只要它不违反这一规则,它就是实时的。如果您的关键流程必须在5分钟内运行,并且将其重新插入可以保证最多需要3分钟,最坏情况下运行需要1分钟,那么您就可以了。@Benoit,您的最后一段不正确。在Linux中,您可以使用静态调度优先级(参见SCHED_FIFO策略)来防止低优先级进程运行,只要高优先级进程需要运行。这个功能非常古老。@lambdapower您所说的是真的,但我认为大多数RTOS的截止日期都是秒或更短,在这种情况下,交换是一个杀手。