La Red de Conocimientos Pedagógicos - Conocimientos históricos - ¿Qué es el sistema operativo UCOS?

¿Qué es el sistema operativo UCOS?

u C/OS es un sistema operativo gratuito, de código abierto, compacto y en tiempo real con un kernel privable en tiempo real.

El predecesor de μC/OS-II es μC/OS, que fue publicado por primera vez en 1992 por el experto estadounidense en sistemas integrados Jean J.Labrosse en las ediciones de mayo y junio de la revista "Embedded Systems Programming". El artículo se serializó y el código fuente de μC/OS se publicó en la BBS de la revista.

μC/OS y ​​μC/OS-II están especialmente diseñados para aplicaciones informáticas integradas y la mayoría de los códigos están escritos en lenguaje C. Las partes relacionadas con el hardware de la CPU están escritas en lenguaje ensamblador, y la parte del lenguaje ensamblador, que totaliza aproximadamente 200 líneas, está comprimida al mínimo para facilitar la transferencia a cualquier otra CPU. Siempre que los usuarios tengan un compilador cruzado, ensamblador, conector y otras herramientas de software estándar ANSI C, pueden integrar μC/OS-II en el producto desarrollado. μC/OS-II tiene las características de alta eficiencia de ejecución, tamaño reducido, excelente rendimiento en tiempo real y gran escalabilidad. El núcleo mínimo se puede compilar a 2 KB. μC/OS-II ha sido portado a casi todas las CPU conocidas.

Estrictamente hablando, uC/OS-II es solo un núcleo de sistema operativo en tiempo real. Solo incluye funciones básicas como programación de tareas, gestión de tareas, gestión del tiempo, gestión de memoria y comunicación y sincronización entre tareas. . No se proporcionan servicios adicionales como administración de entrada y salida, sistema de archivos y red. Sin embargo, debido a la buena escalabilidad y al código fuente abierto de uC/OS-II, los propios usuarios pueden implementar estas funciones no esenciales según sus necesidades.

El objetivo de uC/OS-II es implementar un kernel preventivo en tiempo real basado en la programación de prioridades y proporcionar los servicios más básicos del sistema en este kernel, como semáforos, buzones de correo, colas de mensajes y gestión de memoria, gestión de interrupciones, etc.

Gestión de tareas

uC/OS-II puede admitir hasta 64 tareas, correspondientes a niveles de prioridad del 0 al 63, siendo 0 la prioridad más alta. 63 es el nivel más bajo. El sistema reserva 4 tareas de mayor prioridad y 4 tareas de menor prioridad. El número de tareas disponibles para todos los usuarios es 56.

uC/OS-II proporciona varias llamadas de funciones para la gestión de tareas, incluida la creación de tareas, la eliminación de tareas, el cambio de prioridades de tareas, la suspensión y recuperación de tareas, etc.

Cuando se inicializa el sistema, se generarán automáticamente dos tareas: una es una tarea inactiva, que tiene la prioridad más baja. La tarea solo realiza una operación de acumulación en una variable entera y la otra es una tarea del sistema. , cuya prioridad es La segunda tarea más baja es responsable de contar la utilización actual de la CPU.

Gestión del tiempo

La gestión del tiempo de uC/OS-II se realiza mediante interrupciones programadas. Esta interrupción programada generalmente ocurre una vez cada 10 milisegundos o 100 milisegundos. La frecuencia del tiempo depende de. Usuario Implementado mediante la programación del temporizador del sistema de hardware. El intervalo de tiempo entre interrupciones es fijo y la interrupción también se convierte en el latido de un reloj.

uC/OS-II requiere que los usuarios llamen a funciones del sistema relacionadas con el ritmo del reloj proporcionadas por el sistema en el programa de servicio de interrupción programado, como funciones de conmutación de tareas a nivel de interrupción y funciones de hora del sistema.

Gestión de memoria

En ANSI C, se utilizan dos funciones, malloc y free, para asignar y liberar memoria dinámicamente. Sin embargo, en los sistemas integrados en tiempo real, múltiples errores de este tipo provocarán la fragmentación de la memoria y, debido al algoritmo de gestión de la memoria, el tiempo de ejecución de malloc y free también es incierto.

En uC/OS-II, la memoria grande y continua se administra según particiones. Cada partición contiene un número entero de bloques de memoria del mismo tamaño, pero el tamaño de los bloques de memoria entre diferentes particiones puede ser diferente. Cuando el usuario necesita asignar memoria dinámicamente, el sistema selecciona una partición adecuada y asigna memoria en bloques. Cuando se libera la memoria, el bloque se vuelve a colocar en la partición a la que pertenecía anteriormente. Esto puede resolver eficazmente el problema de fragmentación y el tiempo de ejecución también se fija.

Comunicación y sincronización entre tareas

Para un sistema operativo multitarea, la comunicación y sincronización entre tareas son esenciales. uC/OS-II proporciona 4 objetos de sincronización, a saber, semáforo, buzón, cola de mensajes y evento. Todos estos objetos de sincronización tienen interfaces para crear, esperar, enviar y consultar para implementar la comunicación y sincronización entre procesos.

Programación de tareas

uC/OS-II utiliza un núcleo multitarea privable en tiempo real. El kernel preventivo en tiempo real ejecuta la tarea de mayor prioridad que esté lista en cualquier momento.

La programación de tareas de uC/os-II es una programación preventiva basada completamente en la prioridad de la tarea, es decir, una vez que la tarea de mayor prioridad esté en el estado listo, inmediatamente se adelantará al procesamiento de la tarea de baja prioridad en ejecución. recursos del servidor. Para simplificar el diseño del sistema, uC/OS-II estipula que todas las tareas tienen diferentes prioridades, porque la prioridad de una tarea también identifica de forma única la tarea en sí.

La programación de tareas se producirá en las siguientes circunstancias:

1) Debido a que una tarea de alta prioridad requiere ciertos recursos críticos, solicita activamente la suspensión y abandona el procesador. Se ejecutan las tareas de baja prioridad en el estado listo programado. Este tipo de programación también se denomina cambio de contexto a nivel de tarea.

2) Cuando llega el latido del reloj para una tarea de alta prioridad, en el controlador de interrupciones del reloj, el kernel encuentra que la tarea de alta prioridad ha obtenido las condiciones de ejecución (como que el reloj inactivo ha expirado), y luego en el estado de interrupción Cambie directamente a la ejecución de tareas de alta prioridad. Este tipo de programación también se denomina cambio de contexto a nivel de interrupción.

Estos dos métodos de programación son muy comunes en el proceso de ejecución de uC/OS-II. En términos generales, el primero ocurre en el servicio del sistema y el segundo ocurre en el programa de servicio de interrupción del reloj.

El contenido de la programación del trabajo se puede dividir en dos partes: encontrar la tarea de mayor prioridad y cambiar de tarea. La búsqueda de la tarea de mayor prioridad se logra estableciendo una lista de tareas listas. Cada tarea en u C/OS tiene un espacio de pila independiente y una estructura de datos llamada Bloque de control de tareas TCB (Bloque de control de tareas), en el que la primera variable miembro es el puntero de la pila de tareas guardada. El módulo de programación de tareas primero usa la variable OSTCBHighRdy para registrar la dirección TCB de la tarea lista de nivel más alto actual y luego llama a la función OS_TASK_SW () para realizar el cambio de tareas.

Los componentes de μC/OS-II

μC/OS-II se pueden dividir aproximadamente en cinco partes: núcleo, procesamiento de tareas, procesamiento de tiempo, sincronización y comunicación de tareas y trasplante de CPU. .

1) La parte central (OSCore.c)

es el núcleo de procesamiento del sistema operativo, incluida la inicialización del sistema operativo, la ejecución del sistema operativo, el preámbulo de entrada y salida de interrupciones, el ritmo del reloj. , programación de tareas, manejo de eventos y muchas otras partes. Las partes que pueden mantener el funcionamiento básico del sistema están todas aquí.

2) Parte de procesamiento de tareas (OSTask.c)

El contenido de la parte de procesamiento de tareas está estrechamente relacionado con la operación de la tarea. Incluyendo creación, eliminación, suspensión, recuperación, etc. de tareas. Debido a que μC/OS-II está programado en función de tareas como unidad básica, esta parte del contenido también es muy importante.

3) Parte del reloj (OSTime.c)

La unidad de reloj más pequeña en μC/OS-II es el timetick (ritmo del reloj). Aquí se completan operaciones como el retraso de tareas.

4) Parte de comunicación y sincronización de tareas

Es la parte de procesamiento de eventos, que incluye semáforos, buzones de correo, colas de buzones de correo, indicadores de eventos, etc., se utiliza principalmente para el contacto mutuo y; interacción entre tareas. Acceso a recursos críticos.

5) La parte de interfaz con la CPU

se refiere a la parte de trasplante de μC/OS-II para la CPU utilizada. Dado que μC/OS-II es un sistema operativo universal, la implementación de cuestiones clave aún debe trasplantarse de acuerdo con el contenido y los requisitos específicos de la CPU específica.

Esta parte del contenido generalmente está escrita en lenguaje ensamblador porque involucra punteros del sistema como SP. Incluye principalmente la implementación subyacente del cambio de tareas a nivel de interrupción, la implementación subyacente del cambio de tareas a nivel de tarea, la generación y procesamiento de latidos del reloj y las partes de procesamiento relacionadas de las interrupciones.