Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 是什么让VxWorks如此具有确定性和快速性?_Performance_Operating System_Vxworks - Fatal编程技术网

Performance 是什么让VxWorks如此具有确定性和快速性?

Performance 是什么让VxWorks如此具有确定性和快速性?,performance,operating-system,vxworks,Performance,Operating System,Vxworks,很久以前我就在VxWorks 5.5上工作过,这是在世界上最好的实时操作系统上工作的最好体验。从那以后,我再也没有机会做这件事了。但是,一个问题不断向我袭来,是什么让它如此快速和确定 我还没有通过谷歌找到很多关于这个问题的参考资料 所以,我试着思考是什么让常规操作系统变得不确定性: 内存分配/取消分配:-Wiki说RTO使用固定大小的块,因此这些块可以直接索引,但这会导致内部碎片,我相信这在内存已经有限的任务关键型系统上是不可取的 分页/分段:-其类型链接到第1点 中断处理:-不确定VxWork

很久以前我就在VxWorks 5.5上工作过,这是在世界上最好的实时操作系统上工作的最好体验。从那以后,我再也没有机会做这件事了。但是,一个问题不断向我袭来,是什么让它如此快速和确定

我还没有通过谷歌找到很多关于这个问题的参考资料

所以,我试着思考是什么让常规操作系统变得不确定性:

  • 内存分配/取消分配:-Wiki说RTO使用固定大小的块,因此这些块可以直接索引,但这会导致内部碎片,我相信这在内存已经有限的任务关键型系统上是不可取的

  • 分页/分段:-其类型链接到第1点

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

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

  • 进程调度算法:-如果Windows实现抢占式调度(优先级/循环),那么进程调度是否会像VxWorks一样快?我不这么认为。那么,VxWorks如何处理调度


  • 如果需要,请更正我的理解。

    我相信以下几点可以解释其中的许多差异:

    无分页/交换

    确定性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的截止日期都是秒或更短,在这种情况下,交换是一个杀手。