You are on page 1of 7

Informacion extraida desde:

http://www.cs.ru.nl/lab/rtai/experiments/3.LXRT/Experiment-3.html

En tiempo real de Linux (RTAI) - Universidad de Radboud Experimento 3 Linux en tiempo real - LXRT
Este material se basa en los experimentos vxworks de Embry-Riddle en tiempo real de laboratorio

Introduccin
LXRT proporciona una interfaz de espacio de usuario de las instalaciones y caractersticas de RTAI . Proporciona una API simtrica que puede ser utilizado tanto por tareas en tiempo real RTAI y los procesos de Linux. LXRT es nica para RTAI y es una de sus caractersticas ms tiles. Las principales ventajas de LXRT es que el desarrollador con seguridad se puede desarrollar una tarea en tiempo real en el espacio de usuario suave utilizando todo el espacio de usuario, herramientas de depuracin, y estar protegidos contra cadas del sistema cuando la aplicacin se bloquea. Finalmente, despus de desarrollar una tarea se puede mover fcilmente en el espacio del ncleo.

Objetivos
Los siguientes son los principales objetivos de este experimento: Para ensear al estudiante los principios detrs de LXRT y cmo usarlo.

Descripcin
La idea de LXRT ya dejar de edad y ha pasado bajo un montn de cambios. Sin embargo, el objetivo principal siempre ha sido la capacidad de programar las tareas en tiempo real en el espacio de usuario con el mismo API en el espacio del ncleo.

Los pasos bsicos de la evolucin fueron: 1. RTAI se ha iniciado un sistema operativo en tiempo real RTAI tareas en tiempo real se ejecuta en tiempo real en el planificador y cualquier proceso normal de Linux est dirigido por el planificador de Linux en el tiempo de sobra. 2. En primer lugar LXRT estaba haciendo la API de RTAI disponible en el espacio de usuario. Se resolvi en la capacidad de los procesos de linux a cargo de la cedular de linux para utilizar la API de RTAI al igual que las tareas en tiempo real RTAI. Sin embargo, estos procesos todava estaban en tiempo real blando debido a que todava estn programadas por el planificador de Linux en tiempo real y no el programador. Linux procesos configurado para poder utilizar la API de RTAI se llaman LXRT procesos en tiempo real SOFT. 3. Finalmente la gente de RTAI conseguido un proceso de espacio de usuario de Linux tener acceso a la API de RTAI para ser programadas por el tiempo real del planificador. Tal proceso se llama LXRT proceso en tiempo real duro, ya que est programado en tiempo real duro en tiempo real por el programador. El rendimiento de un proceso en tiempo real LXRT HARD es ligeramente inferior a la de una tarea de tiempo real RTAI. Cmo se comparan? LXRT en tiempo real los procesos de hard / soft ejecutar en el nivel de usuario el modo de gran privilegio y por lo tanto no les permite abordar cualquier memoria en el espacio del ncleo que est protegida por el hardware de un funcionamiento en el nivel de gran privilegio ms alto. As que cuando cometen errores durante el desarrollo no se puede por accidente estropear el espacio de memoria del kernel propio y no causar un fallo del sistema. LXRT en tiempo real los procesos suaves tienen al lado del acceso a la API de RTAI completa API de Linux. As, por ejemplo, se puede construir GUI en un proceso en tiempo real suave como en un proceso normal de Linux, y an as ser capaces de interactuar con otros procesos en tiempo real duro linux mediante el uso de la funcionalidad del IPC de la API de RTAI. El precio que se paga sin embargo, es que usted tiene que renunciar a tiempo real DURO. Procesos en tiempo real LXRT HARD tambin se ejecutan en espacio de usuario y tambin tienen acceso a todo el API de Linux. Sin embargo, cuando se llama a una funcin de la API de Linux, que hace una llamada de sistema linux que Temporalmente se vuelve a establecer un proceso de tiempo real LXRT suave hasta que la llamada al sistema se resuelve por el kernel de Linux. Llamadas al sistema por lo que llamar en un proceso en tiempo real DURO LXRT se degrada su rendimiento con el de un proceso en tiempo real SOFT. Por tanto, es mejor para la claridad y temas de diseo para no usar Linux llamadas a la API en un proceso en tiempo real LXRT DURO. Si este proceso tendra que tener acceso a la API de Linux, puede que en lugar de comunicarse a travs de la API de RTAI con un proceso en tiempo real LXRT SUAVE a dejar que haga la llamada al sistema linux en su comportamiento. Despus de todo es un absurdo no utilizar una operacin difcil en tiempo real dentro de los procesos de tiempo real duro. Al disear el sistema que debe separar las partes duras en tiempo real de sus piezas en tiempo real suave y no se confundan! Con slo una sola llamada RTAI API puede un proceso en tiempo real LXRT SUAVE transformarse en LXRT proceso duro en tiempo real y viceversa. El interruptor de suave a fuerte es el cambio desde el programador de Linux a la cedular en tiempo real y viceversa. Sin embargo, ambos procesos en tiempo real LXRT duro / blando, no se puede transformar en tareas RTAI en tiempo real. Vica versa tampoco es posible.

Qu es una carga extra procesos LXRT han comparado con las tareas en tiempo real RTAI ya que se ejecutan en espacio de usuario? 1. Cedular latencia adicional. El planificador ejecuta en tiempo real en el espacio del ncleo y que la reprogramacin de un proceso LXRT se ejecutan en espacio de usuario a otro proceso LXRT ejecutando un espacio de usuario. As, por cada switch de un proceso de LXRT un usuario-kernelusuario de ida y vuelta se debe hacer y la MMU debe ser cambiado. 2. Latencias adicionales en llamadas a la API de RTAI LXRT. El uso de un semforo, por ejemplo, en el espacio del ncleo siempre ser ms rpido que en espacio de usuario. Esto es porque algunos microsegundos adicionales se pierden ya que cada llamada se transfiere a LXRT el ncleo y el resultado de nuevo al espacio de usuario. (El anlogo RTAI de una llamada al sistema linux) Mediciones recientes en hardware modesto (Intel PII 300Mhz) mostr que una sobrecarga adicional 3US en la parte superior de la latencia estndar planificador de 3US. As que podemos concluir: Para la mayora de las aplicaciones de esta sobrecarga un poco extra vale la pena los beneficios de la LXRT. Por lo tanto, a partir de ahora vamos a utilizar LXRT procesos en tiempo real duro / blando en espacio de usuario en lugar de las tareas en tiempo real RTAI. La mayor ventaja, por supuesto que podemos desarrollar en tiempo real blando en el que una aplicacin con errores no se llevar a todo el sistema, y se nos puede matar fcilmente a los procesos salvajes corriendo sin necesidad de reiniciar.

Hacer un proceso en tiempo real SUAVE linux


Para hacer que el comportamiento en tiempo real de un proceso de linux mejor que podemos hacer dos cosas: 1. Cambiar su poltica de linux schedulings de SCHED_OTHER a SCHED_FIFO El planificador de Linux ofrece tres polticas de planificacin diferentes, uno para los procesos normales y dos para aplicaciones en tiempo real. A sched_priority valor de prioridad esttica se asigna a cada proceso y este valor puede ser cambiado slo a travs de llamadas al sistema. Conceptualmente, el planificador mantiene una lista de procesos ejecutables para cada valor sched_priority posible, y sched_priority puede tener un valor en el rango de 0 a 99. Con el fin de determinar el proceso que se ejecuta al lado, el planificador de Linux busca la lista no vaca con la ms alta prioridad esttica y lleva el proceso a la cabeza de esta lista. La poltica de planificacin determina para cada proceso, en el que se insertar en la lista de procesos con igual prioridad esttica y la manera en que se mueven dentro de esta lista. SCHED_OTHER es la falta de pago universal de tiempo compartido planificador de polticas utilizadas por la mayora de los procesos, SCHED_FIFO y SCHED_RR estn destinados especial aplicaciones de tiempo crtico que es necesario un control preciso sobre la forma en que los procesos ejecutables son seleccionados para su ejecucin. Procesos programados con SCHED_OTHER se le debe asignar la prioridad esttica 0, procesos planificados bajo SCHED_FIFO o SCHED_RR puede tener una prioridad esttica en el rango de 1 a 99. Las llamadas al sistema sched_get_priority_min () y sched_get_priority_max () puede ser utilizado para determinar el rango de prioridad vlida para una poltica de planificacin de una manera porttil en todos los sistemas POSIX.1b conforme.

Todos los horarios es preventiva: Si un proceso de mayor prioridad esttica se prepara para correr, el actual proceso se adelant y volvi a su lista de espera. La poltica de planificacin slo determina el orden en la lista de procesos ejecutables con igual prioridad esttica. Al hacer un programa de tratamiento con SCHED_FIFO que se ejecute siempre antes de cualquier tarea normal de Linux programadas con SCHED_OTHER La funcin de linux llamada que el uso de esto es:
int sched_setscheduler (pid_t pid, int poltica, const struct sched_param * p);

Sin embargo, rara vez utilizar el comando anterior, porque existe una convocatoria combinada de sched_setscheduler () y rt_task_init () que usamos en su lugar:
RT_TASK * rt_task_init_schmod (nombre largo sin signo, la prioridad, int STACK_SIZE, int max_msg_size, la poltica, int cpus_allowed)

2. Para liberar a un proceso de linux de paginacin en el disco mediante el bloqueo de la memoria del proces de. La funcin de linux llamada que el uso de esto es:
mlockall (MCL_CURRENT | MCL_FUTURE);

Haciendo un proceso en tiempo real LXRT SUAVE


Un proceso en tiempo real LXRT SOFT es otra cosa que el anterior proceso de suave linux que se ampla la estructura de Linux tarea por su vinculacin con RTAI. Esto se hace llamando rt_task_init. As que para todos los hilos que tenemos que rt_task_init cal una vez. Cada RT_TASK en LXRT necesita un "nombre" a la que se puede hacer referencia a partir del ncleo y espacio de usuario. Este nombre puede ser no ms de 6 caracteres alfanumrico y debe ser nico. Con nombres es una forma sencilla de identificar las tareas y las primitivas de comunicacin cuando se ejecuta el programa. Si desea que la generacin automtica de "Nombre", utilice la funcin rt_get_name (0) para obtener un nico, vlido, seguro para subprocesos nombre. Siempre puedes consultar con rt_get_addr ("Nombre") para ver si un nombre ya est tomada. NOTA: Usted debe hacer su hilo una tarea RTAI desde el momento en que el uso de hilo que cualquier llamada RTAI. Ejemplos de ello son pthread_create_rt, rt_sem_init, ... con la notable excepcin dert_task_init () RTAI / LXRT es una extensin de su API de hilos POSIX, lo lgico es que si usted desea utilizar estas extensiones, lo que necesita para registrar el tema con RTAI a travs de rt_task_init. hacer un proceso SUAVE LXRT un proceso duro LXRT
rt_make_hard_real_time ();

hacer una LXRT DURO proceso un proceso SUAVE LXRT


rt_make_soft_real_time ();

Las pequeas diferencias API


En el espacio de usuario LXRT promete tener el mismo API en el espacio del ncleo. Sin embargo, algunas de las estructuras de datos del API se almacenan en el espacio del kernel para el uso, tanto para llamadas a la API de tanto usuario como el espacio del ncleo. Sin embargo, es imposible crear un espacio como ncleo de la estructura de datos del espacio de usuario. Por lo tanto, la inicializacin de la estructura de tal va con la inicializacin de un nombre y se devuelve el puntero a la estructura de datos. El nombre se utiliza como clave de la estructura que sea fcil de recordar por los seres humanos y se puede utilizar desde el espacio del usuario y el espacio del ncleo, ya que es un valor y no un indicador a una localizacin de memoria. Sin embargo, es importante destacar una vez ms que el puntero devuelto de la estructura no puede ser la direccin en el espacio de usuario, ya que apunta al espacio del ncleo! Por ejemplo, para inicializar una estructura de tarea en tiempo real. En el espacio de usuario que utiliza:
RT_TASK * rt_task_init (nombre largo sin signo, la prioridad, int STACK_SIZE, int max_msg_size);

NOTA: Normalmente se utiliza el rt_task_init_schmod (..) la funcin en el espacio de usuario que se menciona en el apartado anterior .. En el espacio del ncleo que utilice:
RT_TASK * rt_task_struct; int rt_task_init (struct rt_task_struct * tarea, prioridad, int STACK_SIZE, int max_msg_size);

Las mismas diferencias se aplican para rt_sem_int, rt_mbx_int y rt_cond_init.

Ejemplo: Helloworld!
# Include # Include # Include # Include <string.h> # Include <sys/types.h> # Include <sys/mman.h> # Include <sys/stat.h> # Include <fcntl.h> # Include <sched.h> # Include <rtai_lxrt.h> # Include <rtai_sem.h> # Include <rtai_msg.h> static int thread0; void * fun0 (void * arg) { * RT_TASK tarea; task = rt_task_init_schmod (nam2num ("TASK0"), 0, 0, 0, SCHED_FIFO, 0xF); mlockall (MCL_CURRENT | MCL_FUTURE); / / Hace difcil tarea en tiempo real (por defecto: suave) / / Descomentar la siguiente lnea en el desarrollo: el desarrollo en el modo suave en tiempo real / / Rt_make_hard_real_time ();

rt_printk ("Hola Mundo \ n"); / / Hace que la tarea en tiempo real suave rt_make_soft_real_time (); / / Limpia la tarea rt_task_delete (tarea); return 0; } int main (void) { * RT_TASK tarea; / / Hacer en tiempo real principales LXRT hilo suave task = rt_task_init_schmod (nam2num ("MyTask"), 9, 0, 0, SCHED_FIFO, 0xF); mlockall (MCL_CURRENT | MCL_FUTURE); / / Inicio del temporizador en tiempo real y el planificador rt_set_oneshot_mode (); start_rt_timer (0); / / Se crea un hilo de linux thread0 = rt_thread_create (fun0, NULL, 10000); / / Esperar el final del programa printf ("<ENTER> TIPO DE TERMINAR \ n"); getchar (); / Stuff / limpieza stop_rt_timer (); return 0; }

Compilacin
Para compilar el uso por encima de salvar la fuente en cualquier archivo de decir sample.c
> Gcc CFLAGS $ $ LDFLAGS-llxrt hello.c-o hola

donde $ CFLAGS se puede obtener mediante la ejecucin de


> Rtai-config - lxrt-cflags

y $ LDFLAGS mediante la ejecucin de


> Rtai-config - lxrt-ldflags

Experimentos
3a experimento.
El programa se inicia a continuacin un cuadro de mensaje grfico mostrando "Hola!".
-------------------------------------------------- ------------------------# Include int main () { del sistema ("xinit / usr / bin / xmessage Hola Mundo!"); } -------------------------------------------------- -------------------------

Vuelva a escribir el programa hello.c por encima de lo que usted tiene un hilo LXRT duras que las seales de otro LXRT suave con un semforo. Cuando el hilo LXRT SUAVE se despierta se debe mostrar el cuadro de mensaje con holamundo. El uso bsico de la sealizacin de un semforo:
/ / Declara semforo esttica SEM * sigsem; / / Iniciar la sealizacin de semforos sigsem = rt_sem_init (nam2num ("SEMSIG"), 0); / / Seal en tiempo real de trabajo suave rt_sem_signal (sigsem); / / Esperar a que la seal de la tarea en tiempo real duro rt_sem_wait (sigsem);

Este es un ejemplo de la comunicacin en tiempo real de las partes duras y blandas de una aplicacin. La tarea difcil es el material en tiempo real duro, mientras que la tarea suave puede hacer que el tiempo no lo crticos, como muestra una interfaz grfica de usuario. ltima actualizacin: 1 de septiembre de 2006 Creado por: Harco Kuppens h.kuppens @ cs.ru.nl

You might also like