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.

Slides:



Advertisements
Presentaciones similares
TEMA 1 Introducción a la Programación Concurrente
Advertisements

PROVISIÓN DE SERVICIOS WEB DINÁMICOS ASOCIADOS A VIDEO BASADOS EN DISPOSITIVOS MÓVILES Autor: Juan Carlos Álvarez Martín Tutor: Francisco Javier Finat.
Planificación de Monoprocesadores
Sistema operativo Componentes de un sistema operativo
I.T.E.S.R.C. Romina Tamez Andrea Martínez Ma. De Lourdes Solís
T5-multithreading SO-Grado Q1.
Aplicaciones Cliente-Servidor
Common Object Request Broker Architecture
Sistemas en estratos. Descripción: se organiza en una jerarquía de estratos, estando construido cada uno de ellos sobre el otro que tiene menor jerarquía.
Estructuras en Sistemas Operativos
Base de la biblioteca de threads a nivel usuario del proyecto SODIUM.
Javier López García OBJETIVOS DEL PROYECTO Diseñar una nueva arquitectura para SERVIVOX que le proporcione mayor modularidad y flexibilidad. Reestructurar.
Concurrencia en JAVA JAVA es un lenguaje que tiene soporte de concurrencia, mediante Threads. Un thread es un proceso “liviano” (lightweight process) que.
Aplicación del paradigma orientado a objetos
Aplicaciones Multihilo
Comunicación y sincronización entre procesos
SISTEMAS OPERATIVOS UNIDAD 1..
Servidor de Batalla Naval.
Llamadas al Sistema EXIT y WAIT
ESTRUCTURA DE LOS SISTEMAS OPERATIVOS
HILOS Y COMUNICACIÓN ENTRE PROCESOS
Tecnologías para el desarrollo de aplicaciones Web
Signal, kill, sigaction y máscara de señales
Un hilo es un único flujo de ejecución dentro de un proceso. Un proceso es un programa ejecutándose dentro de su propio espacio de direcciones. Los.
Comunicación y sincronización entre procesos Realizado por Kepa Bengoetxea Kortazar
Universidad de Cantabria
Ing Florencia Ferrigno Tecnicas Digitales 3
Hilos - Lightweight process - Procesos ligeros
OMAR SANCHEZ ROBLES HECTOR PEREZ GARCIA. “Sistemas de cómputo compuesto por un gran número de CPU´s conectados mediante una red de alta velocidad”, Tanenbaum.
M.C. Juan Carlos Olivares Rojas
Arquitectura de una aplicación
Estructura del sistema operativo
Profesor: Rodrigo Sanhueza Figueroa
M.C. Juan Carlos Olivares Rojas
Extendiendo Minix a Arquitecturas SMP Jesús M. Álvarez Llorente Juan Carlos Díaz Martín José Manuel Rodríguez García Departamento de Informática Universidad.
Desarrollo de aplicaciones para ambientes distribuidos
IDSP Jesús M. Álvarez Llorente Juan C. Díaz Martín José M. Rodríguez García Juan L. García Zapata Juan A. Rico Gallego Departamento de Informática Universidad.
INFORMATICA III ESCUELA DE INGENIERIA ELECTRONICA DEPARTAMENTO DE SISTEMAS E INFORMATICA.
Hilos En La Computación. (THREADS).
Software Testing Juan Carlos Olivares Rojas MSN:
Sistema Organizador de Invitaciones, Eventos y Memos basado en una aplicación Cliente – Servidor SOIEM TESIS DE GRADO FIEC – ESPOL 2007 Christian Vulgarin.
Introducción a los Sistemas Operativos
Monitores Mecanismo sincronización de nivel más alto que semáforos Construcción a nivel de lenguaje de programación que controla el acceso a datos compartidos.
TEMA 10. SISTEMAS OPERATIVOS DISTRIBUIDOS
Estructuras en Sistemas Operativos DAISY KATERINE RODRÍGUEZ.
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.
Integrante: Yohandry Cueto Carnet: # Contenido Kernel Linux Limitaciones del Kernel Linux Kernel Mach Que es Hurd Arquitectura Ventajas Distribuciones.
CONCEPTOS FUNDAMENTALES DEL NIVEL DEL SISTEMA OPERATIVO
Importancia en la efectividad del:
“condición que necesita el usuario para resolver un problema o conseguir un objetivo determinado”. Los requisitos de un sistema son los aspectos que el.
Términos y Conceptos Básicos
CARACTERÍSTICAS Es un lenguaje de programación estructurado de propósito general. Está estrechamente asociado al sistema operativo UNIX, ya que el propio.
FLOR ALBA ACEVEDO COD JENNIFFER TATIANA TORRES COD
Sistemas Operativos.
Hilos Capítulo 5 Silberschatz Galvin. Copyright © 2006, Intel Corporation. All rights reserved. Intel and the Intel logo are trademarks or registered.
No se trata de algo nuevo.
Elementos y tipos de sistemas operativos
Estructuras en Sistemas Operativos DAISY KATERINE RODRÍGUEZ.
Hilos Java Profesor Elian Rojas Berrocal
Ing. Esp. Ricardo Cujar. Permite la ejecución de una sentencia, dada una determinada condición. If(condición){ sentencia(s) a ejecutar en caso de que.
Proceso de desarrollo de Software
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.
PROCESADOR.- El procesador es el cerebro del sistema, encargado de procesar toda la información. Básicamente, es el "cerebro" de la computadora. Prácticamente,
Desarrollador Profesional de Juegos Programación III Unidad II Hilos de ejecución Threads.
Desarrollador Profesional de Juegos Programación III Unidad III Mutex, Semáforos y Condicion de Sincronización Bajo Linux.
Conociendo el modelo Cliente-Servidor
Threads Introducción Modelos Multi-Threading Problemas con Threads Pthreads Threads en Solaris 2 Threads en Windows 2000 Threads en Linux Threads en Java.
Factorías e Iterables Introducción del concepto de patrón de diseño Construcción de tipos para recorridos con for extendido Fundamentos de Programación.
Agenda  Historia  Características  Mecanismos de concurrencia  Ejemplos  Desventajas  Accesibilidad  Conclusiones  Bibliografía.
Estructura del sistema operativo
Transcripción de la presentació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 Juan Carlos Díaz Martín Departamento de Informática Universidad de Extremadura

PONNHI. Una Nueva Arquitectura Microkernel Pthreads en Espacio de Usuario - XIII Jornadas de Paralelismo - Lleida, septiembre de 2002 PONNHI 1. Motivación y objetivos. 2. Principios de diseño. 3. La interfaz de PONNHI. 4. El microkernel. 5. Los servidores. 6. Gestión de señales POSIX. 7. La cancelación. 8. Pruebas de rendimiento. 9. Conclusiones y trabajo futuro.

PONNHI. Una Nueva Arquitectura Microkernel Pthreads en Espacio de Usuario - XIII Jornadas de Paralelismo - Lleida, septiembre de Motivación y objetivos FSU Pthreads es una extendida implemen- tación de threads POSIX c (núcleo de ejecución de ADA 95). Tiene una estructura monolítica. Es robuto y bastante completo. Nuestra expericiencia con su código fuente (Champollion, VíTReOS) nos demuestra que es demasiado complejo. 1. Motivación y objetivos

PONNHI. Una Nueva Arquitectura Microkernel Pthreads en Espacio de Usuario - XIII Jornadas de Paralelismo - Lleida, septiembre de Motivación y objetivos Otras librerías semejantes, todas POSIX, todas monolíticas: –PTL. Portable Threads Library. –GNU Pth. The GNU Portable Threads. –Provenzano threads. –LinuxThreads. Pretendemos construir una nueva librería POSIX, pero microkernel: PONNHI.

PONNHI. Una Nueva Arquitectura Microkernel Pthreads en Espacio de Usuario - XIII Jornadas de Paralelismo - Lleida, septiembre de Principios de diseño Diseño inspirado en Minix. Dos elementos principales: –Servidores de threads proporcionan a los hilos cliente las funcionalidades Pthreads. –El microkernel soporta el paso de mensajes y la planificación Las primitivas Pthreads se transforman en paso de mensajes a los servidores a través del núcleo. 2. Principios de diseño

PONNHI. Una Nueva Arquitectura Microkernel Pthreads en Espacio de Usuario - XIII Jornadas de Paralelismo - Lleida, septiembre de Principios de diseño

PONNHI. Una Nueva Arquitectura Microkernel Pthreads en Espacio de Usuario - XIII Jornadas de Paralelismo - Lleida, septiembre de Principios de diseño Los hilos de aplicación componen mensajes para el hilo del núcleo. El hilo del núcleo lo traspasa al servidor adecuado. Los hilos servidores realizan los trabajos solicitados.

PONNHI. Una Nueva Arquitectura Microkernel Pthreads en Espacio de Usuario - XIII Jornadas de Paralelismo - Lleida, septiembre de Principios de diseño El hilo del núcleo es un hilo más (con su propio contexto). Es un diseño modular: es fácil separar las funcionalidades de Pthreads. Es un diseño flexible: es más fácil añadir servicios que en un modelo monolítico.

PONNHI. Una Nueva Arquitectura Microkernel Pthreads en Espacio de Usuario - XIII Jornadas de Paralelismo - Lleida, septiembre de La interfaz de PONNHI Todas las primitivas Pthreads de los hilos de aplicación se traducen a primitivas send_rec: Los servidores aceptan mensajes mediante la primitiva receive: Bloqueo de threads hasta la cita. void send_rec(int dst, mess_t *mess) void receive (int src, mess_t *mes) 3. La interfaz de PONNHI

PONNHI. Una Nueva Arquitectura Microkernel Pthreads en Espacio de Usuario - XIII Jornadas de Paralelismo - Lleida, septiembre de La interfaz de PONNHI Ejemplo: pthread_create. int pthread_create(pthread_t *thread, pthread_attr_t *attr, pthread_func_t func, any_t arg ) { mess_t mess; mess.operation = CREATE_THREAD; mess.arg.mes_1.t = thread; mess.arg.mes_1.attr = attr; mess.arg.mes_1.func = func; mess.arg.mes_1.arg = arg; send_rec(1, &mess); /* Server 1 */... } int pthread_create(pthread_t *thread, pthread_attr_t *attr, pthread_func_t func, any_t arg ) { mess_t mess; mess.operation = CREATE_THREAD; mess.arg.mes_1.t = thread; mess.arg.mes_1.attr = attr; mess.arg.mes_1.func = func; mess.arg.mes_1.arg = arg; send_rec(1, &mess); /* Server 1 */... }

PONNHI. Una Nueva Arquitectura Microkernel Pthreads en Espacio de Usuario - XIII Jornadas de Paralelismo - Lleida, septiembre de La interfaz de PONNHI Los servidores solicitan planificación al núcleo mediante send_rec. No existe la primitiva send: nunca se hace sin receive.

PONNHI. Una Nueva Arquitectura Microkernel Pthreads en Espacio de Usuario - XIII Jornadas de Paralelismo - Lleida, septiembre de El microkernel Tres funciones: –Entregar mensajes –Planificar los hilos –Manejar las señales POSIX Es el único autorizado para planificar. Nunca se planifica: sólo se ejecuta cuando recibe mensajes de otros hilos (invocación directa por salto largo). 4. El microkernel

PONNHI. Una Nueva Arquitectura Microkernel Pthreads en Espacio de Usuario - XIII Jornadas de Paralelismo - Lleida, septiembre de El microkernel La planificación de un hilo se hace invocando restore_context(descriptor_thread). Previamente se guarda el contexto mediante save_context(descriptor_thread). void send_rec(mess_t *mess) { is_in_kernel = TRUE; save_context(kernel.pthread_self); *(servers[KERNEL]->mens) = mess; restore_context(servers[KERNEL]); } void send_rec(mess_t *mess) { is_in_kernel = TRUE; save_context(kernel.pthread_self); *(servers[KERNEL]->mens) = mess; restore_context(servers[KERNEL]); } Como PC la dirección de retorno de send_rec Como PC la dirección de retorno de send_rec

PONNHI. Una Nueva Arquitectura Microkernel Pthreads en Espacio de Usuario - XIII Jornadas de Paralelismo - Lleida, septiembre de 2002 La función principal del núcleo es kernel_f: 4. El microkernel void kernel_f() { mess_t *mess; while (1) { sched_wait(ANY, &mess) switch(mess.operation) { case 1:... break;... case n:... break; } void kernel_f() { mess_t *mess; while (1) { sched_wait(ANY, &mess) switch(mess.operation) { case 1:... break;... case n:... break; } void sched_wait(int from, mess_t *mess) { save_context(servers[KERNEL]); servers[KERNEL]->mess= mess; sched(); } void sched_wait(int from, mess_t *mess) { save_context(servers[KERNEL]); servers[KERNEL]->mess= mess; sched(); } void sched() { while(ready.head == NULL) if (pending == TRUE) mess_signal(); kernel.pthread_self = ready.head; kernel.pthread_self->state|=S_RUNNING; kernel.pthread_self->state&=~S_RECEIVING; is_in_kernel=FALSE; restore_context(kernel.pthread_self); } void sched() { while(ready.head == NULL) if (pending == TRUE) mess_signal(); kernel.pthread_self = ready.head; kernel.pthread_self->state|=S_RUNNING; kernel.pthread_self->state&=~S_RECEIVING; is_in_kernel=FALSE; restore_context(kernel.pthread_self); }

PONNHI. Una Nueva Arquitectura Microkernel Pthreads en Espacio de Usuario - XIII Jornadas de Paralelismo - Lleida, septiembre de Los servidores Proporcionan los servicios Pthread. ¿Cuántos hacen falta? –Cuantos menos, menos paso de mensajes. –Cuantos menos, más monolítico. Según criterios funcionales, 4 servidores: –Servidor de gestión de hilos –Servidor de mecanismos de sincronización –Servidor de señales POSIX –Servidor de datos específicos Se 5. Los servidores

PONNHI. Una Nueva Arquitectura Microkernel Pthreads en Espacio de Usuario - XIII Jornadas de Paralelismo - Lleida, septiembre de Los servidores Tienen una estructura semejante al núcleo. server_POSIX_SIGNALS() { mess_t *mensaje; init_signals(); do { receive(ANY, &mess); switch (mess->operation) { case SIGACTION:.... break;... case PTHREAD_KILL:... break;... } } while (1); } server_POSIX_SIGNALS() { mess_t *mensaje; init_signals(); do { receive(ANY, &mess); switch (mess->operation) { case SIGACTION:.... break;... case PTHREAD_KILL:... break;... } } while (1); }

PONNHI. Una Nueva Arquitectura Microkernel Pthreads en Espacio de Usuario - XIII Jornadas de Paralelismo - Lleida, septiembre de Gestión de señales POSIX El servidor de señales instala el manejador universal de señales para todas las señales POSIX. Se redefine sigaction() para que no invoque al S.O., sino que envíe un mensaje al servidor de señales. El servidor de señales anota los manejadores que establecen los hilos. Cuando llega una señal, el manejador universal envía un mensaje al núcleo para que se lo pase al servidor de señales y éste la distribuya de la forma adecuada. 6. Gestión de señales POSIX

PONNHI. Una Nueva Arquitectura Microkernel Pthreads en Espacio de Usuario - XIII Jornadas de Paralelismo - Lleida, septiembre de Gestión de señales POSIX El manejador universal de señales: void sigcatch(int sig, siginfo_t *siginfo, void *sigcontext) { if(!is_in_kernel) { is_in_kernel = TRUE; save_context(kernel.pthread_self); sig_send(sig, siginfo, sigcontext); } else { sigaddset(&pending_signals,sig); pending=TRUE; } void sigcatch(int sig, siginfo_t *siginfo, void *sigcontext) { if(!is_in_kernel) { is_in_kernel = TRUE; save_context(kernel.pthread_self); sig_send(sig, siginfo, sigcontext); } else { sigaddset(&pending_signals,sig); pending=TRUE; } void sig_send(int sig, siginfo_t *siginfo, void *sigcontext) { mess_t mess; mess.operation = SIGNAL; mess.type = 0; mess.arg.mes_8.sig = sig; mess.arg.mes_8.siginfo = siginfo; mess.arg.mes_8.sigcontext = sigcontext; mess.arg.mes_8.t = kernel.pthread_self; (*(servers[KERNEL]->mess)) = &mess; restore_context(servers[KERNEL]); } void sig_send(int sig, siginfo_t *siginfo, void *sigcontext) { mess_t mess; mess.operation = SIGNAL; mess.type = 0; mess.arg.mes_8.sig = sig; mess.arg.mes_8.siginfo = siginfo; mess.arg.mes_8.sigcontext = sigcontext; mess.arg.mes_8.t = kernel.pthread_self; (*(servers[KERNEL]->mess)) = &mess; restore_context(servers[KERNEL]); }

PONNHI. Una Nueva Arquitectura Microkernel Pthreads en Espacio de Usuario - XIII Jornadas de Paralelismo - Lleida, septiembre de La cancelación Un hilo puede ordenar la cancelación de otro. Un hilo puede aceptar o no la cancelación, en función de su estado. El servidor modifica el contexto del hilo cancelado para que cuando se reanude pase por handle_cancel. –Si acepta la cancelación, finaliza. –Si la rechaza, quedará pendiente hasta que cambie su estado. 7. La cancelación

PONNHI. Una Nueva Arquitectura Microkernel Pthreads en Espacio de Usuario - XIII Jornadas de Paralelismo - Lleida, septiembre de Pruebas de rendimiento Comparamos PONNHI con 3 librerías monolíticas. Hacemos 5 tests: –Test 1: cambios de contexto entre 2 hilos. –Test 2: bloqueos/liberaciones de mútex. –Test 3: sincronizaciones en variable de condición entre 2 hilos. –Test 4: sincronizaciones sigwait/pthread_kill entre 2 hilos. –Test 5: Creación de 1000 hilos. 8. Pruebas de rendimiento

PONNHI. Una Nueva Arquitectura Microkernel Pthreads en Espacio de Usuario - XIII Jornadas de Paralelismo - Lleida, septiembre de Pruebas de rendimiento 4 cambios de contexto frente a la modificación de una variable 4 cambios de contexto frente a la modificación de una variable

PONNHI. Una Nueva Arquitectura Microkernel Pthreads en Espacio de Usuario - XIII Jornadas de Paralelismo - Lleida, septiembre de Conclusiones y trabajo futuro Es posible construir Pthreads con arquitectura microkernel. Los servicios básicos ya funcionan –Trabajamos en características avanzadas como herencia de prioridad y techo de prioridad. –Conviene mejorar el rendimiento en lo posible. PONNHI es manejable. Lo estamos portando a Minix y microcontrolador HITACHI. Objetivo: que sirva de base para Ada Conclusiones y trabajo futuro

PONNHI. Una Nueva Arquitectura Microkernel Pthreads en Espacio de Usuario - XIII Jornadas de Paralelismo - Lleida, septiembre de 2002 Agradecimientos Este trabajo ha sido financiado por los proyectos FEDER II S742-F96, “Servidor escalable de reconocimiento de voz” y CICYT nº TIC , “Diseño e Implementación de Algoritmos de Procesado de Señal de Altas Prestaciones para Reconocimiento de Voz en Condiciones Adversas” Agradecimientos