Departamento de Automática
|
|
- Julia Vidal Maidana
- hace 5 años
- Vistas:
Transcripción
1 Departamento de Automática Tema 6 Programación paralela de sistemas SMP Prof. Dr. José Antonio de Frutos Redondo Dr. Raúl Durán Díaz Curso
2 Programación de sistemas SMP Introducción. Hebras. Sincronización. Visibilidad de la memoria entre hebras. Paradigmas de uso. Programación avanzada. Errores frecuentes. Programación de un ejemplo. 6. Programación paralela de sistemas SMP 2
3 Introducción Definición y terminología. Concepto de hebra. Comprende los elementos necesarios para ejecutar una sucesión de instrucciones máquina: Contador de programa, los registros de datos y direcciones, etc. Concepto de proceso (en Unix): Una o más hebras, espacio de direcciones, descriptores de ficheros, etc. Por lo tanto, un proceso puede estar ejecutando varias hebras que compartirán el espacio de direcciones. 6. Programación paralela de sistemas SMP 3
4 Introducción Definición y terminología. Asincronía. Dos operaciones son asíncronas cuando evolucionan con total independencia una de otra. Concurrencia. Dos operaciones son concurrentes cuando se pueden entremezclar arbitrariamente de forma que ambas progresen independientemente. Es decir: no se necesita que una acabe para comenzar la otra. Paralelismo. Se aplica a dos operaciones concurrentes que, además, progresan simultáneamente. 6. Programación paralela de sistemas SMP 4
5 Introducción Definición y terminología. La concurrencia puede darse tanto en un sistema monoprocesador como multiprocesador. El paralelismo sólo puede darse en un sistema multiprocesador. El modelo de hebras proporciona tanto concurrencia como paralelismo, lo que lo hace útil en ambos tipos de máquinas. 6. Programación paralela de sistemas SMP 5
6 Introducción Definición y terminología. Código seguro en el modelo de hebra. Llamamos código seguro al que puede ser ejecutado simultáneamente por varias hebras sin resultados destructivos. Atención: no es lo mismo seguro que eficiente. Podemos convertir una función (que no tenga estado) en segura utilizando un bloqueo al llamarla que liberamos al terminar. 6. Programación paralela de sistemas SMP 6
7 Introducción Definición y terminología. Hebra re-entrante. Se trata de un modelo eficiente de código seguro. Para ello: evitar datos estáticos (es decir, persistentes de una llamada a otra); independiente de cualquier forma de sincronización entre las hebras. Cuando es necesario guardar el estado, es mejor hacerlo sobre estructuras de datos externas a la función que puede controlar y sincronizar el llamador. 6. Programación paralela de sistemas SMP 7
8 Introducción Definición y terminología. Protección de código frente a protección de datos. Conceptualmente es mejor proteger los datos que el código. Tomemos la función putchar como ejemplo: Protegemos su ejecución mediante un bloqueo (mutex): Ventaja: garantizamos que sólo una hebra puede escribir un carácter cada vez. Problema: si una hebra quiere escribir en otro canal, no puede hacerlo! Solución: proteger el canal (es decir, su estructura de datos asociada) y no el código. 6. Programación paralela de sistemas SMP 8
9 Introducción Costes de la programación multihebra. Sobrecarga de computación. La sincronización tiene coste computacional: hay que mantenerla al mínimo. Deficiencias a niveles más bajos. Si se usan hebras para paralelizar la I/O, pueden aparecer cuellos de botella en: Librería ANSI C. Sistema operativo. Sistema de ficheros. Drivers de los dispositivos. En procesos de computación intensiva, adecuar el número de hebras al de procesadores (fase de mapeo). Más hebras que procesadores suele dar peor rendimiento. 6. Programación paralela de sistemas SMP 9
10 Introducción Costes de la programación multihebra. Autodisciplina del programador. La programación con hebras es más difícil. Hay que ser cautos con el código desarrollado por terceros. No olvidar nunca que cualquier hebra ve todo el espacio de direcciones de las demás! Dificultad de depuración. Faltan herramientas. Los errores son sutiles: La temporización es clave y puede hacer aparecer o desaparecer errores. La corrupción de punteros es muy difícil de rastrear. 6. Programación paralela de sistemas SMP 10
11 Introducción Normativa POSIX. Seguimos la norma POSIX c El nombre pthreads se refiere a POSIX threads. 6. Programación paralela de sistemas SMP 11
12 Hebras Creación y uso. Creación y gestión de hebras. Objeto básico: pthread_t thread; Funciones relacionadas: int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start)(void *), void *arg); int pthread_exit(void *value_ptr); int pthread_detach(pthread_t thread); int pthread_join(pthread_t thread, void **value_ptr); int sched_yield(void); int pthread_equal(pthread_t t1, pthread_t t2); 6. Programación paralela de sistemas SMP 12
13 Hebras La hebra se representa con el tipo de dato pthread_t. La ejecución de la hebra comienza llamando a la función que se indique en start, a la que se le pasará el argumento arg. El identificador de la hebra creada se almacena en la variable tipo pthread_t. El identificador es necesario para actuar sobre la hebra. Una hebra puede obtener su propio identificador con pthread_self(). No hay forma de obtener el de otra, salvo que se haya guardado previamente. La función pthread_equal() permite comparar dos identificadores. 6. Programación paralela de sistemas SMP 13
14 Hebras El main es la hebra inicial. Si se termina, se termina todo el proceso (en el sentido del sistema operativo): obliga a las demás hebras a terminar; devuelve al sistema operativo los recursos de todo el proceso. Por lo demás se comporta como una hebra normal. Todas las hebras creadas comparten el espacio de direcciones y los descriptores de ficheros. A cada hebra se le asigna una pila propia de tamaño fijo, especificable, mediante el parámetro de atributos, en el momento de creación. 6. Programación paralela de sistemas SMP 14
15 Hebras La función pthread_exit() termina una hebra. Una hebra terminada sólo devuelve sus recursos al sistema operativo si está en estado detached. Para poner una hebra en estado detached se utiliza la función pthread_detach(). El estado detached no afecta a la hebra: sólo informa al sistema operativo de que sus recursos se pueden recuperar cuando ésta termine. 6. Programación paralela de sistemas SMP 15
16 Hebras Ciclo de vida: Lista creada planificada desbloqueada detenida Corriendo Terminada Bloqueada esperando recurso terminada o cancelada 6. Programación paralela de sistemas SMP 16
17 Hebras Una hebra puede devolver un valor al terminar, si otra hebra llama a la función pthread_join(). Recordemos que la sintaxis es: int pthread_join(pthread_t thread, void **value_ptr); Si no nos interesa el valor retornado, podemos pasar NULL en lugar de value_ptr. 6. Programación paralela de sistemas SMP 17
18 Relación entre hebras y kernel Entre las hebras y el procesador, suele haber un nivel de abstracción intermedio, como, por ejemplo: Un proceso Unix tradicional, Una hebra de kernel, Un light-weight process, como en Solaris, etc. Estas entidades de kernel están gestionadas por el sistema operativo. Se relaciona con las hebras a través de algún subsistema que llamamos planificador. 6. Programación paralela de sistemas SMP 18
19 Relación entre hebras y kernel Las hebras se relacionan con las entidades del kernel como en esta figura: Hebras (creadas por el usuario) Planificador El usuario puede ejercer cierto control sobre la planificación. Entidades del kernel (gestionadas por el SO) 6. Programación paralela de sistemas SMP 19
20 Ejemplo de programación con fork Programación asíncrona. Ejemplo base: # include todo.h # define TRUE 1 int main(int argc, char *argv[]) { int segundos = 0; char line[128] = ; char mensaje[64] = ; while(true) { printf( Alarma> ); if (fgets(line, sizeof(line), stdin) == NULL) exit(0); if (strlen(line) <= 1) continue; if (sscanf(line, %d %64[^\n], &segundos, mensaje) < 2) fprintf(stderr, Comando erróneo.\n ); else { sleep(segundos); printf( (%d) %s \n, segundos, mensaje); } } exit(0); } 6. Programación paralela de sistemas SMP 20
21 Ejemplo de programación con fork Ejemplo de programación asíncrona creando procesos:... else { pid = fork(); if (pid == 0) { sleep(segundos); printf( (%d) %s \n, segundos, mensaje); exit(0); } else { do { pid = waitpid(-1, NULL, WNOHANG); } while (pid!= 0); } } } exit(0); } 6. Programación paralela de sistemas SMP 21
22 Ejemplo de programación con hebras Ejemplo de programación asíncrona usando hebras: # include <pthread.h> typedef struct { int segundos; char mensaje[64]; } alarm_t;... alarm_t *alarm; pthread_t thread;... alarm = (alarm_t *)malloc(sizeof(alarm_t));... else { pthread_create(&thread, NULL, alarm_thread, alarm); } } exit(0); } 6. Programación paralela de sistemas SMP 22
23 Ejemplo de programación con hebras Ejemplo de programación asíncrona usando hebras: # include <pthread.h> void *alarm_thread(void *arg) { alarm_t *alarm = (alarm_t *)arg; pthread_detach(pthread_self()); sleep(alarm->segundos); printf( (%d) %s \n, segundos, mensaje); free(alarm); return NULL; } 6. Programación paralela de sistemas SMP 23
24 Sincronización Con frecuencia existen unas relaciones implícitas entre diversas variables de un programa. Ejemplo: una cola de elementos con cabecera la cabecera apunta al primer elemento o es NULL. cada elemento apunta al siguiente o a NULL si es el último. Si estas relaciones no se respetan, el programa fallará o dará resultados erróneos. 6. Programación paralela de sistemas SMP 24
25 Sincronización Secciones críticas. Áreas de código que afectan a datos compartidos. Pueden ser vistas también como invariantes de datos. Las relaciones entre variables se pueden infringir temporalmente con tal de que el resto del código no pueda enterarse de ello. Por ejemplo, el estado de la cola no debe alterarse cuando se inserta o se elimina un elemento. Cuando hablamos de sincronización nos referimos a la protección del programa frente a la alteración de las relaciones. La sincronización es un proceso cooperativo. Los predicados son expresiones lógicas que describen el estado de las relaciones. 6. Programación paralela de sistemas SMP 25
26 Sincronización Mutexes (semáforos de exclusión mutua). Para sincronizar las hebras hay que asegurar el acceso mutuamente excluyente a los datos compartidos. Sólo una hebra accede cada vez. La sincronización es importante para: modificar datos; para leer datos previamente escritos si el orden es importante. Atención! Con frecuencia, el hardware no nos garantiza un orden predecible en el acceso a memoria. 6. Programación paralela de sistemas SMP 26
27 Sincronización Creación y destrucción de mutexes. Objeto básico: pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; Funciones relacionadas: Creación: int pthread_mutex_init(pthread_mutex_t *mutex, pthread_mutexattr_t *attr); Esta función sirve para crear un mutex dinámicamente. Destrucción: int ptread_mutex_destroy(pthread_mutex_t *mutex); Un mutex creado dinámicamente se puede destruir una vez se tenga certeza de que no hay hebras que lo retengan bloqueado. 6. Programación paralela de sistemas SMP 27
28 Sincronización Bloqueo y desbloqueo de mutexes: int pthread_mutex_lock(pthread_mutex_t *mutex); Esta función espera hasta conseguir el bloqueo del mutex. Atención! No bloquear un mutex que la misma hebra ya tenía bloqueado previamente. int pthread_mutex_unlock(pthread_mutex_t *mutex); Una hebra sólo puede desbloquear los mutexes que le pertenecen, es decir, los que ella bloqueó. int pthread_mutex_trylock(pthread_mutex_t *mutex); Esta función devuelve el error EBUSY si el mutex ya estaba bloqueado. Puede servir para evitar los abrazos mortales. 6. Programación paralela de sistemas SMP 28
29 MUTEX (MUTual EXclusion) Secuencia de operaciones con mutex Hebra 1 Hebra 2 Hebra 3 tiempo Hebra 2 espera Hebra 1 bloquea Hebra 1 desbloquea mutex Hebra 2 bloquea Hebra 3 espera Hebra 1 intenta bloquear Retorno EBUSY Hebra 1 bloquea Hebra 2 desbloquea 6. Programación paralela de sistemas SMP 29
30 Sincronización Variables de estado. Se utilizan para comunicar el estado de los datos compartidos. Ejemplo: la hebra que atiende una cola puede señalizar que ésta está vacía para que otra hebra actúe apropiadamente. Una variable de estado siempre lleva asociado un mutex. La hebra bloquea el mutex y después espera cambio de estado. El sistema pthreads asegura atomicidad en las operaciones espera cambio de estado y desbloqueo de mutex. Las variables de estado sirven para señalizar una condición: no proporcionan exclusión mutua. Por eso se utilizan en conjunción con los mutexes. Cada variable de estado lleva asociado uno y solo un predicado. 6. Programación paralela de sistemas SMP 30
31 Sincronización Creación y destrucción de variables de estado. Objeto básico: pthread_cond_t cond = PTHREAD_COND_INITIALIZER; Funciones relacionadas: Creación: int pthread_cond_init(pthread_cond_t *cond, pthread_condattr_t *attr); Crea una variable de estado dinámicamente. Destrucción: int ptread_cond_destroy(pthread_cond_t *cond); Una variable de estado creada dinámicamente se puede destruir una vez se tenga certeza de que no hay ni habrá hebras a la espera de cambio de estado, ni ninguna señalizará ningún cambio de estado. 6. Programación paralela de sistemas SMP 31
32 Sincronización Funciones de espera: Espera ordinaria: int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex); Cada variable de estado debe estar asociada con uno y sólo un mutex. Cuando la hebra invoca esta función, ha de tener bloqueado el mutex. La operación de espera liberará el mutex justo al comenzar la espera. Una vez señalizada la condición, la función se desbloquea y retoma el bloqueo del mutex antes de seguir adelante. 6. Programación paralela de sistemas SMP 32
33 Sincronización Funciones de espera: Espera con plazo de expiración: int ptread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex, struct timespec *expiration); La función puede retornar bien por señalización de la condición bien por expiración del plazo. 6. Programación paralela de sistemas SMP 33
34 Sincronización Puntos importantes: Chequear siempre el predicado. después de obtener el bloqueo del mutex y antes de llamar a la función de espera; al retornar de la función de espera. Lo mejor es esperar dentro de un lazo el cambio de estado. 6. Programación paralela de sistemas SMP 34
35 Sincronización Señalización de cambio de estado: Señalizar a una sola hebra: int ptread_cond_signal(pthread_cond_t *cond); Necesitamos señalizar a sólo una hebra el cambio de estado. Cualquiera de las hebras en espera puede procesar ese cambio. Señalizar a todas las hebras simultáneamente: int ptread_cond_broadcast(pthread_cond_t *cond); No es imprescindible bloquear el mutex asociado a una variable de estado antes de señalizarla. Puede ser más eficiente en muchos sistemas. Pero si entre la señalización y el retorno otra hebra adquiere el mutex, la hebra señalizada ha de esperar que ésta lo libere. Puede darse así la inversión de prioridad. 6. Programación paralela de sistemas SMP 35
36 VARIABLES DE CONDICIÓN Hebra 1 Hebra 2 Hebra 3 Variable de condición Señal de hebra 1 sin hebras esperando Hebra 1 espera Hebra 2 espera Señal de hebra 3 despierta hebra1 Hebra 3 espera Tiempo de espera de hebra 3 superado Hebra 3 espera con limite de tiempo Hebra 1 broadcast Despiertan 2 y 3 6. Programación paralela de sistemas SMP 36
37 Visibilidad de la memoria entre hebras La norma implica seguir estas reglas: Una hebra recién creada ve en la memoria los mismos valores que la hebra que la creó. Una hebra que adquiere un mutex ve en la memoria los mismos valores que la hebra que previamente liberó el mutex. Una hebra que hace join con otra que termina ve en memoria los mismos valores que ésta. Una hebra que es señalizada ve en memoria los mismos valores que la hebra señalizadora. Cualquier dato escrito después de alguna de las acciones precedentes no se garantiza que sea visto por la hebra afectada. No se puede establecer supuestos respecto al orden en que los datos se escribirán en memoria. 6. Programación paralela de sistemas SMP 37
38 Paradigmas de uso Existen muchas soluciones para estructurar una solución de tipo hebra. Los paradigmas básicos son: Modelo trabajo en cadena. Modelo grupo de trabajo. Modelo cliente-servidor. Combinación de modelos. 6. Programación paralela de sistemas SMP 38
39 Paradigmas de uso Modelo trabajo en cadena. El trabajo se descompone en una serie de tareas secuenciales, con una entrada y una salida claramente definidas. Cada hebra realiza una o más de estas tareas secuenciales sobre conjuntos de datos sucesivos, pasando el resultado a otra hebra para realice el siguiente paso. 6. Programación paralela de sistemas SMP 39
40 Paradigmas de uso Modelo trabajo en cadena: Entrada Hebra A Hebra B Hebra C Salida 6. Programación paralela de sistemas SMP 40
41 Paradigmas de uso Modelo grupo de trabajo. El trabajo se descompone en tareas paralelas. Se descompone un conjunto de datos en subconjuntos, cada uno de los cuales será procesado por una hebra. El concepto es en parte similar a una máquina tipo SIMD. Un grupo de trabajo es un conjunto de hebras que realizan procesamiento independiente sobre conjuntos distintos de datos. En este sentido se puede comparar más a un MIMD. 6. Programación paralela de sistemas SMP 41
42 Paradigmas de uso Modelo grupo de trabajo: Hebra A Entrada Hebra B Salida Hebra C 6. Programación paralela de sistemas SMP 42
43 Paradigmas de uso Modelo cliente-servidor. El servidor (o servidores) realiza una determinada tarea especializada. El cliente pide al servidor la realización de ese trabajo y, generalmente, procede a realizar otras tareas, por ejemplo, solicitar otros trabajos a otros servidores. El cliente se limita así a coordinar las tareas entre distintos servidores. Por eso este modelo se conoce también como capataz-trabajadores. 6. Programación paralela de sistemas SMP 43
44 Paradigmas de uso Modelo cliente-servidor: Entrada A Salida A Entrada B Servidor Salida B Entrada C Salida C 6. Programación paralela de sistemas SMP 44
45 Paradigmas de uso Combinación de modelos. Los modelos se pueden combinar de cualquier modo imaginable, para adaptarse a las necesidades. Ejemplos: Una fase de un modelo trabajo en cadena se puede implementar usando cliente-servidor. Un servidor puede estar implementado usando trabajo en cadena. 6. Programación paralela de sistemas SMP 45
46 Programación avanzada Inicialización única. Objetos atributo. Atributos de mutex. Atributos de variable de estado. Atributos de hebra. Cancelación. 6. Programación paralela de sistemas SMP 46
47 Programación avanzada Inicialización única. Se utiliza cuando hay alguna o algunas operaciones que han de ser realizadas solamente una vez por no importa qué hebra. Ejemplos: inicialización de variables, creación de mutexes, creación de datos específicos de hebra, etc. Normalmente usaremos una variable booleana para controlar, protegida por un mutex inicializado estáticamente. En un programa estas operaciones se realizan típicamente en el main. Si esto no es posible, (por ejemplo, en una librería) usamos la función pthread_once. 6. Programación paralela de sistemas SMP 47
48 Programación avanzada Objeto básico: pthread_once_t once_control = PTHREAD_ONCE_INIT; Funciones relacionadas: int pthread_once(pthread_once_t *once_control, void (*rutina_inicio)(void)); La función rutina_inicio será ejecutada sólo una vez por no importa qué hebra. La pthread_once comprueba primero la variable de control once_control, para determinar si se ha completado ya la inicialización. Al terminar, la función llamante tiene garantizada la inicialización. 6. Programación paralela de sistemas SMP 48
49 Programación avanzada Objetos atributo. Un objeto atributo es una lista extendida de argumentos que se añade cuando se van a crear ciertos objetos. Permite que la creación de esos objetos sea sencilla, para el neófito, pero flexible para que un experto pueda sacar todo el partido. Se pueden aplicar a: Atributos de mutex. Atributos de variable de estado. Atributos de hebra. No todas las implementaciones soportan todos los atributos. 6. Programación paralela de sistemas SMP 49
50 Programación avanzada Atributos de mutex. Objeto básico: pthread_mutexattr_t attr; Creación: int pthread_mutexattr_init(pthread_mutexattr_t *attr); Destrucción: int pthread_mutexattr_destroy(pthread_mutexattr_t *attr); Atributo soportado: compartición del mutex entre procesos. int pthread_mutexattr_getpshared(pthread_mutexattr_t *attr, int *pshared); int pthread_mutexattr_setpshared(pthread_mutexattr_t *attr, int pshared); 6. Programación paralela de sistemas SMP 50
51 Programación avanzada Atributos de variable de condición. Objeto básico: pthread_condattr_t attr; Creación: int pthread_condattr_init(pthread_condattr_t *attr); Destrucción: int pthread_condattr_destroy(pthread_condattr_t *attr); Atributo soportado: compartición de la variable de condición entre procesos. int pthread_condattr_getpshared(pthread_condattr_t *attr, int *pshared); int pthread_condattr_setpshared(pthread_condattr_t *attr, int pshared); 6. Programación paralela de sistemas SMP 51
52 Programación avanzada Atributos de hebra. Objeto básico: pthread_attr_t attr; Creación: int pthread_attr_init(pthread_attr_t *attr); Destrucción: int pthread_attr_destroy(pthread_attr_t *attr); 6. Programación paralela de sistemas SMP 52
53 Programación avanzada Atributos soportados para hebra. Detach state: Si el identificador de hebra puede usarse para hacer JOIN, se trata de una hebra JOINABLE. El valor del atributo será PTHREAD_CREATE_JOINABLE. Si cuando la hebra termina, puede devolver inmediatamente todos sus recursos al sistema operativo, la hebra es DETACHED. El valor del atributo será PTHREAD_CREATE_DETACHED. Por defecto las hebras se crean en modo JOINABLE. int pthread_attr_getdetachstate(pthread_attr_t *attr, int *detachstate); int pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate); 6. Programación paralela de sistemas SMP 53
54 Programación avanzada Atributos soportados para hebra. Tamaño de pila: En algunos casos puede ser interesante modificar la cantidad de memoria reservada para la pila. Ejemplo: si la jerarquía de llamadas a funciones baja demasiados niveles. Atención: cambiar el tamaño de la pila hace el código poco portátil. int pthread_attr_getstacksize(pthread_attr_t *attr, size_t *stacksize); int pthread_attr_setstacksize(pthread_attr_t *attr, size_t stacksize); 6. Programación paralela de sistemas SMP 54
55 Programación avanzada Cancelación. Las hebras suelen terminar por sí mismas, pero a veces es interesante cancelarlas. Ejemplos: El usuario presiona el botón Cancelar. Una hebra es parte de un algoritmo redundante en que otra hebra ya ha obtenido resultados válidos. Cancelar una hebra no la mata automáticamente: depende de su estado de cancelación. Es, más bien, pedirle de forma educada que termine. Necesitamos su identificación: int pthread_cancel(pthread_t thread); 6. Programación paralela de sistemas SMP 55
56 Programación avanzada Cancelación. Se codifica mediante dos bits: Bit de estado: enable disable Bit de tipo: deferred asynchronous Por defecto, la cancelación es deferred. Significa que sólo puede ocurrir en ciertos puntos del programa, en que la propia hebra comprueba si se le ha pedido terminar. Ejemplo: al esperar el cambio de una variable de condición, al leer o escribir un fichero, etc. Se puede pedir explícitamente la comprobación mediante pthread_testcancel(void); 6. Programación paralela de sistemas SMP 56
57 Programación avanzada Cancelación. En el tipo asíncrono indicamos que la hebra puede finalizar inmediatamente, sin ulteriores comprobaciones. Funciones de cambio de tipo y estado: int pthread_setcancelstate(int state, int *oldstate); Los valores de state pueden ser: PTHREAD_CANCEL_ENABLE PTHREAD_CANCEL_DISABLE int pthread_setcanceltype(int type, int *oldtype); Los valores de type pueden ser: PTHREAD_CANCEL_DEFERRED PTHREAD_CANCEL_ASYNCHRONOUS 6. Programación paralela de sistemas SMP 57
58 Programación avanzada Cancelación. Funciones para insertar una rutina de limpieza antes de que se ejecute la cancelación: int pthread_cleanup_push(void (*rutina)(void *), void *arg); Envía la rutina rutina a la pila de handlers de limpieza. Será ejecutada si: Si es cancelada la hebra. Si la hebra ejecuta pthread_exit Si la hebra ejecuta pthread_cleanup_pop con un valor de argumento distinto de cero. int pthread_cleanup_pop(int execute); Saca de la pila el handler introducido por una llamada a la pthread_cleanup_push. Además lo ejecuta si el argumento es distinto de cero. 6. Programación paralela de sistemas SMP 58
59 Errores frecuentes Inercia de las hebras. Competición entre las hebras. Evitar abrazos mortales. Inversión de prioridad. Compartición de variables de estado en diferentes predicados. Compartición de variables privadas. Pila Problemas de rendimiento. 6. Programación paralela de sistemas SMP 59
60 Errores frecuentes Inercia de las hebras. Recordar siempre que las hebras son asíncronas. En un sistema monoprocesador, una hebra que crea otra tiene una cierta ventaja sobre ella en cuanto al momento del comienzo de ejecución: hay un ligero sincronismo. También puede pasar lo mismo en un multiprocesador si se ha alcanzado el límite de procesadores disponibles. Todo esto crea la ilusión de la inercia. Sin embargo, nunca se debe basar el código en suponer que una hebra recién creada tarda en arrancar. 6. Programación paralela de sistemas SMP 60
61 Errores frecuentes Competición entre las hebras. La competición se da cuando dos o más hebras quieren llegar o hacer lo mismo a la vez. Sólo una de ellas gana la competición. Cuál gana viene dado por muchos factores, muchos de ellos fuera de control. No olvidar que: una hebra puede ser interrumpida en cualquier punto arbitrario por un plazo indefinido de tiempo; no existe más orden entre ellas que el causado por el programador; planificación no es lo mismo que sincronización. 6. Programación paralela de sistemas SMP 61
62 Errores frecuentes Evitar abrazos mortales Los abrazos mortales surgen por sincronización errónea. La hebra A tiene el recurso 1 y no puede seguir hasta tener el recurso 2; la hebra B tiene el recurso 2 y no puede seguir hasta tener el recurso 1. Los recursos más conflictivos suelen ser los mutexes. Se debe evitar bloquear más de un mutex simultáneamente. 6. Programación paralela de sistemas SMP 62
63 Errores frecuentes Inversión de prioridad Este problema suele estar asociado a las aplicaciones de tiempo real. Ocurre cuando una hebra de alta prioridad es bloqueada en su ejecución por otra hebra de baja prioridad. Ejemplo: una hebra de baja prioridad bloquea un mutex; es interrumpida por una hebra de alta prioridad que quiere bloquear el mismo mutex y, por lo tanto, queda bloqueada; una tercera hebra de prioridad media impide la ejecución y desbloqueo del mutex de la hebra de baja prioridad; Resultado: la hebra de alta prioridad queda indefinidamente bloqueada. 6. Programación paralela de sistemas SMP 63
64 Errores frecuentes Compartición de variables de estado en diferentes predicados. Cada variable debe usarse para comprobar una y sólo una condición. Si no se hace así, puede que la señalización de la condición despierte a la hebra que no esperaba por ella... y el programa se para. Compartición de variables privadas. Pila Se puede hacer siempre que se garantice que la función a la que pertenece la pila compartida no hace return mientras el resto de hebras usuarias no hayan terminado de hacer uso de ella. Atención a los punteros no inicializados! 6. Programación paralela de sistemas SMP 64
65 Errores frecuentes Problemas de rendimiento. Atención al paralelismo serializado. Usar un sólo gran mutex para acceder a una librería es un paralelismo muy grosero pero usar demasiados mutexes penaliza fuertemente el rendimiento. Para evitar contención con el cache, es bueno alinear y separar datos usados por diferentes hebras y que afecten sustancialmente al rendimiento. 6. Programación paralela de sistemas SMP 65
66 Programa ejemplo Presentamos una aplicación para obtener la lista de números primos hasta una cierta cantidad. Utilizamos el paradigma de grupo de trabajo. Hacemos uso de mutexes, variables de estado, predicados, estados de cancelación, etc. 6. Programación paralela de sistemas SMP 66
67 Programa ejemplo /* Ejemplo de búsqueda de números primos */ #include <pthread.h> #include <stdio.h> #include <stdlib.h> #include <errno.h> /* Constantes usadas */ #define workers 5 /* Hebras que realizan la búsqueda */ #define request 110 /* Primos a encontrar */ /* * Macros */ #define check(status,string) if (status!= 0) { \ errno = status; \ fprintf(stderr, "%s status %d: %s\n", \ string, status, strerror(status)); \ } 6. Programación paralela de sistemas SMP 67
68 Programa ejemplo /* Datos globales */ pthread_mutex_t prime_list = PTHREAD_MUTEX_INITIALIZER; /* Mutex para el primo */ pthread_mutex_t current_mutex = PTHREAD_MUTEX_INITIALIZER; /* Número actual */ pthread_mutex_t cond_mutex = PTHREAD_MUTEX_INITIALIZER; /* Mutex para arranque */ pthread_cond_t cond_var = PTHREAD_COND_INITIALIZER; /* Variable de estado para el arranque */ int current_num = 1; /* Siguiente número a comprobar */ int thread_hold = 1; /* Número asociado al estado */ int count = 1; /* Cuenta de números primos e índice a los mismos */ int primes[request]; /* Reserva de primos acceso sincronizado */ pthread_t threads[workers]; /* Matriz con las hebras trabajadoras */ static void unlock_cond(void *arg) { int status; status = pthread_mutex_unlock(&cond_mutex); check(status, "Mutex_unlock"); } 6. Programación paralela de sistemas SMP 68
69 Programa ejemplo /* Rutina de trabajo. Cada hebra arranca con esta rutina. Se realiza primero una espera diseñada para sincronizar los trabajadores con el capataz. Cada trabajador hace después su turno tomando un número del que determina si es primo o no. */ void *prime_search(void *arg) { int numerator; /* Usada para determinar la primalidad */ int denominator; /* Usada para determinar la primalidad */ int cut_off; /* Número a comprobar dividido por 2 */ int notifiee; /* Usada durante la cancelación */ int prime; /* Flag para indicar la primalidad */ int my_number; /* Identificador de la hebra trabajadora */ int status; /* Status de las llamadas a pthread_* */ int not_done = 1; /* Predicado del lazo de trabajo */ int oldstate; /* Estado de cancelado previo */ my_number = (int)arg; 6. Programación paralela de sistemas SMP 69
70 Programa ejemplo /* */ Sincronizamos los trabajadores y el capataz usando una variable de estado cuyo predicado (thread_hold) será rellenado por el capataz. status = pthread_mutex_lock(&cond_mutex); check(status, "Mutex_lock"); pthread_cleanup_push(unlock_cond, NULL); while (thread_hold) { status = pthread_cond_wait(&cond_var, &cond_mutex); check(status, "Cond_wait"); } pthread_cleanup_pop(1); 6. Programación paralela de sistemas SMP 70
71 Programa ejemplo /* */ Realiza las comprobaciones sobre números cada vez mayores hasta encontrar el número deseado de primos. while (not_done) { /* Comprobar petición de cancelación */ pthread_testcancel(); /* Obtener siguiente número a comprobar */ status = pthread_mutex_lock(¤t_mutex); check(status, "Mutex_lock"); current_num = current_num + 2; /* Nos saltamos los pares */ numerator = current_num; status = pthread_mutex_unlock(¤t_mutex); check(status, "Mutex_unlock"); /* Verificamos primalidad hasta número/2 */ cut_off = numerator/2 + 1; prime = 1; /* Comprobamos la divisibilidad */ for (denominator = 2;((denominator < cut_off) && (prime)); denominator++) prime = numerator % denominator; 6. Programación paralela de sistemas SMP 71
72 Programa ejemplo /* */ if (prime!= 0) { /* Inhibir posibles cancelaciones */ pthread_setcancelstate(pthread_cancel_disable, &oldstate); Obtener mutex y añadir este primo a la lista. Cancelar el resto de hebras si ya se ha obtenido la cantidad pedida de primos. status = pthread_mutex_lock(&prime_list); check(status, "Mutex_lock"); if (count < request) { primes[count] = numerator; count++; } else if (count == request) { not_done = 0; count++; for (notifiee = 0; notifiee < workers; notifiee++) { if (notifiee!= my_number) { status = pthread_cancel(threads[notifiee]); check(status, "Cancel"); } } } 6. Programación paralela de sistemas SMP 72
73 Programa ejemplo } status = pthread_mutex_unlock(&prime_list); check (status, "Mutex_unlock"); /* Permitir de nuevo cancelaciones */ pthread_setcancelstate(oldstate, &oldstate); } pthread_testcancel(); } return arg; 6. Programación paralela de sistemas SMP 73
74 Programa ejemplo main() { int worker_num; /* Índice de trabajadores */ void *exit_value; /* Estado final para cada trabajador */ int list; /* Para imprimir la lista de primos encontrados */ int status; /* Status de las llamadas a pthread_* */ int index1; /* Para ordenar los primos */ int index2; /* Para ordenar los primos */ int temp; /* Parte de la ordenación */ int line_idx; /* Alineado de columna en salida */ /* Creación de las hebras trabajadoras. */ for (worker_num = 0; worker_num < workers; worker_num++) { status = pthread_create(&threads[worker_num], NULL, prime_search, (void *)worker_num); check(status, "Pthread_create"); } 6. Programación paralela de sistemas SMP 74
75 Programa ejemplo /* */ Poner a cero el predicado thread_hold y señalizar globalmente que los trabajadores pueden comenzar. status = pthread_mutex_lock(&cond_mutex); check(status, "Mutex_lock"); thread_hold = 0; status = pthread_cond_broadcast(&cond_var); check(status, "Cond_broadcast"); status = pthread_mutex_unlock(&cond_mutex); check(status, "Mutex_unlock"); 6. Programación paralela de sistemas SMP 75
76 Programa ejemplo /* */ /* */ Hacer JOIN con cada trabajador para obtener los resultados y asegurarse de que todos se han completado correctamente. for (worker_num = 0; worker_num < workers; worker_num++) { status = pthread_join(threads[worker_num], &exit_value); check(status, "Pthread_join"); Si la terminación es correcta, el valor final exit_value es igual a worker_num. } if (exit_value == (void *)worker_num) printf( Hebra %d terminada normalmente.\n", worker_num); else if (exit_value == PTHREAD_CANCELED) printf( Hebra %d fue cancelada.\n", worker_num); else printf( Hebra %d terminada con error %#lx.\n", worker_num, exit_value); 6. Programación paralela de sistemas SMP 76
77 Programa ejemplo /* */ Tomamos la lista de primos encontrados por las hebras trabajadoras y los ordenamos de menor a mayor. Puesto que las hebras han trabajado en paralelo no hay ninguna garantía respecto al orden en que están almacenados los primos. Por tanto, es necesaria la ordenación. Algoritmo de la burbuja: lo siento! for (index1 = 1; index1 < request; index1++) { for (index2 = 0; index2 < index1; index2++) { if (primes[index1] < primes[index2]) { temp = primes[index2]; primes[index2] = primes[index1]; primes[index1] = temp; } } } 6. Programación paralela de sistemas SMP 77
78 Programa ejemplo /* */ } Imprimir la lista de primos obtenidos. printf( La lista de %d primos es la siguiente:\n2", request); for (list = 1, line_idx = 1; list < request; list++, line_idx++) { if (line_idx >= 4) { printf (",\n"); line_idx = 0; } else if (line_idx > 0) { printf(",\t"); } printf("%d", primes[list]); } printf("\n"); 6. Programación paralela de sistemas SMP 78
Informática Electrónica Concurrencia
Informática Electrónica Concurrencia DSI- EIE FCEIA 2015 Que es concurrencia? Ejecución simultánea de dos o mas aplicaciones en una única plataforma de cómputo DSI EIE - FCEIA Informática Electrónica 2
Más detallesProgramación Concurrente
Master en Computación Programación Concurrente Bloque II: Programación concurrente en POSIX Tema 1. Introducción al estándar POSIX Tema 2. Sistema Operativo MaRTE OS Tema 4. Gestión del Tiempo Tema 5.
Más detallesFunción monitoreo descriptor archivo #include <sys/types.h> #include<unistd.h> #include<errno.h> extern void procesamiento_datos(char *, int); void pr
Introducción al concepto de threads Dr.. Roberto Gómez Cárdenas DCC del ITESM-CEM rogomez@itesm.mx http://homepage.cem.itesm.mx/rogomez Función monitoreo descriptor archivo #include #include
Más detallesEstándares POSIX. Estándares base
Estándares POSIX Estándares base. ntaxis y semántica con diversos aspectos del sistema operativo No especifica la implementación La mayoría basados en el lenguaje C Interfaces en diferentes lenguajes Los
Más detallesFundamentos de los Sistemas Operativos
Práctica 3 : hilos! Fundamentos de los Sistemas Operativos Grado en Ingeniería Informática Rubén García Rodríguez Alexis Quesada Arencibia Eduardo Rodríguez Barrera Francisco J. Santana Pérez José Miguel
Más detallesSISTEMAS OPERATIVOS: PROCESOS. Hilos y Procesos
SISTEMAS OPERATIVOS: PROCESOS Hilos y Procesos ADVERTENCIA 2 Este material es un simple guión de la clase: no son los apuntes de la asignatura. El conocimiento exclusivo de este material no garantiza que
Más detallesT5-multithreading. Indice
T5-multithreading 1.1 Indice Proceso vs. Flujos Librerías de flujos Comunicación mediante memoria compartida Condición de carrera Sección Crítica Acceso en exclusión mutua Problemas Abrazos mortales 1.2
Más detallesSincronización de Threads
Funciones POSIX III Funciones POSIX III Sincronización Sincronización Procesos Procesos Semáforos Semáforos (sem_t) (sem_t) Sincronización Sincronización Threads Threads Mutex Mutex (pthread_mutex_t) (pthread_mutex_t)
Más detallesAnalista Universitario en Sistemas. Sistemas Operativos. Instituto Politécnico Superior THREADS
THREADS 1 Introducción Los procesadores actuales permiten realizar muchas tareas en simultáneo En los sistemas la ejecución de las tareas puede intercalarse en un sólo procesador, y en casos de multi-procesadores,
Más detallesProcesos e hilos: cálculo de
Departamento de Automática 1 / 10 Índice Creación y sincronización de hilos Acceso a variables globales en exclusión mutua 2 / 10 Objetivo principal: obtener una aproximación al valor de empleando el método
Más detallesTaller de Programación Paralela
Taller de Programación Paralela Departamento de Ingeniería Informática Universidad de Santiago de Chile April 26, 2007 Concurrencia 2 Concurrencia y sincronización.............................................................
Más detallesPARTE II PROGRAMACION CON THREADS EN C
PARTE II PROGRAMACION CON THREADS EN C II.1 INTRODUCCION Una librería o paquete de threads permite escribir programas con varios puntos simultáneos de ejecución, sincronizados a través de memoria compartida.
Más detallesProgramación de Multitareas utilizando Hilos
Programación de Multitareas utilizando Hilos Enero/2012 Programación de Multitareas utilizando Hilos Origen de los hilos como elementos necesarios en la programación de multitareas Multihilos en un solo
Más detallesHilos de ejecución POSIX
Hilos de ejecución POSIX Ampliación de Sistemas Operativos (prácticas) E.U. Informática en Segovia Universidad de Valladolid Hilos de ejecución Concepto Un proceso convencional se caracteriza por: Ser
Más detallesSistemas Operativos. Procesos
Sistemas Operativos Procesos Agenda Proceso. Definición de proceso. Contador de programa. Memoria de los procesos. Estados de los procesos. Transiciones entre los estados. Bloque descriptor de proceso
Más detallesHilos (threads) Realizado por M. Curiel
Hilos (threads) Realizado por M. Curiel Definiciones Un proceso es una entidad que posee 2 características importantes: - Recursos: un espacio de direcciones (programas, datos, pila y un PCB), archivos,
Más detallesPOSIX-RT. Librería. Sistemas Informáticos de Tiempo Real Francisco Pastor Gomis
Librería Sistemas Informáticos de Tiempo Real Francisco Pastor Gomis 1. Estándares POSIX POSIX es el acrónimo de Interfaz de Sistemas Operativos Portables (Portable Operating Systems Interfaces). Es un
Más detallesTaller de Programación Paralela
Taller de Programación Paralela Departamento de Ingeniería Informática Universidad de Santiago de Chile April 4, 2008 y sincronización Cuando dos o más tareas (procesos o hebras) comparten algún recurso
Más detallesSincronización de Hilos POSIX
Sincronización de Hilos POSIX Sistemas Operativos (prácticas) E.U. Informática en Segovia Universidad de Valladolid Problemática Ejemplo: el problema del productor/consumidor (o del buffer acotado ) Existen
Más detallesEntorno de programación de nivel 1: La librería PCAP
Entorno de programación de nivel 1: La librería PCAP La librería libpcap nos permite capturar paquetes desde un programa C. En sistemas Windows, la librería se llama Winpcap. Para compilar cualquier programa
Más detallesPROGRAMACIÓN MULTITHREADING
ECAR 2012 PROGRAMACIÓN MULTITHREADING 1 PROGRAMACIÓN BÁSICA PROGRAMACIÓN MULTITHREADING Sergio Nesmachnow (sergion@fing.edu.uy) Gerardo Ares (gares@fing.edu.uy) Escuela de Computación de Alto Rendimiento
Más detallesInformática I Threads
Informática I Threads 28 de Setiembre 2010 1 Concepto de programación paralela. 2. 3 Concurrencia => Race Conditions. 4. 5 Funciones Concepto de Programación Paralela Computación paralela Técnica de programación
Más detallesProcesos ligeros. Arquitectura de Computadores II Universidad Carlos III de Madrid
Procesos ligeros Arquitectura de Computadores II Introducción Programa Archivo ejecutable residente en un dispositivo de almacenamiento permanente Se ejecuta por medio de la llamada exec() Proceso Es un
Más detallesProcesos y Threads Procesos y Threads. Concurrencia Concurrencia Ventajas Ventajas. Rendimiento Rendimiento (paralelismo) (paralelismo)
Procesos y Threads Procesos y Threads Procesos Procesos Threads Threads Concurrencia Concurrencia Ventajas Ventajas Modelos Modelos Información Información adicional () adicional () Preparado Preparado
Más detallesUNIVERSIDAD CARLOS III DE MADRID DEPARTAMENTO DE INFORMÁTICA INGENIERÍA EN INFORMÁTICA. ARQUITECTURA DE COMPUTADORES II 10 junio de 2006
UNIVERSIDAD CARLOS III DE MADRID DEPARTAMENTO DE INFORMÁTICA INGENIERÍA EN INFORMÁTICA. ARQUITECTURA DE COMPUTADORES II 10 junio de 2006 Para la realización del presente examen se dispondrá de 2 horas
Más detallesHilos Secciones Stallings:
Capítulo 4 Hilos Secciones Stallings: 4.1 4.3 Contenido Procesos e hilos. Hilos a nivel de núcleo y a nivel de usuario. Multiprocesador simétrico (SMP). Micronúcleos. 1 Proceso Unidad de propiedad de los
Más detallesConcurrencia. Primitivas IPC con bloqueo
Concurrencia Primitivas IPC con bloqueo Primitivas de IPC con bloqueo La solución de Peterson es correcta, pero tiene el defecto de requerir espera ocupada: Cuando un proceso quiere entrar en su región
Más detallesConcurrencia Monitores. Guillermo Román Díez
Concurrencia Monitores Guillermo Román Díez groman@fi.upm.es Universidad Politécnica de Madrid Curso 2016-2017 Guillermo Román, UPM CC: Monitores 1/25 Recursos Compartidos Pregunta La especificación de
Más detallesSISTEMAS OPERATIVOS: COMUNICACIÓN Y SINCRONIZACIÓN ENTRE PROCESOS. Desarrollo de servidores concurrentes
SISTEMAS OPERATIVOS: COMUNICACIÓN Y SINCRONIZACIÓN ENTRE PROCESOS Desarrollo de servidores concurrentes Contenido 2 Servidores de peticiones. Solución basada en procesos. Solución basada en hilos bajo
Más detallesHILOS POSIX. LABORATORIO DE SISTEMAS DE OPERACIÓN I (ci 3825) Prof. Yudith Cardinale Enero marzo 2011
HILOS POSIX LABORATORIO DE SISTEMAS DE OPERACIÓN I (ci 3825) Prof. Yudith Cardinale Enero marzo 2011 Librería #include HILOS POSIX Función que se comportará como hilo: void * mihilo(void *arg)
Más detallesConcurrencia en UNIX / LINUX. Introducción: Procesos e Hilos POSIX
Concurrencia en UNIX / LINUX Introducción: Procesos e Hilos POSIX El estándar POSIX POSIX: Interfaz de sistemas operativos portables. Basado en UNIX A pesar de que UNIX es ya de por sí estándar, había
Más detallesProgramación Concurrente
Master en Computación Programación Concurrente Bloque II: Programación concurrente en POSIX Tema 1. Introducción al estándar POSIX Tema 2. Sistema Operativo MaRTE OS Tema 3. Gestión de Threads Tema 4.
Más detallesSistemas Operativos 1
Ejercicio 1. Se desea implementar una aplicación de n procesos concurrentes, donde cada proceso ejecuta una determinada tarea en forma de pipeline. Un ejemplo de esta aplicación con n=4 sería la siguiente:
Más detallesProgramación Concurrente Recopilación de teoría referente a la materia
UNIVERSIDAD AMERICANA Programación Concurrente Recopilación de teoría referente a la materia Ing. Luis Müller Esta es una recopilación de la teoría referente a la asignatura Programación Concurrente, a
Más detallesFundamentos de los Sistemas Operativos. Tema 2. Procesos José Miguel Santos Alexis Quesada Francisco Santana
Fundamentos de los Sistemas Operativos Tema 2. Procesos 1998-2015 José Miguel Santos Alexis Quesada Francisco Santana Contenidos del Tema 2 Qué es un proceso Estructuras de datos para gestionar procesos
Más detallesIntroducción a Sistemas Operativos: Concurrencia
Introducción a Sistemas Operativos: Concurrencia Clips xxx Fr ancisco J Ballesteros 1. Semáforos Quizá la abstracción más conocida para sincronizar procesos en programación concurrente controlar el acceso
Más detallesSISTEMAS OPERATIVOS: COMUNICACIÓN Y SINCRONIZACIÓN ENTRE PROCESOS. Procesos concurrentes y problemas en la comunicación y la sincronización
SISTEMAS OPERATIVOS: COMUNICACIÓN Y SINCRONIZACIÓN ENTRE PROCESOS Procesos concurrentes y problemas en la comunicación y la sincronización Contenido 2 Concurrencia. Condiciones de carrera. Exclusión mutua
Más detallesSistemas Complejos en Máquinas Paralelas
Sistemas Complejos en Máquinas Paralelas Clase 1: OpenMP Francisco García Eijó Departamento de Computación - FCEyN UBA 15 de Mayo del 2012 Memoria compartida Las mas conocidas son las máquinas tipo Symmetric
Más detallesTaller de pthreads. Sistemas Operativos. Verano de 2009
Verano de 2009 Menú del día Hoy veremos: Introducción a pthreads Creación de threads Variables mutex Variables de condición Tutoriales de HPC Lawrence Livermore National Laboratory (http://www.llnl.gov)
Más detallesBloque I: Principios de sistemas operativos
Bloque I: Principios de sistemas operativos Tema 1. Principios básicos de los sistemas operativos Tema 2. Concurrencia Tema 3. Ficheros Tema 4. Sincronización y programación dirigida por eventos Tema 5.
Más detallesPlataformas de Tiempo Real
Master en Computación Plataformas de Tiempo Real POSIX Avanzado y Extensiones Tema 1. Ficheros y entrada/salida Tema 3. Monitorización y control del tiempo de ejecución Tema 4. Planificación EDF Tema 5.
Más detallesPlataformas de Tiempo Real
Master en Computación Plataformas de Tiempo Real POSIX Avanzado y Extensiones Tema 1. Ficheros y entrada/salida Tema 2. Gestión de Interrupciones en MaRTE OS Tema 3. Monitorización y control avanzado del
Más detallesBENEMERITA UNIVERSIDADD AUTONOMA DE PUEBLA FACULTAD DE CIENCIAS DE LA COMPUTACIÓN LICENCIATURA EN CIENCIAS DE LA COMPUTACIÓN
BENEMERITA UNIVERSIDADD AUTONOMA DE PUEBLA FACULTAD DE CIENCIAS DE LA COMPUTACIÓN LICENCIATURA EN CIENCIAS DE LA COMPUTACIÓN PROGRAMACION CONCURRENTE PARALELA Y PRACTICA 3 (PARTE 1 Y 2) HILOS POSIX NOMBRE:
Más detallesEstructura de los sistemas de cómputo
Estructura de los sistemas de cómputo Introducción Elementos básicos de un computador Registro del procesador Ejecución de las instrucciones Interrupciones Hardware de protección Introducción Qué es un
Más detallesProcesos y Threads Procesos y Threads. Rendimiento Rendimiento (paralelismo) (paralelismo) Productividad Productividad
Procesos y Threads Procesos y Threads Procesos Procesos Threads Threads Concurrencia Concurrencia Ventajas Ventajas Modelos Modelos Información Información adicional (PCB) adicional (PCB) Preparado Preparado
Más detallesProcesos e Hilos en C
Procesos e Hilos en C 6 de febrero de 2012 En esta sesión vamos a escribir programas en lenguaje C que utilicen hilos y procesos para comparar el rendimiento del sistema ante la gestión de unos y otros.
Más detallesConcurrencia de Procesos
Concurrencia de Procesos Dos o mas procesos, se dice que son concurrentes o paralelos, cuando se ejecutan al mismo tiempo. Esta concurrencia puede darse en un sistema con un solo procesador (pseudo paralelismo)
Más detalles6. Enumere tres ventajas de los ULT frente a los KLT.
1 Tarea 3 Hilos 1. Cuales bloques de control de proceso deberían pertenecer a un bloque de control de hilo y cuáles a un bloque de control de proceso en un sistema multihilo? Para modelos monohilo deben
Más detallesSISTEMAS OPERATIVOS:
SISTEMAS OPERATIVOS: Lección 8: Desarrollo de servidores concurrentes Jesús Carretero Pérez Alejandro Calderón Mateos José Daniel García Sánchez Francisco Javier García Blas José Manuel Pérez Lobato Introducción
Más detallesClases 04 y 05: Repaso de programación de sistemas basados en UNIX
Clases 04 y 05: Repaso de programación de sistemas basados en UNIX Prof. Edgardo Adrián Franco Martínez http://computacion.cs.cinvestav.mx/~efranco efranco.docencia@gmail.com Estructuras de datos (Prof.
Más detallesBloque I: Principios de sistemas operativos
Bloque I: Principios de sistemas operativos Tema 1. Principios básicos de los sistemas operativos Tema 2. Concurrencia Tema 3. Ficheros Tema 4. Sincronización y programación dirigida por eventos Tema 5.
Más detallesThreads, SMP y Microkernels. Proceso
Threads, SMP y Microkernels Proceso Propiedad de los recursos a un proceso se le asigna un espacio de dirección virtual para guardar su imagen Calendarización/ejecución sigue una ruta de ejecución la cual
Más detallesProceso. Threads, SMP, and Microkernels. Multithreading. Proceso
Proceso Threads, SMP, and Microkernels Capítulo 4 Propiedad de Recurso el proceso se ubica en un espacio de direccionamiento virtual que tiene la imagen del proceso Planificación/ejecución sigue un camino
Más detallesTema 3. Estructuras de control
Tema 3. Estructuras de control 3.1. Secuencial 3.2. Selección 3.3. Repetición 2 Objetivos Objetivos del tema: Conocer y saber la utilidad de las tres estructuras de control (secuencial, alternativa y repetitiva)
Más detallesPrácticas de Sistemas operativos
Prácticas de Sistemas operativos David Arroyo Guardeño Escuela Politécnica Superior de la Universidad Autónoma de Madrid Segunda Semana: Procesos, Procesos Padre y Procesos Hijo, familia exec() 1 Entregas
Más detallesArquitecturas cliente/servidor
Arquitecturas cliente/servidor Creación de Sockets Cliente Servidor 1 Creación de Sockets Cliente/Servidor Sockets en TCP Concepto de Hilos Definición de DAEMON Sockets en UDP 2 THREADS 3 Qué es un thread?
Más detallesProcesos Definición y Estados
Procesos Definición y Estados Profesorado de Informática CeRP del Suroeste, Uruguay Contenidos Qué es un proceso Estructuras de datos para gestionar procesos API para trabajar con procesos Hilos (threads).
Más detallesThreads. Hilos - Lightweight process - Procesos ligeros
Threads Hilos - Lightweight process - Procesos ligeros 1 Temario Concepto y Beneficios Estructuras de implementación: Servidor- Trabajador, Equipo, Pipeline Reconocimiento: En el espacio del usuario /
Más detallesComunicación y sincronización
Comunicación y sincronización Son conceptos relacionados con la interacción entre los procesos La comunicación se refiere al paso de información de un proceso a otro La sincronización corresponde al cumplimiento
Más detallesProgramación Orientada a Objetos en C++
Unidad I Programación Orientada a Objetos en C++ Programación Orientada a Objetos en C++ Programación I - 0416202 Contenido Esta lección abarca los siguientes temas: Estructura y declaración de una clase
Más detallesMC Hilda Castillo Zacatelco PROCESOS
MC Hilda Castillo Zacatelco hildacz@gmail.com PROCESOS Definición y atributos Un proceso es la instancia de un programa en ejecución. Desde el punto de vista del SO, un proceso es la entidad más pequeña
Más detallesFunciones POSIX III Funciones POSIX III. No Nombrados Nombrados. sem_open sem_open. sem_close sem_close. sem_unlink sem_unlink
Funciones POSIX III Funciones POSIX III Sincronización Sincronización Procesos Procesos Semáforos Semáforos (sem_t) (sem_t) Sincronización Sincronización Threads Threads Mutex Mutex (pthread_mutex_t) (pthread_mutex_t)
Más detallesSISTEMAS OPERATIVOS Manejo de procesos
SISTEMAS OPERATIVOS Manejo de procesos Amilcar Meneses Viveros ameneses@computacion.cs.cinvestav.mx Universidad de Occidente Presentación Concepto de proceso Despacho de procesos Operaciones sobre procesos
Más detallesSistemas operativos: una visión aplicada. Capítulo 5 Comunicación y sincronización de procesos
Sistemas operativos: una visión aplicada Capítulo 5 Comunicación y sincronización de procesos Sistema multiprogramado con un una CPU Proceso A Proceso B Proceso C Tiempo Sistemas operativos: una visión
Más detallesExisten diversas técnicas de agrupamiento. Se dividen en dos grandes categorías:
Objetivo ESCOM-IPN (Sistemas Operativos II - Practica 02) Página 1 de 6 INSTITUTO POLITÉCNICO NACIONAL ESCUELA SUPERIOR DE CÓMPUTO Practica 02 de Sistemas Operativos II Profr. Edgardo Adrián Franco Martínez
Más detallesGuillermo Román Díez
Concurrencia Creación de Procesos en Java Guillermo Román Díez groman@fi.upm.es Universidad Politécnica de Madrid Curso 2016-2017 Guillermo Román, UPM CC: Creación de Procesos en Java 1/18 Concurrencia
Más detallesPROGRAMACIÓN CONCURRENTE
PROGRAMACIÓN CONCURRENTE Lenguajes de Programación - Progr. Concurrente 1 Introducción El concepto fundamental de la programación concurrente es la noción de Proceso. Proceso: Cálculo secuencial con su
Más detallesEjercicios sobre tuberías
Boletín 3. Ejercicios sobre tuberías July 14, 016 1. Indica de manera justificada si las siguientes afirmaciones sobre la utilización de tuberías como mecanismo de sincronización entre dos procesos son
Más detallesSISTEMAS OPERATIVOS:
SISTEMAS OPERATIVOS: Lección 6: Procesos concurrentes y problemas en la comunicación y la sincronización Jesús Carretero Pérez Alejandro Calderón Mateos José Daniel García Sánchez Francisco Javier García
Más detallesSistema Operativo. Repaso de Estructura de Computadores. Componentes Hardware. Elementos Básicos
Sistema Operativo Repaso de Estructura de Computadores Capítulo 1 Explota los recursos hardware de uno o más procesadores Proporciona un conjunto de servicios a los usuarios del sistema Gestiona la memoria
Más detallesUso de recursos compartidos
Uso de recursos compartidos Cada proceso o hebra se ejecuta de forma independiente. Sin embargo, cuando varias hebras (o procesos) han de acceder a un mismo recurso, se ha de coordinar el acceso a ese
Más detallesUnidad IV: Programación concurrente (MultiHilos) 4.1. Concepto de hilo
Unidad IV: Programación concurrente (MultiHilos) 4.1. Concepto de hilo Hilo (theread) llamado también proceso ligero o subproceso, es la unidad de ejecución de un proceso y esta asociado con una secuencia
Más detallesSistemas operativos. Hasta ahora hemos visto. Relación programa-sistema operativo Gestión de memoria
Sistemas operativos UPCO ICAI Departamento de Electrónica y Automática 1 Hasta ahora hemos visto Relación programa-sistema operativo Gestión de memoria Reserva para la ejecución Pilas, heap, memoria de
Más detallesInterbloqueo. Concurrencia: Interbloqueo e Inanición
Interbloqueo Concurrencia: Interbloqueo e Inanición Capítulo 6 Bloqueo permanente de un conjunto de procesos que compiten por recursos del sistema o por comunicación con los otros No existe una solución
Más detallesConcurrencia. Concurrencia
Concurrencia Procesos y hebras Concurrencia Programación concurrente Por qué usar hebras y procesos? Ejecución de procesos Ejecución de hebras Hebras vs. Procesos Creación y ejecución de hebras La prioridad
Más detallesUNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA FACULTAD DE CIENCIAS PRACTICA DE PROCESOS HERRAMIENTAS
UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA FACULTAD DE CIENCIAS PRACTICA DE PROCESOS HERRAMIENTAS Caso 1: 1.- Necesitamos un cd o Dvd para grabar alguna de las versiones de livecd de Linux. 2.- Liga de una
Más detallesU.A.B.C. Facultad de Ingeniería Programación Estructurada UNIDAD III
UNIDAD III Funciones 3.1 Forma general de una función. C fué diseñado como un lenguaje de programación estructurado, también llamado programación modular. Por esta razón, para escribir un programa se divide
Más detallesTema 3 SUBRUTINAS. Estructura de Computadores OCW_2015 Nekane Azkona Estefanía
Tema 3 SUBRUTINAS ÍNDICE Definición e instrucciones básicas Soporte para el tratamiento de subrutinas (ejecución de la subrutina y gestión del bloque de activación) Interrupciones vs llamadas a procedimiento
Más detalles05 Funciones en lenguaje C. Diego Andrés Alvarez Marín Profesor Asociado Universidad Nacional de Colombia Sede Manizales
05 Funciones en lenguaje C Diego Andrés Alvarez Marín Profesor Asociado Universidad Nacional de Colombia Sede Manizales 1 Temario Programación funcional Declaración (prototipos) y definición de funciones
Más detallesSistemas Operativos Practica 1: procesos y concurrencia.
Sistemas Operativos Practica 1: procesos y concurrencia. Objetivos: Introducir al alumno a los conceptos de programa, concurrencia, paralelismo y proceso o tarea. Manejo del concepto de concurrencia haciendo
Más detallesSistemas Operativos Ingeniería de telecomunicaciones Sesión 3: Concurrencia
Sistemas Operativos Ingeniería de telecomunicaciones Sesión 3: Concurrencia Calendario Comienzo: Lunes 2 de noviembre y miércoles 4 de noviembre. Entrega: 16 de noviembre y 18 de noviembre. 1. Requisitos
Más detallesIntroducción a Sistemas Operativos: Ficheros
Introducción a Sistemas Operativos: Ficheros Clips Fr ancisco J Ballesteros 1. Entrada/Salida Es importante saber cómo utilizar ficheros. En UNIX, es aún más importante dado que gran parte de los recursos,
Más detalles2.2 Nombres, Ligado y Ámbito
2.2 Nombres, Ligado y Ámbito Ligado estático y dinámico, reglas de ámbito y prueba de tipos. Conceptos Nombres e Identificadores Variables Tipos Ámbito Constantes Nombres Identificador que designa en el
Más detallesPROGRAMACIÓN PARALELA. Modelos de programación paralela Paradigmas de programación paralela
PROGRAMACIÓN PARALELA Modelos de programación paralela Paradigmas de programación paralela Tipos de paralelismo Paso de mensajes Paralelismo de datos Memoria compartida Paradigmas de programación paralela
Más detallesEJERCICIOS PRÁCTICOS: LLAMADAS A PROCEDIMIENTOS REMOTOS
EJERCICIOS PRÁCTICOS: LLAMADAS A PROCEDIMIENTOS REMOTOS El objetivo de estos ejercicios es familiarizarse con la programación de servicios utilizando RPCs. A continuación se incluye una guía de programación
Más detalles1. Interfaz de llamadas a la librería de fluxes
1. Interfaz de llamadas a la librería de fluxes Se presenta a continuación un interfaz de threads de usuario construido sobre los PThreads de OSF/1 (sistema operativo de alabi/alaba). El motivo de no utilizar
Más detallesESTRUCTURAS DINÁMICAS DE DATOS (COLAS) EN C
2013 ESTRUCTURAS DINÁMICAS DE DATOS (COLAS) EN C Departamento de Computación UNAN-León TEMA 5: ESTRUCTURAS DINÁMICAS DE DATOS (COLAS) 5.1 INTRODUCCIÓN: Las colas son secuencias de elementos caracterizadas
Más detallesdirectamente indirectamente
PUNTEROS EN C PUNTEROS Permiten simular el pasaje de parámetros por referencia. Permiten crear y manipular estructuras de datos dinámicas. Su manejo es de fundamental importancia para poder programar en
Más detallesArquitectura de Sistemas
Objetivos Arquitectura de Sistemas Práctica 5: Hebras Gustavo Romero López Actualizado: 22 de mayo de 2018 Aprender a utilizar hebras de la biblioteca Pthreads. Aprender a utilizar hebras con C++11. Calcular
Más detallesBiblioteca de sistema
* Para la realización del presente examen se aconseja un tiempo de 2 horas. Teoría 1. Explique en detalle cómo se pasa una llamada al sistema operativo. El sistema operativo se activa cuando debe responder
Más detallesLa secuencia de referencias a páginas para el proceso B es:
SISTEMAS OPERATIVOS (Código: 71902048) Enero 2017 Material permitido: Solo calculadora no programable Tiempo: 2 horas N1 Aviso 1: Todas las respuestas deben estar debidamente razonadas. Aviso 2: Escriba
Más detallesProgramación Concurrente y Paralela. Unidad 1 Introducción
Programación Concurrente y Paralela Unidad 1 Introducción Contenido 1.1 Concepto de Concurrencia 1.2 Exclusión Mutua y Sincronización 1.3 Corrección en Sistemas Concurrentes 1.4 Consideraciones sobre el
Más detallesExamen de Programación Concurrente - Clave: a Junio 2008 Departamento de Lenguajes, Sistemas Informáticos e Ingeniería del Software.
Junio 2008 Programación Concurrente 1/6 Normas Examen de Programación Concurrente - Clave: a Junio 2008 Departamento de Lenguajes, Sistemas Informáticos e Ingeniería del Software Este examen es un cuestionario
Más detallesProceso Prioridad inicial Duración CPU (M) Duración E/S (N) A 0 10 mseg 1 mseg. B 5 5 mseg 5 mseg. C 10 1 mseg 10 mseg
Calificación [GII] Fundamentos de los Sistemas Operativos Convocatoria especial 10 de diciembre de 2013 Nombre y apellidos SOLUCIONES 1 2 3 4 DNI/NIE DURACIÓN: Dispone de tres horas para realizar el examen.
Más detallesSistemas Operativos Primer Recuperatorio Parcial 1
1.- El siguiente código intenta representar la solución a la siguiente problemática: Un proceso crea un conjunto de procesos hijos al mismo nivel y le asigna a cada uno una tarea determinada, cada proceso
Más detallesMessage Passing Interface (MPI)
Message Passing Interface (MPI) INTRODUCCIÓN MPI (Message Passing Interface) como es un interfaz estandarizada para la realización de aplicaciones paralelas basadas en pasaje de mensajes. El modelo de
Más detallesAcceso coordinado a recursos compartidos
Programación Concurrente en Linux Acceso coordinado a recursos compartidos Alberto Lafuente, Dep. KAT/ATC de la UPV/EHU, bajo Licencia Creative Commons 1 Contenido 1. Recursos compartidos 2. Mecanismos
Más detallesTema 5 Tabla de Símbolos
Traductores, Compiladores e Intérpretes 1 Tema 5 También se la llama tabla de nombres o tabla de identificadores y tiene dos funciones principales: - Efectuar chequeos semánticos. - Generación de código.
Más detalles