Informática Electrónica Concurrencia

Documentos relacionados
Programación de Multitareas utilizando Hilos

Procesos e hilos: cálculo de

Fundamentos de los Sistemas Operativos

T5-multithreading. Indice

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

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

Hilos (threads) Realizado por M. Curiel

PARTE II PROGRAMACION CON THREADS EN C

Programación Concurrente

Estándares POSIX. Estándares base

Taller de Programación Paralela

HILOS POSIX. LABORATORIO DE SISTEMAS DE OPERACIÓN I (ci 3825) Prof. Yudith Cardinale Enero marzo 2011

PROGRAMACIÓN MULTITHREADING

Sincronización de Threads

Procesos Definición y Estados

Sistemas Operativos. Procesos

Hilos. Módulo 4. Departamento de Informática Facultad de Ingeniería Universidad Nacional de la Patagonia San Juan Bosco. Hilos

Hilos. Módulo 4. Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur

Taller de pthreads. Sistemas Operativos. Verano de 2009

de Gran Canaria Centro de Tecnología Médica Programación Concurrente

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

Taller de Programación Paralela

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

Informática I Threads

Hilos Secciones Stallings:

Hilos. Hilos. Revisión Modelos Multihilados Librerías de Hilos Aspectos sobre Hilos Ejemplos de Sistemas Operativos Hilos en Linux

Procesos y Threads Procesos y Threads. Rendimiento Rendimiento (paralelismo) (paralelismo) Productividad Productividad

Entorno de programación de nivel 1: La librería PCAP

Hilos de ejecución POSIX

UNIVERSIDAD CARLOS III DE MADRID DEPARTAMENTO DE INFORMÁTICA INGENIERÍA EN INFORMÁTICA. ARQUITECTURA DE COMPUTADORES II 10 junio de 2006

CLUSTER FING: ARQUITECTURA Y APLICACIONES

Threads. Hilos - Lightweight process - Procesos ligeros

Bloque I: Principios de sistemas operativos

SISTEMAS OPERATIVOS: PROCESOS. Hilos y Procesos

Sincronización de Hilos POSIX

Laboratorio I Java Threads (Silberschatz Galvin)

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

Concurrencia y paralelismo

SISTEMAS OPERATIVOS:

Procesos y Threads Procesos y Threads. Concurrencia Concurrencia Ventajas Ventajas. Rendimiento Rendimiento (paralelismo) (paralelismo)

Guillermo Román Díez

Informática Electrónica Manejadores de Dispositivos (Device Drivers)

SISTEMAS OPERATIVOS: COMUNICACIÓN Y SINCRONIZACIÓN ENTRE PROCESOS. Procesos concurrentes y problemas en la comunicación y la sincronización

Introducción a Sistemas Operativos: Concurrencia

Existen diversas técnicas de agrupamiento. Se dividen en dos grandes categorías:

Plataformas de Tiempo Real

Clases 04 y 05: Repaso de programación de sistemas basados en UNIX

Tema 4: Gestión de Procesos

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

Departamento de Automática

Arquitecturas cliente/servidor

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

Acceso coordinado a recursos compartidos

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

Concurrencia de Procesos

Programación Concurrente

Tema 2. Administración de procesos

Prácticas de Sistemas Operativos

PROGRAMACIÓN CONCURRENTE

Procesos e Hilos en C

1. Interfaz de llamadas a la librería de fluxes

Concepto de proceso. (c) 2006 Alexis Quesada / Francisco J. Santana 2

Universisdad de Los Andes Facultad de Ingeniería Escuela de Sistemas

Sistemas operativos. Hasta ahora hemos visto. Relación programa-sistema operativo Gestión de memoria

Interbloqueo. Concurrencia: Interbloqueo e Inanición

Arquitectura de Sistemas

Sistemas Complejos en Máquinas Paralelas

SISTEMAS OPERATIVOS:

PROCESOS E HILOS - Hilo

Tema 12: El sistema operativo y los procesos

SISTEMAS OPERATIVOS Manejo de procesos

BENEMERITA UNIVERSIDADD AUTONOMA DE PUEBLA FACULTAD DE CIENCIAS DE LA COMPUTACIÓN LICENCIATURA EN CIENCIAS DE LA COMPUTACIÓN

SISTEMAS OPERATIVOS: COMUNICACIÓN Y SINCRONIZACIÓN ENTRE PROCESOS. Hilos y mecanismos de comunicación y sincronización

Usando el Sistema Operativo

Biblioteca de sistema

Tema 1: Arquitectura de ordenadores, hardware y software

Sistemas operativos: una visión aplicada. Capítulo 5 Comunicación y sincronización de procesos

Informática III. Concurrencia

Concurrencia Monitores. Guillermo Román Díez

HILOS (Threads) Implementación en Java

Unidad IV: Programación concurrente (MultiHilos) 4.1. Concepto de hilo

Sistemas Operativos 1

Programación concurrente

Convivencia Gestión de Procesos

Facultad de Ingeniería Industrial y de Sistemas v1.1 MA781U CONCEPTOS INICIALES CASOS DE USO

Unidad 3 Sistemas con memoria común

6. Enumere tres ventajas de los ULT frente a los KLT.

Proceso. Threads, SMP, and Microkernels. Multithreading. Proceso

dit Concurrencia Juan Antonio de la Puente DIT/UPM UPM

Concurrencia. Concurrencia

Introducción a los Sistemas Operativos

Sistemas Operativos. Estructura de los sistemas operativos

Programación Concurrente y Paralela. Unidad 1 Introducción

Threads, SMP y Microkernels. Proceso

05 Funciones en lenguaje C. Diego Andrés Alvarez Marín Profesor Asociado Universidad Nacional de Colombia Sede Manizales

Arquitectura de Sistemas

SISTEMAS OPERATIVOS: COMUNICACIÓN Y SINCRONIZACIÓN ENTRE PROCESOS. Desarrollo de servidores concurrentes

Threads en Linux. Definición de thread. Thread implementado en Linux. Creando un thread en Linux. Ing. Marcelo Doallo Threads en Linux 1/9

Transcripción:

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

Donde hay concurrencia? En una PC En un smartphone En un sistema de tiempo real tipo automóvil En un dispositivo de comunicaciones digitales En un Raspberry PI En un PLC... DSI EIE - FCEIA Informática Electrónica 3

Cuando se manifiesta la concurrencia? Dos o mas programas intentando acceder simultáneamente a un recurso compartido Una variable en memoria Un puerto de E/S Un dispositivo... DSI EIE - FCEIA Informática Electrónica 4

Procesos Son la materialización del concepto programa en ejecución Son creados por el sistema operativo (cuando existe), por el firmware del dispositivo de cómputo ante la ocurrencia de un evento, por otro proceso o por un usuario Disponen de un contexto, que es el conjunto de recursos que permiten su funcionamiento DSI EIE - FCEIA Informática Electrónica 5

Procesos Tres áreas de memoria exclusivas: Stack: pila para alojar llamadas a funciones Text: código del programa Data: almacenamiento de variables estáticas Heap: almacenamiento de variables dinámicas Fuente: https://computing.llnl.gov/tutorials/pthreads DSI EIE - FCEIA Informática Electrónica 6

Contexto Contador de programa Registros del procesador Punteros y áreas de memoria asignada PID, UID y GID: identificadores únicos de proceso, usuario y grupo Prioridad y permisos DSI EIE - FCEIA Informática Electrónica 7

Estados de un proceso Los procesos están en estados completamente determinados temporalmente Listo Suspendido En ejecución Creación Listo Finalización Suspendido En Ejecución DSI EIE - FCEIA Informática Electrónica 8

Estados de un proceso En un dispositivo con procesador único, sólo un proceso está activo en un instante determinado. El resto de los procesos creados están suspendidos o listos En un dispositivo con múltiples procesadores -ej. un micro multicore- pude haber mas de un proceso activo en un instante dado DSI EIE - FCEIA Informática Electrónica 9

Threads Dentro de un proceso pueden coexistir dos o mas hilos de control, secuencias ordenadas de instrucciones, rutinas o funciones que se ejecuten concurrentemente Fuente: https://computing.llnl.gov/tutorials/pthreads DSI EIE - FCEIA Informática Electrónica 10

Threads y Procesos Un proceso puede crear, ejecutar y destruir múltiples threads Todos los threads creados por un proceso comparten un mismo espacio de memoria (el del proceso que las creó), es decir, pueden acceder a las variables globales de ese proceso Cada thread tiene además un espacio privado de memoria, separado del resto DSI EIE - FCEIA Informática Electrónica 11

Threads: memoria Fuente: https://computing.llnl.gov/tutorials/pthreads DSI EIE - FCEIA Informática Electrónica 12

Cuándo usar threads? Cuando un programa permite una descomposición paralela, es decir: Las tareas pueden ejecutarse paralelamente Los datos que se procesan permiten acceso concurrente Hay interacción significativa con los canales de entrada/salida Se deben procesar eventos asincrónicos Se puede jerarquizar el trabajo DSI EIE - FCEIA Informática Electrónica 13

Cuándo usar threads (ii)? Fuente: https://computing.llnl.gov/tutorials/pthreads DSI EIE - FCEIA Informática Electrónica 14

Cuándo usar threads (iii)? Básico: cuando un programa debe enviar y recibir datos por un puerto serie y a la vez interactuar con el usuario Avanzado: un programa que debe ejecutar cálculo numérico sobre un conjunto de datos, tales como una manipulación de imágenes Siempre que se requiera paralelismo DSI EIE - FCEIA Informática Electrónica 15

Cómo usar threads? Necesitamos un soporte del sistema operativo y/o el lenguaje de programación Si la plataforma de hardware es monoprocesador, los threads serán ejecutados (despachados) en un modelo de tiempo compartido (pseudo-paralelismo) Si la plataforma es multiprocesador puede haber paralelismo real DSI EIE - FCEIA Informática Electrónica 16

Pthreads Es un estándar de implementación de threads en sistemas operativos conformantes con POSIX, como Linux, Solaris, AIX, Unix, Mac OS, etc. Es un API con la forma de librería de funciones de lenguaje C Fue especificada por primera vez en el estándar POSIX 1003.1c de 1995 Hay implementaciones de esta API para múltiples sistemas operativos, entre ellos, Windows y Linux DSI EIE - FCEIA Informática Electrónica 17

Pthreads API Es una colección de funciones en lenguaje C que permiten: Crear, ejecutar y finalizar threads Sincronizar ejecución de threads Administrar recursos de threads El header a incluir es <pthread.h> Todas las funciones comienzan con el prefijo pthread_ DSI EIE - FCEIA Informática Electrónica 18

Creación y finalización de threads pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg) Crea un thread a partir de la función start_routine con los argumentos apuntados por arg pthread_exit(void *status) Usado por un thread para finalizar su ejecución pthread_cancel(pthread_t thr) envía un pedido de cancelación (terminación) al thread thr DSI EIE - FCEIA Informática Electrónica 19

Ejemplo de pthread_create() void *print_message_function( void *ptr ); main() { pthread_t thread1; char message1[80];... iret1 = pthread_create( &thread1, NULL, print_message_function, (void*) message1); DSI EIE - FCEIA Informática Electrónica 20

Paso de argumentos El último argumento de pthread_create() es un puntero a void, y se usa para pasar por referencia argumento(s) al thread a crear: pthread_create(thread, attr, rutina, void *args) Ejemplo desarrollado en computing.llnl.gov/tutorials/pthreads DSI EIE - FCEIA Informática Electrónica 21

Sincronización Hay situaciones donde se requiere sincronizar dos o mas threads, por ejemplo: El thread que muestra datos en pantalla debe esperar que estos lleguen por el puerto serie El thread que procesa tramas de video debe esperar la transformación que producen otros threads para mostrar en pantalla... DSI EIE - FCEIA Informática Electrónica 22

Sincronización en Pthreads El API Pthreads brinda varios mecanismos para obtener sincronización, uno de ellos es la operación join: pthread_join() permite que un thread espere hasta la finalización de otro En el ejemplo pthreads1.c puede verse que la función main() crea dos threads y luego espera que terminen con pthread_join() DSI EIE - FCEIA Informática Electrónica 23

Exclusión mutua (mutex) Mutex es el acrónimo de MUTual EXclusion (exclusión mutua) Un mutex es una variable utilizada para proteger datos compartidos, por ejemplo, un arreglo o un puerto de E/S Actúa como una llave cuya posesión permite a un thread acceder al recurso compartido mientras los demás threads que intenten hacerlo concurrentemente son bloqueados Un mutex se adquiere y se libera DSI EIE - FCEIA Informática Electrónica 24

Mutex: ejemplo Caso típico de aplicación: competencia entre dos threads para actualizar un contador: Thread 1 Thread 2 contador LeerContador(): 5 5 LeerContador(): 5 5 IncrementarContador() 6 IncrementarContador() 6 tiempo DSI EIE - FCEIA Informática Electrónica 25

Solución con mutex Ambas threads antes de leer el contador deben adquirir una variable tipo mutex, única, que protege al contador: pthread_mutex_lock (&mutex1); v1 = LeerContador(); v1++; IncrementarContador(v1); pthread_mutex_unlock (&mutex1); DSI EIE - FCEIA Informática Electrónica 26

Funciones Mutex Las variables mutex deben declararse e inicializarse antes de su utilización, generalmente se hace en el main() antes de crear los threads Cuando se termina de utilizar debe destruirse mediante otra función del API Cuando un thread intenta adquirir un mutex que ya está ocupado se bloquea salvo que use la función pthread_mutex_trylock() DSI EIE - FCEIA Informática Electrónica 27

API de mutex int pthread_mutex_init(pthread_mutex_t *mutex, pthread_mutexattr_t *attr); int pthread_mutex_destroy(pthread_mutex_t *mutex); int pthread_mutex_lock(pthread_mutex_t *mutex); int pthread_mutex_trylock(pthread_mutex_t *mutex); int pthread_mutex_unlock(pthread_mutex_t *mutex); DSI EIE - FCEIA Informática Electrónica 28

Variables de Condición Hay situaciones donde la ejecución de un thread está ligada al cumplimiento de una condición determinada, por ejemplo, que una variable alcance determinado valor Por ejemplo, dos threads que reciben datos y los van almacenando en memoria, mientras que un tercero, que procesará los datos recibidos, espera que se alcance un mínimo necesario DSI EIE - FCEIA Informática Electrónica 29

Variables de Condición API: int pthread_cond_init(pthread_cond_t *cond, pthread_condattr_t *attr); int pthread_cond_destroy(pthread_cond_t *cond); int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex); int pthread_cond_signal(pthread_cond_t *cond); Ejemplo: condvar.c desarrollado en computing.llnl.gov DSI EIE - FCEIA Informática Electrónica 30

Conclusiones Los threads permiten explotar el paralelismo para maximizar performance y atender múltiples tareas simultáneas No todos los problemas admiten descomposición paralela Para usar threads necesitamos soporte del sistema operativo, la plataforma y el lenguaje de programación DSI EIE - FCEIA Informática Electrónica 31