Inicio

¿Que es el POS?

El POS (Preemptive Operating System) es un sistema software que ofrece un entorno de programación concurrente adecuado para el desarrollo de aplicaciones en tiempo real.

Una de las características más importantes del POS es que las tareas son totalmente interrumpibles en cualquier instante por la llegada de una interrupción que active otra tarea de más prioridad.

Historia

El origen del POS se remonta al desarrollo de una serie de entornos de programación concurrentes desarrollados en ETRA I+D. Estos son:

EXEC (1989)

Programa residente para el MSDOS para el procesador 8086 que ofrece un entorno de programación concurrente. Esta limitado por los 640 Kb de memoria del MSDOS con el procesador 8086.

POS68K (1995)

Microkernel para el procesador MC68000 para construir aplicaciones concurrentes de tiempo real. Es una evolución del EXEC adaptada al hardware desarrollado por ETRA I+D.

Incorpora la parte de arrancada del sistema y la construcción de drivers para manejar los dispositivos de entrada / salida.

POS386 (1997)

Adaptación del POS68K a la arquitectura INTEL i386 funcionando en modo protegido, por tanto, no tiene la limitación de los 640 Kb del EXEC.

POSPTH(2006)

Esta es la versión de POS386 portada a Linux. Se trata de una librería que utiliza los servicio Posix Threads para ofrecer a un proceso un entorno concurrente compatible con el POS386. La compatibilidad facilita la portabilidad de aplicaciones desarrolladas en POS386 a entornos Linux, aunque perdiendo las características de tiempo real. Sin embargo, utilizando un kernel con el parche para tiempo real y con procesos ejecutados por root el POSPTH utilizan las prioridades de tiempo real de Linux para mejorar el comportamiento temporal.

La principal ventaja que aporta la librería POSPTH respecto a los pthreads están relacionadas con la facilidad para crear y gestionar los hilos, su sincronización y la posibilidad de utilizar mailboxes para intercomunicar hilos del mismo proceso.

 

Características principales del POS386

-         Arranca desde MSDOS.

-         Funciona en modo protegido del 386. Utiliza la interfaz DPMI incorporado en Win95 / Win98 y WinXP, con lo que funciona también en estos sistemas. En estos casos las características de tiempo real están reducidas al no poseer el control total de la máquina.

-         Sistema de tiempo real:

§         Planificador basado en prioridades.

§         Tareas totalmente interrumpibles (preemptivo).

§         Time-out en todos los servicios bloqueantes.

§         Ejecución asíncrona de servicios.

§         Evita la inversión de prioridad

§         Base de tiempos configurable. Por defecto 10 mseg.

§         Tiempo de latencia de interrupción bajo.

-         Facilidades para la construcción de drivers. Disponible el driver para una UART estándar.

-         Doble reloj:

§         Reloj monotónico con la hora absoluta desde la puesta en marcha.

§         Reloj GMT con la hora real modificable.

§         Facilidades para utilizar la hora local .

-         Herramientas de depuración:

§         Monitorización de colas de mensajes.

§         Monitorización de E/S en los drivers.

-         Gestión de errores:

§         Captura de excepciones.

§         Manejador de errores en los servicios del POS.

§         Manejador de finalización de tarea.

-         Cambio de contexto configurable por la aplicación. (Utilizado para convertir librerías existentes en reentrantes).

-         Cambio de contexto del FPU solo en las tareas que lo utilizan.

-         Utiliza el compilador C de libre distribución de GNU, en su versión adaptada para MSDOS (DJGPP)

Servicios

El sistema se maneja por medio de una interfaz que ofrece una serie de servicios, invocado por medio de interrupciones software.

Los servicios se pueden clasificar en varios grupos:

Generales

-         Función para la ejecución de fondo (tarea NULL).

-         Desactivación del dispatcher en interrupciones para inhibir temporalmente el cambio de tarea

-         Nuevos servicios definidos por la aplicación

-         Forzar llamada al planificador, abandonando la CPU la tarea actual.

Tareas

-         Creación y finalización

-         Bloquear y despertar (estados STOP, WAIT, SUSPEND, SLEEP, EXEC).

-         Funciones de error en los servicios y de finalización de tarea.

-         Tratamiento asíncrono de servicios.

-         Definición de tarea monitor.

Colas de mensajes

-         Creación y destrucción.

-         Envío de mensajes.

§         Asíncrono

§         Síncrono

§         Espera si cola llena

-         Lectura de mensajes.

§         Con copia.

§         Por referencia (sólo en envío síncrono).

-         Doble componente de mensajes.

§         Identificador.

§         Datos.

-         Evita la inversión de prioridad en envíos síncronos.

Sincronización

-         Recursos (semáforos binarios o mutex).

-         Semáforos con contadores.

-         Evita la inversión de prioridad en semáforos binarios.

-         Combinación de recursos y semáforos para implementar las variables condición.

Tiempo

-         Actualización de la fecha y hora (al arrancar se toma la del DOS y al terminar actualiza la del DOS).

-         Lectura de la fecha y hora (absoluta o real). Libre del efecto 2000 al manejar la fecha con días absolutos desde el 1/1/1980.

-         Lectura de la hora del día en segundos y fracción en microsegundos.

-         Activaciones controladas por tiempo:

§         Wakeup a una tara

§         Resume a una tarea

§         Mensaje a una cola de mensajes

§         Terminar una tarea

§         Función en una tarea

-         Se puede ajustar la hora sin afectar a las activaciones.

Vectores

-         Manejador para un vector (interrupciones software).

-         Manejador para una interrupción hardware (devuelve una tarea a despertar).

-         Función que se activará en cada tick de reloj.

Entrada / salida

-         Apertura y cierre.

-         Escritura (con o sin buffer).

-         Lectura (con o sin buffer).

-         Lectura después de escritura en una operación única.

-         Time-outs:

§         Inicio de lectura

§         Fin de lectura

§         Fin de salida

-         Programación de separadores para la lectura.

-         Programación de función de terminación.

-         Mecanismos para construir un analizador en cada driver.

-         E/S ascii y binaria.

-         Directivas particulares para cada driver.

Invocación de servicios

Los servicios se llaman por medio de interrupciones software. Se utilizan tres:

-         Int 7E:            Directivas privilegiadas

-         Int 7D:           Directivas de usuario

-         Int 7D:           Directivas de los drivers

Los datos que necesitan las directivas se pasan por medio de los registros de la siguiente forma:

-         Código de la directiva

-         Longitud de los parámetros

-         Dirección de los parámetros

Existe una librería en C para utilizar cada uno de los servicios.

También existe una librería de clases en C++ que facilita el desarrollo de aplicaciones agrupando los servicios en una conjunto de clases, dando una visión orientada a objetos de los servicios que ofrece el sistema.

Clases básicas en C++

-         Tarea.

-         Tarea con monitorización.

-         Mailbox.

-         Timers.

-         Funciones asíncronas.

-         Recursos (mutex).

-         Semáforos

-         Tiempo.

-         Funciones asíncornas.

-         Callback de métodos.

Shell del POS

Es in intérprete que permite realizar las siguientes funciones:

-         Monitorización del sistema

-         Actuación sobre la aplicación

-         Depuración en tiempo de ejecución

-         Ejecución de scripts

-         Incorpora un lenguaje de programación de la familia del FORTH.

Entorno para generar aplicaciones

Existe una librería de soporte para generar nuevas aplicaciones que ofrece:

-         Monitorización de tareas. Rearranque automático de tareas en caso de finalización.

-         Tablas de datos persistentes para la aplicación. Ofrece una modificación con modelo transaccional.

-         Intérprete de comandos para ordenes de la aplicación.

-         Servidor del DOS. Tarea para ofreces servicios no reentrantes del MSDOS.

-         Lectura del taclado y entorno de ventanas compatible con monitor VGA y puerta serie con un terminal VT100.

-         Modificación de la librería estándar de C para el entorno concurrente:

§         Inicialización del POS antes de la llamada de los constructores globales

§         Desactivación del POS después de la llamada de los destructores globales

§         Funciones de memoria dinámica reentrantes

§         Variable errno independiente para cada tarea

§         Función printf con stack reducido

-         Trazas para la aplicación. Activables y desactivables con baja sobrecarga a las tareas de tiempo real (se visualizan con una tarea de baja prioridad).

-         Librería para comunicaciones por red con la interfaz de sockets (WHATTCP).

Conclusión

-         El POS, con el entorno de aplicación, es una herramienta sencilla y potente para desarrollar aplicaciones de tiempo real.

-         Como se lanza desde MSDOS, puede utilizarse prácticamente en cualquier plataforma de PC industrial (a partir de 386 con 4 Mb de memoria).

-         El uso de modo protegido con DPMI permite utilizar fácilmente toda la memoria del PC y poder probar y depurar en el mismo ordenador de desarrollo (Win 95/98/NT)

-         Utiliza un potente y económico software de desarrollo. Compilador C++ de GNU para MSDOS (DJGPP) y depurador de alto nivel (GDB). Existe gran cantidad de herramientas de libre distribución de todo tipo para este entorno.

-         Es modular, al estar organizado en librerías (solo se enlazan con la aplicación los módulos utilizados).

Inicio