Publicado el 28 de Mayo del 2018
829 visualizaciones desde el 28 de Mayo del 2018
1,0 MB
45 paginas
Creado hace 10a (30/04/2014)
Hilos
Elementos de Programación Multihilo
Entornos de Programación Multihilo
Proyecto Universidad-Secundaria
Incorporación de contenidos de programación paralela en
la rama de tecnologías informáticas
Facultad Informática, Universidad de Murcia e
Instituto de Enseñanza Secundaria Ingeniero Juan de la Cierva
Programación Multihilo
Univ de Murcia-IES Ing. de la Cierva
Paralelismo en la rama de tecnologías informáticas
1/45
Hilos
Elementos de Programación Multihilo
Entornos de Programación Multihilo
Posible utilización
Módulo de Programación de servicios y procesos, segundo
de Desarrollo de Aplicaciones Multiplataforma
Parcialmente se podría usar en Tecnologías de la Información
y de las Comunicaciones, primero de Bachillerato
Univ de Murcia-IES Ing. de la Cierva
Paralelismo en la rama de tecnologías informáticas
2/45
Hilos
Elementos de Programación Multihilo
Entornos de Programación Multihilo
Contenido
1 Hilos
2 Elementos de Programación Multihilo
3 Entornos de Programación Multihilo
Sincronización en Pthreads
Sincronización en Java
OpenMP
Univ de Murcia-IES Ing. de la Cierva
Paralelismo en la rama de tecnologías informáticas
3/45
Hilos
Elementos de Programación Multihilo
Entornos de Programación Multihilo
Concepto de hilo
Un hilo (thread) es la porción más pequeña de instrucciones
de un programa que puede gestionar de forma independiente
el planificador (scheduler) del sistema operativo.
Normalmente los hilos se ejecutan dentro de un proceso.
Un proceso puede tener subprocesos o hilos, que son
secuencias independientes de ejecución dentro del código de
un proceso.
La gestión de hilos por el sistema operativo será más rápida
que la de procesos.
Univ de Murcia-IES Ing. de la Cierva
Paralelismo en la rama de tecnologías informáticas
4/45
Hilos
Elementos de Programación Multihilo
Entornos de Programación Multihilo
Recursos asociados a los hilos
Los hilos dentro de un proceso comparten más recursos que
los procesos: la memoria, los descriptores de fichero, la
última instrucción del código, valores de las variables
Cada hilo dentro de un proceso tiene su propia: pila, copia de
los registros, contador de programa, y posiblemente algo de
almacenamiento local
El planificador puede asociar hilos distintos a cores distintos
en un sistema multicore
Univ de Murcia-IES Ing. de la Cierva
Paralelismo en la rama de tecnologías informáticas
5/45
Hilos
Elementos de Programación Multihilo
Entornos de Programación Multihilo
Multithreading - Hyperthreading
Multithreading es el modelo de programación y ejecución de varios
hilos dentro de un proceso.
Con hyperthreading (de Intel) se simulan dos cores dentro de un
único core.
Se asignan recursos del sistema a varios hilos simultáneamente, y
se ve el sistema con el doble de cores, aunque la reducción real
en el tiempo de ejecución depende de la aplicación.
Univ de Murcia-IES Ing. de la Cierva
Paralelismo en la rama de tecnologías informáticas
6/45
Hilos
Elementos de Programación Multihilo
Entornos de Programación Multihilo
Estados de un hilo
Al igual que los procesos, los hilos se crean, se les
asigna recursos, pueden bloquearse y finalizan.
En un programa cada proceso tiene un hilo
maestro
que puede crear hilos esclavos,
cuando un hilo esclavo crea un conjunto de hilos
esclavos hablamos de paralelismo anidado.
Los hilos en un conjunto de hilos esclavos (incluido
el maestro) se ejecutan concurrentemente, pero
puede haber zonas de exclusión mutua.
Los hilos de un conjunto de esclavos se
sincronizan y finalizan su ejecución, continuando
el hilo maestro, que puede volver a crear nuevos
grupos de hilos.
Univ de Murcia-IES Ing. de la Cierva
Paralelismo en la rama de tecnologías informáticas
7/45
Hilos
Elementos de Programación Multihilo
Entornos de Programación Multihilo
Necesarios mecanismos de
creación
ejecución
finalización
comunicación
sincronización
de hilos.
Univ de Murcia-IES Ing. de la Cierva
Paralelismo en la rama de tecnologías informáticas
8/45
Hilos
Elementos de Programación Multihilo
Entornos de Programación Multihilo
Creación
Al lanzar un proceso se crea el hilo a él asociado. Este hilo puede crear grupos
de hilos esclavos, y estos a su vez pueden crear otros hilos, obteniéndose
paralelismo anidado.
Con Pthreads:
Se declara una variable de tipo pthread t
y se pone en marcha con pthread create
En OpenMP:
Se indica el números de hilos a crear con la función omp set num threads
o la variable de entorno OMP NUM THREADS
y se generan los hilos esclavos con el constructor
#pragma omp parallel
En Java:
Se crea un objeto Thread t=new...
que hereda de la clase Runnable
y se pone en marcha llamando al método t.start
(tiene otras formas de gestión de hilos)
Univ de Murcia-IES Ing. de la Cierva
Paralelismo en la rama de tecnologías informáticas
9/45
Hilos
Elementos de Programación Multihilo
Entornos de Programación Multihilo
Ejecución
Una vez puestos en marcha, el hilo maestro y los hilos que él
creó trabajan de forma conjunta.
Ejecutan el mismo programa, pero pueden ejecutar zonas de
código distinto; utilizando el identificador de hilo para
determinar las instrucciones a ejecutar.
Comparten las variables, pero se pueden declarar variables
locales a los hilos.
Puede haber problemas de coherencia en el acceso a las
variables comunes.
Hay mecanismos para asegurar el acceso en exclusión mutua
a las variables comunes.
Univ de Murcia-IES Ing. de la Cierva
Paralelismo en la rama de tecnologías informáticas
10/45
Hilos
Elementos de Programación Multihilo
Entornos de Programación Multihilo
Finalización
Se puede acabar la ejecución de un hilo con una llamada a una función de finalización o
con una finalización implícita.
Cuando un hilo finaliza, los recursos asignados a él (core, variables locales...) se liberan.
Con Pthreads:
Se puede usar la función pthread cancel para cancelar un hilo,
también se puede usar pthread kill, pero en este caso se manda una señal que
debe tratarse.
El hilo que puso en marcha otro hilo hijo lo puede esperar con pthread join
En OpenMP:
Al final del bloque del constructor #pragma omp parallel con que se creó un grupo
de hilos esclavos, el maestro espera a que acaben todos los hilos para continuar su
ejecución.
En Java:
Como se hace con los objetos en Java, al acabar la ejecución de un objeto de la
clase Thread se ejecuta el destructor y se liberan los recursos asignados.
Hay métodos para comprobar si un hilo está activo (isAlive) y para esperar a que
acabe (join).
Univ de Murcia-IES Ing. de la Cierva
Paralelismo en la rama de tecnologías informáticas
11/45
Hilos
Elementos de Programación Multihilo
Entornos de Programación Multihilo
Comunicación
Al trabajar con memoria compartida, los hilos no se
comunican por paso de mensajes, si no escribiendo y leyendo
en la memoria.
Puede haber problemas de coherencia en los datos al
leer-escribir varios hilos concurrentemente, por lo que los
lenguajes proporcionan mecanismos de sincronización y de
acceso en exclusión mutua.
Univ de Murcia-IES Ing. de la Cierva
Paralelismo en la rama de tecnologías informáticas
12/45
Hilos
Elementos de Programación Multihilo
Entornos de Programación Multihilo
Sincronización
A los recursos compartidos por varios hilos se accede en zonas de
código que se llaman secciones críticas.
Para acceder en exclusión mutua a estas zonas de código los
lenguajes pueden ofrecer distintas herramientas:
Semáforos: es un tipo abstracto de datos que se usa para
controlar el acceso a un recurso compartido (memoria,
pantalla...). Controlan el número de hilos que acceden a la
vez al recurso. Si sólo puede acceder un hilo
simultáneamente se habla de semáforos binarios, y se
accede al recurso en exclusión mutua.
Llaves: son implementaciones del tipo abstracto semáforo, y
por tanto sirven para controlar el acceso a recursos
compartidos.
Univ de Murcia-IES Ing. de la Cierva
Paralelismo en la rama de tecnologías informáticas
13/45
Hilos
Elementos de Programación Multihilo
Entornos de Programación Multihilo
Sincronización - Pthreads
Se declaran variables del tipo mutex con
pthread mutex t variable
Un hilo, antes de entrar en la sección crítica controlada por
esa variable llama a
pthread mutex lock (&mutexsum)
y al salir de la sección crítica se llama a
pthread mutex unlock (&mutexsum)
para permitir el acceso a esa sección por otro hilo.
Univ de Murcia-IES Ing. de la Cierva
Paralelismo en la rama de tecnologías informáticas
14/45
Hilos
Elementos de Programación Multihilo
Entornos de Programación Multihilo
Sincronización - Java
Se sincroniza el acceso a objetos por medio de bloques de
código synchronized:
synchronized(objecto) {
sección crítica
}
Cada hilo realizará el acceso a los datos de ese objeto,
ejecutando el método correspondiente, dentro de un bloque
sincronizado.
También es posible declarar métodos sincronizados:
public synchronized void metodo...
que aseguran que la ejecución del método se realiza en
exclusión mutua.
Univ de Murcia-IES Ing. de la Cierva
Paralelismo en la rama de tecnologías informáticas
15/45
Hilos
Elementos de Programación Multihilo
Entornos de Programación Multihilo
Sincronización - OpenMP
Hay constructores de ejecución secuencial:
#pragma omp single: el bloque de código lo ejecuta un único hilo
#pragma omp master: el bloque de código lo ejecuta el hilo maestro
#pragma omp ordered: el bloque de código se ejecuta como lo haría en
secuencial
El constructor #pragma omp critical [nombre] asegura el acceso en
exclusión mutua a un bloque de código.
Se puede asignar nombre, de forma que hilos distintos pueden acceder
concurrentemente a secciones con nombres distintos.
El constructor #pragma omp atomic asegura que una expresión se
ejecuta de forma atómica (sin interrupción).
Para sincronizar todos los hilos en un grupo se
Comentarios de: Programación Multihilo - Proyecto Universidad-Secundaria - Incorporación de contenidos de programación paralela en la rama de tecnologías informáticas (0)
No hay comentarios