75-62 Técnicas de Programación Concurrente II 2004 Threads - C y Perl

Tamaño: px
Comenzar la demostración a partir de la página:

Download "75-62 Técnicas de Programación Concurrente II 2004 Threads - C y Perl"

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 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 detalles

Informática Electrónica Concurrencia

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 detalles

Fundamentos de los Sistemas Operativos

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

Más detalles

Analista Universitario en Sistemas. Sistemas Operativos. Instituto Politécnico Superior THREADS

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,

Más detalles

Programación de Multitareas utilizando Hilos

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

Más detalles

Sincronización de Threads

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)

Más detalles

Taller de Programación Paralela

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

Más detalles

SISTEMAS OPERATIVOS:

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

Más detalles

Hilos de ejecución POSIX

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

Más detalles

Procesos e hilos: cálculo de

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

Más detalles

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 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.

Más detalles

Taller de Programación Paralela

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.............................................................

Más detalles

Informática I Threads

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

Más detalles

PROGRAMACIÓN MULTITHREADING

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

Más detalles

Función monitoreo descriptor archivo #include <sys/types.h> #include<unistd.h> #include<errno.h> extern void procesamiento_datos(char *, int); void pr

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

Más detalles

Estándares POSIX. Estándares base

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

Más detalles

Taller de pthreads. Sistemas Operativos. Verano de 2009

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)

Más detalles

Introducción a Sistemas Operativos: Concurrencia

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

Más detalles

Sistemas Operativos Práctica 4

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

Más detalles

Práctica 8: Barreras

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

Más detalles

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 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 detalles

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 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 detalles

Concurrencia Monitores. Guillermo Román Díez

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

Más detalles

PARTE II PROGRAMACION CON THREADS EN C

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.

Más detalles

T5-multithreading. Indice

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

Más detalles

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 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 detalles

SISTEMAS OPERATIVOS:

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

Más detalles

Procesos e Hilos en C

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.

Más detalles

Sistemas Operativos 1

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:

Más detalles

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 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 detalles

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 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 detalles

Programación Concurrente

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.

Más detalles

Concurrencia. Primitivas IPC con bloqueo

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

Más detalles

SISTEMAS OPERATIVOS:

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

Más detalles

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. 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 detalles

Arquitectura de Sistemas

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

Más detalles

Acceso coordinado a recursos compartidos

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

Más detalles

Programación Concurrente

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.

Más detalles

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 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 detalles

Procesos ligeros. Arquitectura de Computadores II Universidad Carlos III de Madrid

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

Más detalles

CLUSTER FING: ARQUITECTURA Y APLICACIONES

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

Más detalles

Programación 1 Tema 5. Instrucciones simples y estructuradas

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.

Más detalles

Introducción a los Computadores ITTELSI. Curso

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

Más detalles

Threads. Hilos - Lightweight process - Procesos ligeros

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 /

Más detalles

Tema: Plantillas en C++.

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

Más detalles

Programación Concurrente

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.

Más detalles

Plataformas de Tiempo Real

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.

Más detalles

Programación Concurrente Recopilación de teoría referente a la materia

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

Más detalles

Macros LENGUAJE DE PROGRAMACIÓN ESTRUCTURADO

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

Más detalles

ISO Tema 8,

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

Más detalles

Sincronización entre procesos (aka: semáforos)

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

Más detalles

Programación con Multitareas

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

Más detalles

Nº Mat. Calificación APELLIDOS NOMBRE. CURSO 4º GRUPO Julio 2014 ASIGNATURA: SISTEMAS INFORMÁTICOS INDUSTRIALES

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

Más detalles

ASIGNATURA: SISTEMAS INFORMÁTICOS INDUSTRIALES. CURSO 4º GRUPO Julio 2015

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

Más detalles

Programación de Multitareas utilizando Hilos

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

Más detalles

Programación Concurrente

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.

Más detalles

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 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

Más detalles

ASIGNATURA: SISTEMAS INFORMÁTICOS INDUSTRIALES. CURSO 4º GRUPO Diciembre 2013

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

Más detalles

POSIX-RT. Librería. Sistemas Informáticos de Tiempo Real Francisco Pastor Gomis

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

Más detalles

La cena de los filósofos.

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

Más detalles

Bloque I: Principios de sistemas operativos

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.

Más detalles

Concurrencia. Guillermo Román Díez

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

Más detalles

Planificaciones Sistemas Operativos. Docente responsable: MENDEZ MARIANO. 1 de 6

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,

Más detalles

Planificaciones Sistemas Operativos. Docente responsable: MENDEZ MARIANO. 1 de 6

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,

Más detalles

Programación Orientada a Objetos en C++

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

Más detalles

Sistemas Operativos Ingeniería de telecomunicaciones Sesión 3: Concurrencia

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

Más detalles

Comunicación y sicronización de procesos

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

Más detalles

Planificaciones Sistemas Operativos. Docente responsable: MENDEZ MARIANO. 1 de 5

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,

Más detalles

Concurrencia en UNIX / LINUX. Introducción: Procesos e Hilos POSIX

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

Más detalles

Programación concurrente

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

Más detalles

Tipos Recursivos de Datos

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),

Más detalles

Fecha de elaboración: Agosto de 2004 Fecha de última actualización: Julio de 2010

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:

Más detalles

República Bolivariana de Venezuela Aldea Universitaria Fray Pedro de Agreda PNFSI. Introducción a lenguaje C++. Parte IV Ciclos iterativos

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

Más detalles

Á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. Á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

Más detalles

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 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

Más detalles

LABORATORIO #1 INTRODUCCIÓN AL LENGUAJE DE PROGRAMACIÓN C++

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

Más detalles

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 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

Más detalles

Fundamentos de los Sistemas Operativos. Tema 2. Procesos José Miguel Santos Alexis Quesada Francisco Santana

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

Más detalles

1 Primitivas básicas de OpenMP

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

Más detalles

Departamento de Automática

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.

Más detalles

U.A.B.C. Facultad de Ingeniería Programación Estructurada UNIDAD III

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

Más detalles

Contenido 1. INTRODUCCIÓN A LOS SISTEMAS OPERATIVOS PROCESOS Prólogo...

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...

Más detalles

7. Programación Concurrente

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

Más detalles

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) 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

Más detalles

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 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

Más detalles

Introducción al lenguaje C

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

Más detalles

Sincronización: capítulo 1

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

Más detalles

Programación 1 Tema 5. Instrucciones simples y estructuradas

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.

Más detalles

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:

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

Más detalles

Técnicas de Programac. Concurrente I PLANIFICACIONES Actualización: 2ºC/2018. Planificaciones Técnicas de Programac.

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

Más detalles

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 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 detalles

2. Problema de Algoritmia (5 puntos - 15 minutos)

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;

Más detalles

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 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

Más detalles

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 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

Más detalles

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 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

Más detalles

Concurrencia Condiciones de Carrera. Guillermo Román Díez

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

Más detalles

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. 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

Más detalles

Asignaturas antecedentes y subsecuentes

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

Más detalles

Estados de un proceso

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

Más detalles