IMPLEMENTACIÓN DEL ALGORITMO DE PRIORIDADES DUALES EN RT-LINUX

Slides:



Advertisements
Presentaciones similares
Capítulo 2 Algoritmos.
Advertisements

UNIVERSIDAD PRIVADA SAN PEDRO ESCUELA INGENIERIA CIVIL
Complejidad Computacional
Sistemas Operativos Administración del procesador.
Planificación de Monoprocesadores
Cuartó parcial 7A 7B.
Programación Interactiva Hilos
ARQUITECTURA DE COMPUTADORES - PERFORMANCE
Programando con OpenMP*
T5-multithreading SO-Grado Q1.
Planificación con Prioridades Fijas
Funciones y recursividad
1 Extensión de un Estructura de Datos Agustín J. González ELO-320: Estructura de Datos y Algoritmos.
Base de la biblioteca de threads a nivel usuario del proyecto SODIUM.
UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO
Tareas en Linux · TASK_RUNNING (0): Indica que el proceso en cuestión se está ejecutando o listo para ejecutarse. En este segundo caso, el proceso dispone.
Algoritmos y Estructuras de Datos
ESTRUCTURAS DE SECUENCIA
Sebastián Sánchez Prieto
UPV - EHU MOISE Konputagailuen Arkitektura eta Teknologia Saila Departamento de Arquitectura y Tecnología de Computadores 1 Introducción al tiempo real.
TRABAJO DE LUIS VIRACOCHA
Tema 12: Programación multihilo
7a.1 Silberschatz, Galvin y Gagne ©2003 Sistemas Operativos 6ª edición Capítulo 7: Sincronización de procesos parte a.
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
Java. Threads (Hebras) Los sistemas operativos actuales permiten la multitarea, aunque esta se de tiempo compartido cuando se trabaja con un solo procesador.
Métodos Algoritmos y Desarrollo de Programas I. Cuando utilizar métodos  Los métodos se utilizan para romper un problema en pedazos de forma que este.
Analisis de Planificación
PONNHI PONNHI Una Nueva Arquitectura Microkernel Pthreads en Espacio de Usuario José Manuel Rodríguez García Juan A. Rico Gallego Jesús M. Álvarez Llorente.
Semana 5 Subprogramas..
Planificación de Tareas Aperiodicas
Concurrencia: Exclusión Mútua y Sincronización
1 Concurrencia Procesos y Programas. 2 Establecer Comunicación entre procesos (memoria común)
Planificación Cíclica
Ing Florencia Ferrigno Tecnicas Digitales 3
CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament d’Arquitectura de Computadors (Seminaris de CASO) Autors Sincronización de Threads en Java Josep Joan.
M.C. Juan Carlos Olivares Rojas
Introducción al Minikernel
Ordenación y Búsquedas1UVM Ordenación y Búsqueda.
Planificación de procesos
Profesor: Rodrigo Sanhueza Figueroa
Capítulo 6: Planificación del CPU – Parte a
INTERRUPCIONES Introducción.
Tipo de Datos Básicos.
El lenguaje de programación C - Identificadores y variables – Isidro González Caballero ( Introducción.
Material de apoyo Unidad 4 Estructura de datos
Date | Place Señales Práctica I. Name | Company Objetivos Captura de una señal y tratamiento de la misma Checkpointing.
Planificación Dinámica de Tareas
Teoría de Sistemas Operativos Planificación Procesos
Teoría de Sistemas Operativos Departamento de Electrónica 2º Semestre, 2002 Gabriel Astudillo Muñoz
Planificación de Tareas Aperiodicas
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 1 Dr. Pedro Mejia Alvarez Proyecto del Curso Diseño de un Kernel de Procesos.
Gestión de procesos Sistemas Operativos Edwin Morales
Planificación de uso del procesador
Informática III Arquitectura de Software para aplicaciones de tiempo real estricto Ejecutivos cíclicos VS. Ejecutivos de prioridad fija Integrantes: Anibal.
Introducción a Procesos.  Contexto de ejecución: Conjunto de variables y parámetros, que tiene independencia de otro procesos.  Contexto de E/S ◦ Descriptores.
Proyecto del Curso. 1era. Parte: Manejo de Interrupciones y Cambio de Contexo 1 Dr. Pedro Mejia Alvarez Proyecto del Curso Diseño de un Kernel de Procesos.
Planificación. Visión General El planificador del SO se construye a partir de un mecanismo para la conmutación de contexto y una política que determina.
Administrador de procesos
Práctica 4: Seguimiento de Proyectos. José Onofre Montesa Andrés Universidad Politécnica de Valencia Escuela Superior de Informática Aplicada
Métodos de Planificación
RMA en μCOS para Sistemas Embebidos INTEGRANTES: CIANCIOSI, AGUSTIN MUSSOLINI, DIEGO.
comenzar Listo Ejecutando Terminado Bloqueado Un proceso ejecuta y solo abandona el control de la CPU cuando lanza E/S o termina. La cola de listos se.
Hilos Capítulo 5 Silberschatz Galvin. Copyright © 2006, Intel Corporation. All rights reserved. Intel and the Intel logo are trademarks or registered.
UTFSM - Sistemas Operativos
Desarrollador Profesional de Juegos Programación III Unidad II Trabajando con bloqueo de datos.
También es conocido como proceso ligero. Es una entidad básica de utilización de CPU y esta formado por un contador de programa, algunos registros y una.
Planificación de uso del procesador Rina Arauz. Planificación de CPU 2 UNAN-Leon La ejecución de un trabajo se compone de secuencias de procesador y de.
Desarrollador Profesional de Juegos Programación III Unidad III Mutex, Semáforos y Condicion de Sincronización Bajo Linux.
Cambios de modo, de contexto y repaso PEP 1 Luis Loyola.
Tema 1: Concurrencia con Java
Transcripción de la presentación:

IMPLEMENTACIÓN DEL ALGORITMO DE PRIORIDADES DUALES EN RT-LINUX Autor: Luis Antonio Búrdalo Rapa Asignatura: Sistemas de Tiempo Real Curso: 2003 - 2004

IMPLEMENTACIÓN DEL ALGORITMO DE PRIORIDADES DUALES EN RT-LINUX DESCRIPCIÓN DEL ALGORITMO IMPLEMENTACIÓN EJEMPLOS DE EJECUCIÓN MEJORAS MOLONAS

DESCRIPCIÓN DEL ALGORITMO DE PRIORIDADES DUALES TRES BANDAS DE PRIORIDADES ALTA > MEDIA > BAJA CADA TAREA CRÍTICA 2 PRIORIDADES: BANDA BAJA y BANDA ALTA CADA TAREA ACRÍTICA PRIORIDAD BANDA MEDIA RESTRICCIÓN TAREAS CRÍTICAS PLANIFICABLES EN BANDA ALTA

DESCRIPCIÓN DEL ALGORITMO DE PRIORIDADES DUALES Activación de tareas CRÍTICAS en BANDA BAJA Expulsadas por banda MEDIA y ALTA INSTANTE DE PROMOCIÓN: La prioridad de la tarea CRÍTICA pasa a BANDA ALTA

DESCRIPCIÓN DEL ALGORITMO DE PRIORIDADES DUALES

IMPLEMENTACIÓN Sistema Operativo: Modificaciones RT-Linux 3.2-pre1-ptm1.0 Linux kernel 2.4.18 Modificaciones Soporte básico de la política SCHED_DUAL Cambios de estado en tareas “duales”: clock_nanosleep(...), rtl_schedule() y findpreemptor(...)

IMPLEMENTACIÓN: Soporte básico include/rtl_sched.h include/linux/sched.h struct sched_param{ int sched_priority; int low_priority; int high priority; struct timespec promotion_time; long long absolute_promotion_time; } #define SCHED_OTHER 0 #define SCHED_FIFO 1 #define SCHED_RR 2 #define SCHED_DUAL 3 /* Modificacion de las funciones * pthread_setschedparam * pthread_getschedparam */ include/rtl_sched.h typedef struct STRUCT_PTHREAD_ATTR{ ... int policy; } pthread_attr_t; pthread_attr_init(...) pthread_attr_setschedpolicy(...) pthread_attr_getschedpolicy(...)

IMPLEMENTACIÓN: clock_nanosleep(...) schedulers/rtl_sched.c int clock_nanosleep(clockid_t clock_id, int flags, const struct timespec *rqtp, struct timespec *rmtp){ /* Prepara todo antes de dormirse */ if (self->policy == SCHED_DUAL){ self->sched_param.sched_priority=self->sched_param.low_priority; /* SIEMPRE SE DUERME A BAJA PRIORIDAD!!! */ self->sched_param.absolute_promotion_time = timeout + timespec_to_ns(&self->sched_param.promotion_time); /* SOLO PARA EVITAR CONVERSIONES ENTRE timespec Y hrtime_t */ } /* Se marca como suspendido y llama a rtl_schedule() * para que entre otra tarea * * A partir de aquí se ejecutara al despertarse */

IMPLEMENTACIÓN: rtl_schedule(...) schedulers/rtl_sched.c int rtl_schedule(){ /* ... */ for (t = sched->rtl_tasks; t; t = t->next) { /* Para cada una de las tareas del sistema: * 1) Comprobar si la tarea esta dormida y le toca despertarse */ if ((t->policy == SCHED_DUAL) && (t->sched_param.sched_priority == t->sched_param.low_priority)){ /* 2) Si la tarea es SCHED_DUAL y esta pendiente de promocion, * comprobar si es hora de promocionarla if (now >= t->sched_param.absolute_promotion_time){ t->sched_param.sched_priority=t->sched_param.high_priority; } /* 3) Quedarse con la tarea activa de mayor prioridad => new_task */ } /* for */

IMPLEMENTACIÓN: rtl_schedule(...) schedulers/rtl_sched.c /* ... */ if ( (preemptor = find_preemptor(sched,new_task))) { /* Si el preemptor es SCHED_DUAL, hay que tener en cuenta el instante * en el que va a interrumpir a la siguiente tarea (activacion o promocion?) */ if ((preemptor->policy == SCHED_DUAL) && (preemptor->sched_param.sched_priority) <= new_task->sched_param.sched_priority) { /* Promocion */ (sched->clock)->settimer(sched->clock,preemptor->sched_param.absolute_promotion_time-now); } else { (sched->clock)->settimer(sched->clock, preemptor->resume_time - now); } (sched->clock)->settimer(sched->clock, (HRTICKS_PER_SEC / HZ) / 2); set_bit (RTL_SCHED_TIMER_OK, &sched->sched_flags); /* ... * Cambio de contexto efectivo si procede, etc...

IMPLEMENTACIÓN: find_preemptor(...) schedulers/rtl_sched.c /* Solo podra ser preemptor alguien que se despierte con mayor * prioridad o alguien que se promocione a mayor prioridad */ inline static struct rtl_thread_struct * find_preemptor(schedule_t *s, struct rtl_thread_struct *chosen){ /* ... */ for (t = s->rtl_tasks; t; t = t->next) { /* Para cada una de las tareas del sistema: * 1) Comprobar si la tarea esta dormida y si su activacion puede expulsar * de la cpu a la tarea chosen if (test_bit(RTL_THREAD_TIMERARMED, &t->threadflags)) { if (t->sched_param.sched_priority > chosen->sched_param.sched_priority){ if(!preemptor || (t->resume_time < preemption_time)){ /* Por ahora es quien antes se despierta con mayor prioridad que chosen */ preemptor = t; preemption_time=t->resume_time; }

IMPLEMENTACIÓN: find_preemptor(...) schedulers/rtl_sched.c /* ... */ if ((t->policy == SCHED_DUAL) && (t->sched_param.sched_priority==t->sched_param.low_priority)){ /* Esta tarea SCHED_DUAL esta esperando su promocion: * Se comprueba su prioridad alta para saber si puede ser preemptor */ if (t->sched_param.high_priority > chosen->sched_param.sched_priority){ /* Se comprueba si la promocion es posterior al preemptor */ if(!preemptor || (t->sched_param.absolute_promotion_time < preemption_time)){ /* Es anterior => Se convierte en el nuevo preemptor! */ preemptor = t; preemption_time=t->sched_param.absolute_promotion_time; } } /* for */ return preemptor;

Tarea adicional T1 para soporte de traza EJEMPLO SIMPLE Dos tareas T2 SCHED_FIFO Prioridad: 9 T3 SCHED_DUAL Prioridades: 5 y 10 Tiempo de promoción: 5 mseg Tarea adicional T1 para soporte de traza

EJEMPLO SIMPLE

EJEMPLO SIMPLE

EJEMPLO SIMPLE

EJEMPLO SIMPLE

OTRO EJEMPLO SIMPLE Tres tareas T2 SCHED_FIFO Prioridad 7 T3 SCHED_DUAL Prioridades: 4 y 10 Tiempo de promoción: 5 mseg T3 SCHED_DUAL Prioridades: 5 y 11 Tarea adicional T1 para soporte de traza

OTRO EJEMPLO SIMPLE

MEJORAS MOLONAS (1): PRIORIDAD DE LINUX int change_linux_priority(int priority){ struct rtl_sched_param linux_sched_param; linux_sched_param.sched_priority=priority; pthread_setschedparam( , SCHED_FIFO, &linux_sched_param); return 0; }

MEJORAS MOLONAS (1): PRIORIDAD DE LINUX int change_linux_priority(int priority){ struct rtl_sched_param linux_sched_param; linux_sched_param.sched_priority=priority; pthread_setschedparam(pthread_linux(), SCHED_FIFO, &linux_sched_param); return 0; }

MEJORAS MOLONAS (2): clock_nanosleep_until_promotion schedulers/rtl_sched.c clock_nanosleep_until_promotion (clockid_t clock_id,int flags, struct timespec *rmtp) Duerme al hilo hasta que llega su instante de promoción PARTES INICIALES – PARTES FINALES

MEJORAS MOLONAS (3): change_absolute_promotion_time schedulers/rtl_sched.c change_absolute_promotion_time(hrtime_t nanoseconds, int flags) Cambia el instante de promoción del hilo: Adelanta o retrasa el instante Tiempo absoluto o relativo

MEJORAS MOLONAS (3): change_absolute_promotion_time schedulers/rtl_sched.c change_absolute_promotion_time(hrtime_t nanoseconds, int flags) Cambia el instante de promoción del hilo: Adelanta o retrasa el instante Tiempo absoluto o relativo

IMPLEMENTACIÓN DEL ALGORITMO DE PRIORIDADES DUALES EN RT-LINUX Autor: Luis Antonio Búrdalo Rapa Asignatura: Sistemas de Tiempo Real Curso: 2003 - 2004