¿Qué es el sistema operativo UCOS?

UC/OS es un sistema operativo en tiempo real con kernel en tiempo real, compacto y extraíble, de código abierto y gratuito.

El predecesor de μC/OS-II es μC/OS. Fue publicado por primera vez en las ediciones de mayo y junio de "Embedded System Programming" por el experto estadounidense en sistemas integrados Jean J. Labrosse en 1992. El nombre. de μC/OS El código fuente se publica en la revista BBS.

μC/OS y ​​μC/OS-II están especialmente diseñados para aplicaciones informáticas integradas y la mayor parte del código está escrito en lenguaje C. Las partes de la CPU relacionadas con el hardware están escritas en lenguaje ensamblador, y la parte del lenguaje ensamblador, de aproximadamente 200 líneas en total, se comprime al mínimo para facilitar la transferencia a cualquier otra CPU. Los usuarios pueden integrar μC/OS-II en productos desarrollados siempre que tengan un compilador cruzado, ensamblador, conector y otras herramientas de software estándar ANSI C. μ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 kernel mínimo se puede compilar a 2 KB. μC/OS-II se ha adaptado a casi todas las CPU conocidas.

Estrictamente hablando, uC/OS-II es solo un núcleo de sistema operativo en tiempo real, que 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 gestión de entrada y salida, sistema de archivos y red. Sin embargo, debido a la buena escalabilidad y el código fuente abierto de uC/OS-II, los usuarios pueden implementar estas funciones innecesarias según sus propias necesidades.

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

Gestión de tareas

UC/OS-II puede admitir hasta 64 tareas, correspondientes a niveles de prioridad 0 ~ 63, siendo 0 la prioridad más alta. 63 es el nivel más bajo. El sistema reserva cuatro tareas de mayor prioridad y cuatro tareas de menor prioridad, y 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 reanudación de tareas, etc.

Cuando se inicializa el sistema, se generarán automáticamente dos tareas: una es una tarea inactiva, con la prioridad más baja, y la tarea se cambia para realizar solo la operación de acumulación de una variable plástica; una tarea del sistema, con la segunda prioridad más baja, y la tarea Responsable de contar la utilización actual de la CPU.

Gestión del tiempo

La gestión del tiempo de uC/OS-II se implementa mediante interrupciones programadas, que generalmente ocurren cada 10 milisegundos o 100 milisegundos. La frecuencia del tiempo depende de la programación del temporizador del sistema de hardware por parte del usuario. El intervalo de tiempo entre interrupciones es fijo y la interrupció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, funciones de hora del sistema, etc.

Gestión de memoria

En ANSI C, las funciones malloc y free se utilizan para asignar y liberar memoria dinámicamente. Pero en los sistemas integrados en tiempo real, muchos de estos errores 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 caché contigua de gran capacidad se gestiona mediante particiones. Cada partición contiene un número entero de bloques de memoria del mismo tamaño, pero el tamaño de la memoria puede variar entre particiones. Cuando el usuario necesita asignar memoria dinámicamente, el sistema selecciona la partición adecuada y asigna memoria por bloques. Al liberar memoria, volver a colocar el bloque en su partición anterior puede resolver eficazmente el problema de fragmentación y mantener fijo el tiempo de ejecución.

Comunicación y sincronización entre tareas

Para los sistemas operativos multitarea, la comunicación y sincronización entre tareas son esenciales. UC/OS-II proporciona cuatro objetos de sincronización: semáforo, buzón, cola de mensajes y evento.

Todos estos objetos de sincronización tienen interfaces para crear, esperar, enviar y consultar para lograr la comunicación y sincronización entre procesos.

Programación de tareas

UC/OS-II utiliza un núcleo multitarea extraíble en tiempo real. El núcleo extraíble en tiempo real está listo para ejecutar las tareas de mayor prioridad.

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 marca de forma única la tarea en sí.

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

1) Las tareas de alta prioridad solicitan activamente suspender y abandonar el procesador porque requieren algunos recursos críticos. En este momento, se ejecutarán las tareas de baja prioridad en el estado listo. Este tipo de programación también se denomina cambio de contexto a nivel de tarea.

2) Debido a la llegada del latido del reloj, cuando el kernel descubre que la tarea de alta prioridad ha obtenido las condiciones de ejecución (como la hora de llegada del reloj de suspensión), cambia directamente a la ejecución. de la tarea de alta prioridad en el estado de interrupción. 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 la ejecución de uC/OS-II. En términos generales, lo primero ocurre en los servicios del sistema y lo segundo ocurre en los programas de servicio con interrupciones de 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. Busque las tareas de mayor prioridad creando 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), en la 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 superior actual y luego llama a la función OS_TASK_SW () para cambiar de tarea.

Los componentes de μC/OS-II

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

1) Parte central (OSCore.c)

Es el núcleo de procesamiento del sistema operativo, incluida la inicialización del sistema operativo, el funcionamiento del sistema operativo, el preámbulo de entrada y salida de interrupciones, y los latidos del reloj, programación de tareas, manejo de eventos, etc. 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 por tarea, esta parte también es muy importante.

3) Parte del reloj (OSTime.c)

La unidad de reloj más pequeña en μC/OS-II es timetick. Aquí se completan operaciones como retrasos en tareas.

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

Es una 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 la interconexión entre tareas y el acceso a recursos críticos.

5) La interfaz con la CPU

Se refiere a la parte de trasplante de μC/OS-II a la CPU utilizada. Dado que μC/OS-II es un sistema operativo general, 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.