75-62 Técnicas de Programación Concurrente II 2004 Threads - C y Perl
|
|
- Elisa Gil Carrasco
- hace 5 años
- Vistas:
Transcripción
1 FIUBA Técnicas de Programación Concurrente II 2004 Threads - C y Perl Ing. Osvaldo Clúa Bibliografía: man de Linux, perlthrtut Wagner Dosley: "Getting started with Posix Threads" Andrae Muy B:A Pthreads Tutorial. (disponibles en Internet) Un buen libro (algo teórico) es Andrews: Foundations of Multithread, parallel and Distributed programming. Puede haber material que ayude en las páginas de sus clases en Threads Una thread es una abstracción del flujo de control de un proceso. Cada thread tiene su propia ejecución, valor del Contador de Programa, Estado y registros. En general hay dos modelos de threads: system wide y user space. Las p-threads o threads posix son un ejemplo de un sistema systme wide de threads en la que el propio sistema operativo se hace cargo de la planificación; en cambio, en perl los threads son una biblioteca que corre en el espacio del usuario. Un programa c/c++ que usa threads requiere: 1. incluir pthread.h 2. declarar variables del tipo pthread_t 3. crear un thread con pthread_create 4. un thread termina su ejecución llamando a pthread_exit( ) Como ejemplo de C ++ 1.#include <pthread.h> 2.#include <iostream> 3.#include <unistd.h> 4.using namespace std; 5. 6.// En Linux, a pesar de que cada thread es un proceso separado 7.// se ve que comparte memoria (con algo de debug) 8.// compilar con -lpthread int variable_compartida; void *func(void *arg){ 13. extern int variable_compartida; 14. int ret=1; 15. for (int i=0; i<10;i++) 16. variable_compartida++; 17. cout<<"proceso "<<getpid()<<", thread
2 "<<pthread_self() 18. <<", variable_compartida "<<variable_compartida<<endl 19. <<", &variable_compartida "<<&variable_compartida<<endl; 20. pthread_exit(reinterpret_cast<void *>(&ret)); int main(){ 23. pthread_t th1,th2; 24. extern int variable_compartida; 25. int *retorno; 26. variable_compartida=0; 27. pthread_create(&th1,null,func,null); 28. pthread_create(&th2,null,func,null); 29. for(int i=0;i<10;i++) 30. variable_compartida++; 31. pthread_join(th1,reinterpret_cast<void **> (&retorno)); 32. cout <<"Termino th1 con "<<*retorno<<endl; 33. pthread_join(th2,reinterpret_cast<void **> (&retorno)); 34. cout <<"Termino th2 con "<<*retorno<<endl; 35. cout<<"variable_compartida vale "<<variable_compartida<<endl; 36. cout<<"proceso "<<getpid()<<", thread "<<pthread_self() 37. <<", variable_compartida "<<variable_compartida<<endl 38. <<", &variable_compartida "<<&variable_compartida<<endl; 39. Si bien la ejecución de este programa muestra dos números de proceso, en el código se ve claramente que se trata de un único proceso compartiendo memoria. Una thread tiene atributos que se acceden por medio de las funciones que comienzan con pthread_attr y se pasan como segundo argumento de pthread-create. (No se pueden usar para cambiar los atributos de una thread que esté corriendo). En perl las threads son objetos (es decir, blessed references) y su implementación se conoce como ithreads (threads del intérprete). Las variables compartidas deben declararse antes de la declaración de la función. como ejemplo: 1. #! /usr/bin/perl 2. # 3. # Atencion: perl debe haber sido compilado con threads. 4. # Busque una distribucion asi preparada para probar este ejemplo -2-
3 5. # 6. use English; 7. use threads; 8. use threads::shared; my $var_comp:shared=0; 11.my $var_propia=0; sub sub1 { 14. for ($i=0;$i<10;$i++){ 15. $var_comp++;$var_propia print "En el thread ",threads->self->tid()," proceso $PID \$var_comp = $var_comp y \$var_propia=$var_propia \n" $thr1 = threads->create(\&sub1); 21.$thr2 = threads->create(\&sub1); 22.@r1=$thr1->join; 23.@r2=$thr2->join; 24.print "En el thread ",threads->self->tid()," proceso $$ \$var_comp = $var_comp y \$var_propia=$var_propia \n"; Semáforos Con el #include <semaphore.h> se incluyen en el código los semáforos POSIX que no deben confundirse con los de System V vistos en TPC1. Las operaciones de estos semáforos controlan recursos compartidos entre threads: int sem_init(sem_t *sem, int pshared, unsigned int value); int sem_wait (sem_t * sem); int sem_trywait(sem_t * sem); int sem_post(sem_t * sem); int sem_getvalue(sem_t * sem, int * sval); int sem_destroy(sem_t * sem); En Perl se usa la clase Thread::Semaphore y un ejemplo de productor consumidor sería: 1.#! /usr/bin/perl 2.#Productor consumidor conthreads y semaforos 3.# 4.use English; 5.use threads; -3-
4 6.use threads::shared; 7.use Thread::Semaphore; my $vacio= Thread::Semaphore->new(3); 11.my $lleno= Thread::Semaphore->new(0); 12.sub Produce{ 13. for ( $i=0;$i<10;$i++){ 14. $vacio->down; 15. $buffer[$i%3]=$i*100+9; 16. $lleno->up; print "Productor terminado\n"; sub Consume{ 22. for ( $i=0;$i<10;$i++){ 23. $lleno->down; 24. $x=$i%3; 25. print "Consumido \$buffer[$x]=$buffer[$x]\n"; 26. $vacio->up; print "Consumidor terminado\n"; print "Comienza el programa\n"; 32.$thr1 = threads->create(\&produce); 33.$thr2 = threads->create(\&consume); 34.@r1=$thr1->join; 35.@r2=$thr2->join; Ejercicios simples en C++ y Perl 1. Atomic Broadcast: Solucione el problema de un productor y n consumidores, para un buffer de b posiciones. 2. Filósofos jugadores. Cada filósofo antes de tomar un tenedor arroja una moneda.... Detectar e indicar cuando hubo deadlock. 3. Agua Átomos de Hidrógeno y Oxígeno vagan por el espacio (es decir, duermen un número al azar de tiempo) buscándose mutuamente para formar Agua. Cuando un átomo de Oxígeno está listo entra en el proceso Oready del que solo saldrá como Agua. Un átomo de Hidrógeno entra en Hready, del que solo saldrá como agua. Cuando se produce el encuentro de dos H y un O. alguno de los átomos (posiblemente el de O) llama a HacerAgua. Al terminar HacerAgua los tres átomos terminan su llamado. No debe haber busy wait ni deadlock ni starvation. -4-
5 Debe resolver cada ejercicio en ambos lenguajes. Exclusión mutua En pthreads, la estructura de exclusión mutua es el mutex. pthread_mutex_t fastmutex = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_t recmutex = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP; pthread_mutex_t errchkmutex = PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP; int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *mutexattr); int pthread_mutex_lock(pthread_mutex_t *mutex); int pthread_mutex_trylock(pthread_mutex_t *mutex); int pthread_mutex_unlock(pthread_mutex_t *mutex); int pthread_mutex_destroy(pthread_mutex_t *mutex); Un fastmutex no tiene memoria, en cambio un recmutex sí. Un recmutex puede comportarse como un semáforo, peor pertenece ala biblioteca pthread. El equivalente en Perl es el lock( ) que se debe aplicar sobre una variable shared. No impide el acceso a la variable, solo bloquea algún otro lock. En perl no hay unlock( ) se termina el lock al salir del bloque en que se inició. Un ejemplo en C++ 1. // thread/admin.cc 2. #include <pthread.h> 3. #include <iostream> 4. #include <unistd.h> 5. using namespace std; 6. // 7. //Administrador de un recurso único 8. // pthread_mutex_t mutex=pthread_mutex_initializer; void *usar(void * p){ 13. pthread_mutex_lock(&mutex); 14. cout<<"proceso "<<getpid()<<", thread "<<pthread_self() 15. <<" en control, una tecla para salir"<<endl; 16. cin.get(); 17. pthread_mutex_unlock(&mutex); 18. pthread_exit(0); int main(){ 21. pthread_t th1,th2,th3; 22. pthread_create(&th1,null,usar,null); 23. pthread_create(&th2,null,usar,null); 24. pthread_create(&th3,null,usar,null); 25. pthread_join(th1,null); 26. pthread_join(th2,null); 27. pthread_join(th3,null); 28. exit(0); -5-
6 Condiciones Un mutex sólo puede ser librado por la thread que hizo el lock. Las variables de condición permiten ceder el control hasta que algún predicado sobre un área compartida se cumpla. En C/C++ las operaciones sobre éstas variables son: pthread_cond_t cond = PTHREAD_COND_INITIALIZER; int pthread_cond_init(pthread_cond_t *cond, pthread_condattr_t *cond_attr); int pthread_cond_signal(pthread_cond_t *cond); int pthread_cond_broadcast(pthread_cond_t *cond); int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex); int pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex, const struct timespec *abstime); int pthread_cond_destroy(pthread_cond_t *cond); Los atributos pthread_condattr_t no están implementados en la versión Linux de pthreads, por lo que son ignorados. La interacción con los mutex se vé en el segundo parámetro de int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex) Una thread que quiere esperar debe primero hacer un pthread_mutx_lock (&mutex) y después ejecutar pthread_cond_wait(&cond,&mutex). Entonces la thread libera al mutex y espera la cond. Cuando se la libere volverá a tomar al mutex. La thread que libera, después de testear la cond, hará un pthread_cond_signal(&cond) despertando a una thread que se encuentre en estado de espera (si la hay), pero retiene el mutex. También puede optar por hacer un pthread_cond_broadcast(&cond) liberando a todas las que estuvieran esperando, sin embargo las recién despiertas se secuencializarán al re-entrar en el mutex. Siguiendo atentamente el ejemplo que sigue en C++ puede entenderse el funcionamiento: 1.// thread/cond.cc 2.#include <pthread.h> 3.#include <iostream> 4.#include <unistd.h> 5.using namespace std; 6. 7.// 8.//prueba de las variables de condicion 9.// pthread_mutex_t mutex=pthread_mutex_initializer; 12.pthread_cond_t uno, dos; -6-
7 void* lathread(void * arg){ // volvamos el parámetro a su clase original 17. int a=*reinterpret_cast<int*> (arg); 18. pthread_mutex_lock(&mutex); 19. cout<<"soy la thread "<<pthread_self()<<" con arg=" 20. <<a<<" teniendo el mutex."<<endl; 21. pthread_cond_wait(&uno,&mutex); 22. cout<<"soy la thread "<<pthread_self()<<" con arg=" 23. <<a<<" ya paso la cond uno y espero la dos."<<endl; 24. pthread_cond_wait(&dos,&mutex); 25. cout<<"soy la thread "<<pthread_self()<<" con arg=" 26. <<a<<" ya paso la dos y me voy."<<endl; 27. pthread_mutex_unlock(&mutex); int main(){ 31. pthread_t th[5]; 32. cout<<"proceso principal, un broadcast a dos que deberia perderse. "<<endl; 33. pthread_cond_broadcast(&dos); 34. for (int i=1;i<=5;i++){ 35. pthread_create(&th[i-i], NULL,laThread,static_cast<void*>(&i)); for (int i=1;i<=5;i++){ 38. cout<<"main: con [enter] hago signal cond uno por vez "<<i<<endl; 39. cin.get(); 40. pthread_cond_signal(&uno); cout<<"main: con [enter] hago signal cond dos con broacast."<<endl; 43. cin.get(); 44. pthread_cond_broadcast(&dos); 45. for (int i=1;i<=5;i++){ 46. pthread_join(th[i-1],null);
8 En Perl, las funciones cond_signal, cond_wait y cond_broadcast pueden aplicarse a cualquier variable que tenga un lock. No existe entonces la distinción entre cond y mutex que hace pthreads. El ejemplo anterior quedaría como sigue (note que al no haber unlock debe usarse un bloque adicional, pruebe que pasa si no se usa ese bloque). 1.#! /usr/bin/perl 2.# 3.# Atencion: perl debe haber sido compilado con threads. 4.# Busque una distribucion asi preparada para probar este ejemplo 5.# 6.use English; 7.use threads; 8.use threads::shared; my $uno:shared; 11.my $dos:shared; sub lathread { 15. my $arg=$_[0]; 16. { #bloque del lock uno 17. lock $uno; 18. print "Thread ",threads->self->tid()," con argumento $arg teniendo el lock de uno.\n"; 19. cond_wait $uno; 20. print "Thread ",threads->self->tid()," con argumento $arg ya paso la uno y espero la dos.\n"; lock $dos; 23. cond_wait $dos; 24. print "Thread ",threads->self->tid()," con argumento $arg ya paso la dos y me voy.\n"; print "Main: un broadcast a dos que deberia perderse.\n"; 28. cond_broadcast $dos; for ($i=0;$i<5;$i++){ 31. $thr[$i] = threads->create(\&lathread,($i)); 32.for ($i=0;$i<5;$i++){ 33. print "Main: con [enter] hago cond_signal \$uno por -8-
9 vez ", $i+1,".\n"; 34. $a=<>; 35. cond_signal $uno; print "Main: con [enter] hago cond_broadcast \$dos.\n"; 38.$a=<>; 39.cond_broadcast $dos; 40. for ($i=0;$i<5;$i++){ 41. $thr[$i]->join; Mas ejercicios simples en C++ y Perl (usando locks y conditions) 4. El puente: Un puente de una sola mano tiene extremos norte y sur por donde arriban vehículos en ambas direcciones. Los vehículos que van en la misma dirección puede cruzar el puente juntos, pero no simultáneamente con otro que viene en la dirección opuesta. Modele los vehículos como procesos y programe este comportamiento, sin dar prioridad a ninguna dirección (aunque pueda darse que un tipo de autos no cruce nunca por tráfico continuo). 5. Atomic broadcast. El mismo problema de antes, pero use condiciones y fast mutex, no use mutex recursivos que funcionan como semáforos 6. Cuenta corriente: Una cuenta corriente se maneja desde muchos lugares con operaciones de retiro y deposito. Su balance nunca debe ser negativo. Un deposito no se demora nuca, pero un retiro debe esperar a que haya fondos suficientes. Debe resolver cada ejercicio en ambos lenguajes. Principios de Algoritmia Concurrente. Barrier Synchronization: Esta técnica consiste en utilizar algoritmos iterativos que calculan sucesivamente una mejor aproximación a la respuesta buscada. En general cada algoritmo manipula un arreglo de valores y ejecuta los mismos cálculos varias veces sobre este arreglo. Este arreglo se parte en porciones y una thread se encarga de cada porción. Un esquema general sería: Worker (i) { // hay n Workers repeat{ <cálculo sobre el conjunto i> esperar a que terminen los n Workers La barrera puede aparecer en cualquier parte del lazo, y pude4e, además, marcar un momento de comunicación ya sea entre workers o entre los workers y el coordinador. Esta técnica se usa para implementar los dos esquemas que se ven a continuación: Parallel Computation: Consiste en efectuar los mismos cálculos sobre distintos conjuntos de datos. Por ejemplo: cálculo de prefijos. -9-
10 Es frecuente aplicar una operación a todos los elementos de un arreglo en la forma que se conoce como reduce o scan en algunos lenguajes. Por ejemplo, el scan del arreglo [1; 2; 4; 5] es un arreglo con los elementos [1; 1+2; 1+2+4; ] Al último elemento se lo conoce como el reduce. Una aplicación inmediata es el cálculo de probabilidades acumuladas. Un algoritmo paralelo sería: Valor inicial: [1;2;3;4;5,6] 1) Hallar todas las sumas de los elementos vecinos. (2**0) Iteración 1: [1;3;5;7;9;11] 2) Hallar todas las sumas de los elementos de distancia 2. (2**1) Iteración 2: [1;3;6;10;14;18] 3) Hallar todas las sumas de los elementos de distancia 4. (2**2) Iteración 4:[1;3;6;10;15;21]... y después de ceil(log2 (n)) en nuestro caso: ceil(log2(6)) = ceil(2.585) = 3 iteraciones llegamos al resultado. Este algoritmo debe usar una barrera para impedir interferencias y es válido con cualquier operador asociativo. Bag of Tasks En este caso, el número de workers es fijo cada uno toma una tarea de la valija y la ejecuta, posiblemente generando mas tareas. Worker (){ repeat{ <tomar una tarea de la valija> if (no-hay-mas) break; <ejecutar la tarea> Es una inversión de la recursividad (acá lo que es recursivo es la cantidad de tareas) y es escalable frente a la posibilidad de agregar procesadores. Como ejemplo, podemos usar la multiplicación de matrices de nxn, por ejemplo A x B= C. Esta operación se divide en n**2 productos internos, uno para cada combinación de una fila de A y columna de B. Como primer aproximación podemos supones que tenemos menos de n procesadores disponibles. Entonces cada tarea se resume en encontrar la fila f de la matriz resultado C. En la valija hay n tareas. Podemos representar la valija por una variable proxfila e indicar que se tomó una tarea sumándole 1. Termina al haber procesado las n filas. proxfila=0; A[n,n]; B[n,n];C[n,n]; Worker (){ int fila; repeat{ fila=proxfila; proxfila++; if (fila >=n) break; -10-
11 <calcular C[fila,*]; En este ejemplo no hay barreras. Ejercicios ( No los adivinó?) Los siguientes dos ejercicios deben resolverse cada uno en un lenguaje diferente. 7. Programe en C++ o Perl el problema de scan/reduce para un operador asociativo parámetro (oportunidad para lucirse en oop o generics). 8. Programe en Perl o C++ el problema de la multiplicación de matrices. -11-
Sincronizació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
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
Fundamentos 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
Analista 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,
Programació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
Sincronizació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)
Taller 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
SISTEMAS OPERATIVOS:
SISTEMAS OPERATIVOS: Lección 7: Hilos y mecanismos de comunicación y sincronización Jesús Carretero Pérez Alejandro Calderón Mateos José Daniel García Sánchez Francisco Javier García Blas José Manuel Pérez
Hilos 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
Procesos 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
SISTEMAS OPERATIVOS: COMUNICACIÓN Y SINCRONIZACIÓN ENTRE PROCESOS. Hilos y mecanismos de comunicación y sincronización
SISTEMAS OPERATIVOS: COMUNICACIÓN Y SINCRONIZACIÓN ENTRE PROCESOS Hilos y mecanismos de comunicación y sincronización Contenido 2 Comunicación y sincronización. Semáforos. El problema de los lectores escritores.
Taller 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.............................................................
Informá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
PROGRAMACIÓ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
Funció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
Está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
Taller 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)
Introducció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
Sistemas Operativos Práctica 4
Sistemas Operativos Práctica 4 Ing. Andrés Bustamante afbustamanteg@unal.edu.co Ingeniería de Sistemas Facultad de Ingeniería Universidad de la Amazonia 2009 1. Objetivo El objetivo de la práctica es que
Práctica 8: Barreras
Arquitectura y Tecnología de Computadores 14 de febrero de 2014 Objetivos Aprender a utilizar las variables condición y las barreras de la biblioteca Pthreads. Diseñar e implementar una barrera: Barrera
SISTEMAS 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
SISTEMAS 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
Concurrencia 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
PARTE 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.
T5-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
HILOS 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)
SISTEMAS 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
Procesos 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.
Sistemas 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:
UNIVERSIDAD 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
Sistemas 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
Programació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.
Concurrencia. 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
SISTEMAS 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
Funciones 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)
Arquitectura 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
Acceso 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
Programació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.
Clases 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.
Procesos 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
CLUSTER FING: ARQUITECTURA Y APLICACIONES
CLUSTER FING: ARQUITECTURA Y APLICACIONES Gerardo Ares, Pablo Ezzatti Centro de Cálculo, Instituto de Computación FACULTAD DE INGENIERÍA, UNIVERSIDAD DE LA REPÚBLICA, URUGUAY CONTENIDO Introducción Conceptos
Programación 1 Tema 5. Instrucciones simples y estructuradas
Programación 1 Tema 5 Instrucciones simples y estructuradas Índice Instrucciones simples Instrucciones estructuradas 2 Instrucción ::= 3 Instrucciones.
Introducción a los Computadores ITTELSI. Curso
Introducción a los Computadores ITTELSI. Curso 2004-2005 PRÁCTICA 2: ESTRUCTURAS DE CONTROL Y SUBPROGRAMAS (I) Hoy vamos a practicar más conceptos sencillos del lenguaje, que nos permitan decidir qué sentencias
Threads. 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 /
Tema: Plantillas en C++.
Programación II. Guía 11 1 Facultad: Ingeniería Escuela: Computación Asignatura: Programación II Tema: Plantillas en C++. Objetivos Específicos Conocer los tipos de plantillas Utilizar las plantillas de
Programació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 5.
Plataformas 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.
Programació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
Macros LENGUAJE DE PROGRAMACIÓN ESTRUCTURADO
Macros LENGUAJE DE PROGRAMACIÓN ESTRUCTURADO Macros tipo objeto #define IDENTIFICADOR VALOR Permiten definir identificadores que son automáticamente reemplazados por un fragmento de código. Son especialmente
ISO Tema 8,
ISO Tema 8, 2017-2018 Pablo González Nalda Depto. de Lenguajes y Sistemas Informáticos 13 de abril de 2018 Modificado el 27 de abril de 2018 de la presentación 1 2 3 4 5 6 7 2 / 32 1 2 3 4 5 6 7 3 / 32
Sincronización entre procesos (aka: semáforos)
Sincronización entre procesos (aka: semáforos) DC - FCEyN - UBA Sistemas Operativos, 1c-2016 Dónde estamos? De dónde venimos? Race condition Semáforos Race condition Semáforos Primero repasemos brevemente
Programación con Multitareas
Programación con Multitareas Junio/2012 Programación con Multitareas Fundamentos de procesamiento con multitareas Programación de multitareas utilizando hilos Posix Programación de multitareas utilizando
Nº Mat. Calificación APELLIDOS NOMBRE. CURSO 4º GRUPO Julio 2014 ASIGNATURA: SISTEMAS INFORMÁTICOS INDUSTRIALES
APELLIDOS NOMBRE Nº Mat. UNIVERSIDAD POLITÉCNICA DE MADRID ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y DISEÑO INDSUTRIAL Departamento Electrónica, Automática e Informática Industrial 2. Problema de ADOO (10
ASIGNATURA: SISTEMAS INFORMÁTICOS INDUSTRIALES. CURSO 4º GRUPO Julio 2015
2. Problema de Algoritmia (5 puntos - 20 minutos) En una planificación de un proyecto se dispone de la secuencia de 10 tareas T i ordenadas parcialmente que aparece a continuación, y se necesita encontrar
Programació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
Programació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.
República Bolivariana de Venezuela Aldea Universitaria Liceo Fray Pedro de Agreda Trayecto II Desarrollo de Software
República Bolivariana de Venezuela Aldea Universitaria Liceo Fray Pedro de Agreda Trayecto II Desarrollo de Software Prof. Elías Cisneros Introducción a lenguaje C++ Parte IV Contenido 1.Introducción a
ASIGNATURA: SISTEMAS INFORMÁTICOS INDUSTRIALES. CURSO 4º GRUPO Diciembre 2013
APELLIDOS NOMBRE Nº Mat. UNIVERSIDAD POLITÉCNICA DE MADRID ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y DISEÑO INDSUTRIAL Departamento Electrónica, Automática e Informática Industrial 2. Problema de ADOO (10
POSIX-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
La cena de los filósofos.
La cena de los filósofos. Es posible encontrar diferentes soluciones para el problema de los filósofos que cenan. Para las siguientes explicaciones supondremos cinco filósofos, aunque las soluciones deberían
Bloque 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.
Concurrencia. Guillermo Román Díez
Concurrencia Semáforos Guillermo Román Díez groman@fi.upm.es Universidad Politécnica de Madrid Curso 2017-2018 Guillermo Román, UPM CC: Semáforos 1/11 Problemas de la espera activa Los algoritmos de espera
Planificaciones Sistemas Operativos. Docente responsable: MENDEZ MARIANO. 1 de 6
Planificaciones 7508 - Sistemas Operativos Docente responsable: MENDEZ MARIANO 1 de 6 OBJETIVOS 1-Estudiar y conocer en detalle los pilares fundamentales de los sistemas operativos: el Kernel y Proceso,
Planificaciones Sistemas Operativos. Docente responsable: MENDEZ MARIANO. 1 de 6
Planificaciones 7508 - Sistemas Operativos Docente responsable: MENDEZ MARIANO 1 de 6 OBJETIVOS 1-Estudiar y conocer en detalle los pilares fundamentales de los sistemas operativos: el Kernel y Proceso,
Programació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
Sistemas 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
Comunicación y sicronización de procesos
4 Comunicación y sicronización de procesos En este capítulo se presentan prácticas relacionadas con la comunicación y sincronización de procesos. El objetivo fundamental es que el alumno entienda el problema
Planificaciones Sistemas Operativos. Docente responsable: MENDEZ MARIANO. 1 de 5
Planificaciones 9503 - Sistemas Operativos Docente responsable: MENDEZ MARIANO 1 de 5 OBJETIVOS 1-Estudiar y conocer en detalle los pilares fundamentales de los sistemas operativos: el Kernel y Proceso,
Concurrencia 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
Programación concurrente
23 de Marzo de 2017 Condiciones generales Docente: Hernán Melgrati (hmelgra@...) Horario: Teóricas: Jueves de 14 a 17 Prácticas: Martes de 14 a 17 Evaluaciones: Un parcial (mediados de mayo) Un trabajo
Tipos Recursivos de Datos
1/1 Tipos Recursivos de Datos Josefina Sierra Santibáñez 27 de noviembre de 2016 2/1 Introducción La recursividad no sólo se puede aplicar a la definición de procedimientos (i.e. funciones o acciones),
Fecha de elaboración: Agosto de 2004 Fecha de última actualización: Julio de 2010
PROGRAMA DE ESTUDIO Programa Educativo: Área de Formación : Licenciatura en ciencias computacionales Integral profesional Programa elaborado por: Programación Concurrente Horas teóricas: 1 Horas prácticas:
República Bolivariana de Venezuela Aldea Universitaria Fray Pedro de Agreda PNFSI. Introducción a lenguaje C++. Parte IV Ciclos iterativos
http://aldeafraypedrodeagreda.wordpress.com Elaborado por Prof. Elías Cisneros cisneros.elias@gmail.com 23/12/09 República Bolivariana de Venezuela Aldea Universitaria Fray Pedro de Agreda PNFSI Introducción
Ámbito y Funciones. Lenguaje de Programación Estructurado. Siempre imaginé el Paraíso como algún tipo de biblioteca.
Ámbito y Funciones Lenguaje de Programación Estructurado Siempre imaginé el Paraíso como algún tipo de biblioteca. Jorge Luis Borges 23/09/2017 ST 202W - Lenguaje de Programación Estructurado 1 Recordando
Unidad 2 Recursividad. 2.1 Definición 2.2 Procedimientos Recursivos 2.3 Ejemplos de Casos Recursivos
Unidad 2 Recursividad 2.1 Definición 2.2 Procedimientos Recursivos 2.3 Ejemplos de Casos Recursivos 2.1 Definición de Recursividad La Recursividad es una técnica de programación muy poderosa usada ampliamente
LABORATORIO #1 INTRODUCCIÓN AL LENGUAJE DE PROGRAMACIÓN C++
LABORATORIO #1 INTRODUCCIÓN AL LENGUAJE DE PROGRAMACIÓN C++ C++ es un lenguaje de programación diseñado por Bjarne Stroustrup a partir de 1979. La intención de su creación fue ampliar al exitoso lenguaje
Unidad 2 Recursividad. 2.1 Definición 2.2 Procedimientos Recursivos 2.3 Ejemplos de Casos Recursivos
Unidad 2 Recursividad 2.1 Definición 2.2 Procedimientos Recursivos 2.3 Ejemplos de Casos Recursivos 2.1 Definición de Recursividad La Recursividad es una técnica de programación muy poderosa usada ampliamente
Fundamentos 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
1 Primitivas básicas de OpenMP
1 Primitivas básicas de OpenMP Consultar la página oficial de la plataforma OpenMP http://www.openmp.org/drupal/ Pragmas Es una directiva para el compilador que permite la definición de nuevas directivas
Departamento de Automática
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 2010-2011 Programación de sistemas SMP Introducción. Hebras. Sincronización.
U.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
Contenido 1. INTRODUCCIÓN A LOS SISTEMAS OPERATIVOS PROCESOS Prólogo...
1 Prólogo... xv 1. INTRODUCCIÓN A LOS SISTEMAS OPERATIVOS... 1 1.1. Conceptos generales sobre sistemas operativos... 2 1.1.1. Funciones del sistema operativo... 2 1.1.2. Componentes del sistema operativo...
7. Programación Concurrente
7. Programación Concurrente 1. Qué es la programación concurrente? Se conoce por programación concurrente a la rama de la informática que trata de las técnicas de programación que se usan para expresar
Test SITR Temas: Planificación, Sincronización, Comunicación entre Procesos, Relojes, Señales, Temporizadores (TestSITR_T4 T9)
Test SITR Temas: Planificación, Sincronización, Comunicación entre Procesos, Relojes, Señales, Temporizadores (TestSITR_T4 T9) Temas: Planificación Sincronización y Comunicación entre Procesos Funciones
Algoritmos y Estructuras de Datos Ingeniería en Informática, Curso 2º SEMINARIO DE C++ Sesión 1
Algoritmos y Estructuras de Datos Ingeniería en Informática, Curso 2º SEMINARIO DE C++ Sesión 1 Contenidos: 1. Características generales de C++ 2. Entrada/salida estándar 3. Variables y tipos de datos
Introducción al lenguaje C
Introducción al lenguaje C Programación 2 Instituto de Computación, Facultad de Ingeniería, Universidad de la República, Uruguay 2 de marzo de 2016 Programación 2 Introducción al lenguaje C 2 de marzo
Sincronización: capítulo 1
Sincronización: capítulo 1 En este apartado te presentamos cómo abordar los problemas de sincronización entre procesos que habitualmente nos pueden surgir cuando desarrollamos programas concurrentes. Para
Programación 1 Tema 5. Instrucciones simples y estructuradas
Programación 1 Tema 5 Instrucciones simples y estructuradas Índice Instrucciones simples Instrucciones estructuradas Instrucción ::= Instrucciones.
Si un candado mutex es usado por hilos en el mismo proceso pero no por hilos en diferentes procesos, los primeros dos pasos pueden simplificarse a:
Pthreads La biblioteca también soporta candados y variables de condición. Los candados pueden usarse para proteger la sección crítica, o pueden usarse en combinación con las variables de condición para
Técnicas de Programac. Concurrente I PLANIFICACIONES Actualización: 2ºC/2018. Planificaciones Técnicas de Programac.
Planificaciones 7559 - Técnicas de Programac. Concurrente I Docente responsable: GARIBALDI JULIA ELENA 1 de 5 OBJETIVOS Familiarizar al estudiante con las técnicas de Programación Concurrente, los conceptos
BENEMERITA 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:
2. Problema de Algoritmia (5 puntos - 15 minutos)
2. Problema de Algoritmia (5 puntos - 15 minutos). long long int sucesion(int n){ if(n==0) return 1; if(n==1) return 2; long long int r1=sucesion(n-1); long long int r2=sucesion(n-2); return 2*r1-3*r2;
Unidad 2. La lógica de programación. Tema 4. Arreglos y estructuras de repetición
Unidad 2. La lógica de programación Tema 4. Arreglos y estructuras de repetición Arreglos y estructuras de repetición Contenido: Introducción Arreglos Vectores Matrices De más de 2 dimensiones Estructura
Programación 1. Tema I. Conceptos y elementos básicos de Programación. Lección 1. Problemas de tratamiento de información, algoritmos y programas
Programación 1 Tema I. Conceptos y elementos básicos de Programación Lección 1. Problemas de tratamiento de información, algoritmos y programas 1 Problemas, algoritmos y programas Problemas de tratamiento
Programación de Computadores 4 Iteraciones y Decisiones. Prof. Javier Cañas. Universidad Técnica Federico Santa María Departamento de Informática
Programación de Computadores 4 Iteraciones y Decisiones Prof. Javier Cañas Universidad Técnica Federico Santa María Departamento de Informática Contenido 1 Introducción 2 Operadores Relacionales y Lógicos
Concurrencia Condiciones de Carrera. Guillermo Román Díez
Concurrencia Condiciones de Carrera Guillermo Román Díez groman@fi.upm.es Universidad Politécnica de Madrid Curso 2016-2017 Guillermo Román, UPM CC: Condiciones de Carrera 1/20 Condiciones de carrera Condición
Threads en Linux. Definición de thread. Thread implementado en Linux. Creando un thread en Linux. Ing. Marcelo Doallo Threads en Linux 1/9
Threads en Linux Definición de thread Es un mecanismo por el cual un programa puede hacer mas de una cosa al mismo tiempo. Como los procesos, los threads parecen correr simultáneamente; pero hay que tener
Asignaturas antecedentes y subsecuentes
PROGRAMA DE ESTUDIOS Programación Concurrente Área a la que pertenece: Área de Formación Integral Profesional Horas teóricas: 3 Horas prácticas: 2 Créditos: 8 Clave: F0177 Asignaturas antecedentes y subsecuentes
Estados de un proceso
Semáforos Estados de un proceso Inactivo Listo Ejecutando Completo Escribimos p.state := ready p. state := running Bloqueado Para indicar que un proceso cambia de estado Semáforo Es un tipo de dato abstracto