2012-01-10 23 views
9

Trabajé en VxWorks 5.5 hace mucho tiempo y fue la mejor experiencia trabajando en el mejor sistema operativo en tiempo real del mundo. Desde entonces nunca tuve la oportunidad de volver a trabajar en él. Pero, una pregunta sigue apareciendo, ¿qué hace que sea tan rápido y determinista?¿Qué hace que VxWorks sea tan determinista y rápido?

No he podido encontrar muchas referencias para esta pregunta a través de Google.

Por lo tanto, he intentado pensar lo que hace que un sistema operativo no determinista normal:

  1. asignación de memoria/desasignación: - Wiki dice RTOS usuarios fijos bloques de tamaño, de modo que estos bloques pueden ser indexados directamente , pero esto causará fragmentación interna y estoy seguro de que esto no es nada deseable en sistemas de misión crítica donde la memoria ya es limitada.

  2. Paging/segmentación: - Su tipo de ligado al punto 1

  3. manejo de interrupciones: - No estoy seguro como VxWorks implementa, ya que esto es algo que VxWorks maneja muy bien el cambio

  4. Contexto: - Creo en VxWorks 5.5 todos los procesos utilizados en el espacio de direcciones del kernel, por lo que el cambio de contexto solía involucrar solo guardar valores de registro y nada sobre PCB (bloque de control de proceso), pero aún no estoy 100% seguro

  5. Proceso Algoritmos de programación: - Si Windows implementa una programación preventiva (prioridad/round robin), ¿la programación del proceso será tan rápida como en VxWorks? No lo creo. Entonces, ¿cómo maneja VxWorks la programación?

Corrija mi comprensión donde se requiera.

+0

¿Alguno de los interesados? –

Respuesta

11

creo que el siguiente daría cuenta de una gran cantidad de la diferencia:

Sin paginación/intercambio de

Un determinista RTOS simplemente lata no páginas de memoria de intercambio en el disco. Esto mataría el determinismo, ya que en cualquier momento podría tener que intercambiar o no memoria. vxWorks requiere que su aplicación se conecta completamente en la memoria RAM

hay procesos

En vxWorks 5.5, hay tareas, pero ningún proceso como Windows o Linux. Las tareas son más parecidas a los hilos y el cambio de contexto es una operación relativamente económica. En Linux/Windows, el proceso de conmutación es bastante caro.

Tenga en cuenta que en vxWorks 6.x, se introdujo un modelo de proceso, que aumenta algunos gastos generales, pero principalmente se relaciona con la transición del modo de usuario al modo de supervisor. El tiempo de cambio de tareas no se ve directamente afectado por el nuevo modelo.

prioridad fija

En vxWorks, las prioridades de las tareas son establecidos por el desarrollador y son de todo el sistema. La tarea de mayor prioridad en un momento dado será la que se ejecute. De este modo, puede diseñar su sistema para garantizar que las tareas con la fecha límite más ajustada siempre se ejecuten antes que otras.

En Linux/Windows, en general, aunque tiene cierto control sobre la prioridad de los procesos, el programador eventualmente permitirá que se ejecuten procesos de prioridad más baja incluso si el proceso de prioridad más alta sigue activo.

+0

Estoy de acuerdo con la mayoría de sus puntos, pero ¿cómo se ocupa de los accesos de memoria no válidos? ¿Impone una construcción que antes de que comience una tarea, tiene que solicitar la cantidad de memoria que va a usar? Como esa es la única forma, VxWorks puede establecer las regiones límite de una tarea. –

+2

I 5.5 no existe un "acceso de memoria no válido" a menos que el sistema realmente acceda a una dirección donde no se asigna nada. Luego se llama a un manejador de excepciones. Las tareas tienen acceso a toda la memoria. Incluso otras tareas 'o incluso estructuras de datos del kernel. 6.x El modelo de proceso limita el acceso a la memoria al espacio de proceso utilizando la MMU. – Benoit

+1

La parte de intercambio puede ser de hecho el caso para RTOS "grandes" pero de ninguna manera es una necesidad. Un RTOS simplemente debe garantizar los plazos de sus procesos, y siempre que no infrinja esta regla, es en tiempo real. Si el proceso crítico debe ejecutarse dentro de los 5 minutos y se puede garantizar que el intercambio vuelva a durar al menos 3 minutos y demora 1 minuto en funcionar, en el peor de los casos está bien. – lambdapower

Cuestiones relacionadas