PDF de programación - Programación Multithreading

Imágen de pdf Programación Multithreading

Programación Multithreadinggráfica de visualizaciones

Publicado el 22 de Junio del 2018
497 visualizaciones desde el 22 de Junio del 2018
688,1 KB
50 paginas
Creado hace 11a (01/08/2012)
PROGRAMACIÓN
MULTITHREADING



Sergio Nesmachnow ([email protected])

Gerardo Ares ([email protected])

Escuela de Computación de Alto Rendimiento

(ECAR 2012)



ECAR 2012 – PROGRAMACIÓN MULTITHREADING

1

PROGRAMACIÓN BÁSICA

TEMA 2:

PROGRAMACIÓN BÁSICA



PROGRAMACIÓN MULTITHREADING



Escuela de Computación de Alto Rendimiento

(ECAR 2012)

ECAR 2012 – PROGRAMACIÓN MULTITHREADING

2

PROGRAMACIÓN BÁSICA

CONTENIDO

• Introducción threads.
• Modelos de planificación.
• API de programación.

ECAR 2012 – PROGRAMACIÓN MULTITHREADING

3

PROGRAMACIÓN BÁSICA

PROGRAMACIÓN PARALELA

INTRODUCCIÓN THREADS

ECAR 2012 – PROGRAMACIÓN MULTITHREADING

4

PROGRAMACIÓN BÁSICA

INTRODUCCIÓN

• En los sistemas tradicionales UNIX los procesos tienen un espacio de

direccionamiento virtual y un hilo (thread) de ejecución.

• Sobre fines de la década de los 80 surgen los primeros sistemas UNIX con

más de un procesador (multiprocesadores).

• Los diseñadores de los sistemas operativos se abocaron al desarrollo de
sistemas escalables para las nuevas arquitecturas de multiprocesadores.
• Surgen nuevos núcleos que tienen varios hilos de ejecución y, además, se
proveen primitivas para permitir que los procesos también tengan varios
hilos de ejecución en el contexto de un proceso.

• Todos los hilos de ejecución comparten el espacio de direccionamiento del

proceso.

• No existe ningún tipo de protección de memoria entre los hilos de un mismo

proceso.

• La programación con threads debe proveer principalmente mecanismos de

sincronización entre los hilos.



ECAR 2012 – PROGRAMACIÓN MULTITHREADING

5

PROGRAMACIÓN BÁSICA

INTRODUCCIÓN

• Cada hilo contiene información privada:

– Contador de programa (ip : instruction pointer).
– Pila (Stack).
– Espacio para alojar los registros de la CPU cuando el hilo no está en

ejecución.

– Estado del hilo.

• Comparten:

– Espacio de direccionamiento.
– Archivos abiertos por el proceso.
– Señales.
– Información de conteo (accounting).



ECAR 2012 – PROGRAMACIÓN MULTITHREADING

6

PROGRAMACIÓN BÁSICA

INTRODUCCIÓN

• Beneficios:

– Mejor aprovechamiento de los recursos de procesadores en ambiente

multiprocesadores/multicores.

– Mejor velocidad de comunicación entre hilos de un mismo proceso que

entre procesos independientes del sistema.

– Dividir las aplicaciones en módulos funcionales bajo un mismo

direccionamiento virtual.

• Desventajas:

– Programación más difícil.
– Mayor dificultad de encontrar los errores (debug de la aplicación).
– Limitación en el recurso de memoria.


ECAR 2012 – PROGRAMACIÓN MULTITHREADING

7

PROGRAMACIÓN BÁSICA

INTRODUCCIÓN

ECAR 2012 – PROGRAMACIÓN MULTITHREADING

8

PROGRAMACIÓN BÁSICA

PROGRAMACIÓN PARALELA

MODELOS DE PLANIFICACIÓN

ECAR 2012 – PROGRAMACIÓN MULTITHREADING

9

PROGRAMACIÓN BÁSICA

THREADS A NIVEL DEL NÚCLEO

• Los hilos pueden ser soportados a nivel del sistema operativo o a nivel

de usuario.

• Los dos niveles brindan diferentes formas de ejecución de los procesos

multihilados.

• El sistema operativo provee el soporte para la creación, planificación y

administración de los hilos.

• El sistema reconoce cada hilo como una unidad de ejecución distinta a

ser planificada.

• Beneficios:

– Mayor nivel de paralelismo en un sistema multiprocesador ya que

varios hilos de un proceso pueden estar ejecutando en varios
procesadores a la vez.

– Los hilos son independientes, por lo que al bloquearse un hilo de un
proceso (ej.: espera de una entrada/salida o bloqueo por espera de
algún evento) los demás hilos del proceso pueden seguir
ejecutando.

ECAR 2012 – PROGRAMACIÓN MULTITHREADING

10

PROGRAMACIÓN BÁSICA

THREADS A NIVEL DE USUARIO

• Son implementados a través de una biblioteca de usuario.
• Es la biblioteca la que provee soporte para la creación, planificación y

administración de los hilos.

• El sistema operativo desconoce la existencia de estos hilos, por lo que

solamente visualiza una unidad de ejecución.

• Beneficios:

– El cambio de contexto es menor frente a tener soporte a nivel de

núcleo.

– Permite otro sistema de planificación ya que viene dado en la

biblioteca de usuario.

• Los dos niveles brindan diferentes formas de ejecución de los procesos

multihilados.

ECAR 2012 – PROGRAMACIÓN MULTITHREADING

11

PROGRAMACIÓN BÁSICA

MODELOS DE PLANIFICACIÓN

• Brindar hilos a nivel de núcleo o de usuario permite definir distintos

modelos de planificación:
– Mx1 : Many to One.
– 1x1 : One to One.
– MxN : Many to Many.



MX1

1x1

MXN

ECAR 2012 – PROGRAMACIÓN MULTITHREADING

12

PROGRAMACIÓN BÁSICA

PROGRAMACIÓN PARALELA

API DE PROGRAMACIÓN

ECAR 2012 – PROGRAMACIÓN MULTITHREADING

13

PROGRAMACIÓN BÁSICA

CREACIÓN DE THREADS

• Función de creación: pthread_create.
• Estas funciones reciben como parámetro un puntero a función que es

el código del hilo a ejecutar.

• La función a ejecutar tiene un cabezal predefinido.
• La creación de threads generan, dentro del proceso, una estructura de

árbol.

ECAR 2012 – PROGRAMACIÓN MULTITHREADING

14

PROGRAMACIÓN BÁSICA

CREACIÓN DE THREADS

• pthread_create

• Entrada:

• pthread_t *

Variable que referenciará al thread creado.

• const pthread_attr_t *

Parámetro de inicialización.

• void * (* función_thread) (void *)

Puntero a función donde comenzará a ejecutar el thread creado.

• void *

Parámetro de entrada para el puntero a función.

• Retorno:

• int

Valor de retorno (0 ok, != 0 sino).

ECAR 2012 – PROGRAMACIÓN MULTITHREADING

15

PROGRAMACIÓN BÁSICA

CREACIÓN DE THREADS

• El tipo de dato pthread_t permite definir threads.
• Generalmente cuando se tienen un conjunto de threads que realizan

una misma tarea, se los agrupa en arreglos.



pthread_t thrs[MAX_THREADS];


• Esto permite realizar la creación en forma más simple.


for (i = 0; i < MAX_THREADS; i++) {



if (rc = pthread_create(&thrs[i],….))


}

ECAR 2012 – PROGRAMACIÓN MULTITHREADING

16

PROGRAMACIÓN BÁSICA

CREACIÓN DE THREADS

• Si el parámetro pthread_attr_t es nulo, el thread será creado con

los valores por defecto:

Atributo

Valor defecto

Resultado

Scope

PTHREAD_SCOPE_PROCESS

El thread es
configurado como
unbounded

Detachstate PTHREAD_CREATE_JOINABLE El valor de salida del
thread es preservado
luego que este
termina

Stack size

1 MB

Priority

Tamaño del stack

El thread hereda la
prioridad del padre

ECAR 2012 – PROGRAMACIÓN MULTITHREADING

17

PROGRAMACIÓN BÁSICA

CREACIÓN DE THREADS

• Se puede crear una variable de tipo pthread_attr_t para crear un

conjunto de thread con alguna característica particular.



int pthread_attr_init(pthread_attr_t *tattr);

pthread_attr_t tattr;



pthread_attr_init(&tattr);



pthread_attr_setstacksize((size_t)1024*1024*100);



pthread_create(&thr,&tattr,...);

ECAR 2012 – PROGRAMACIÓN MULTITHREADING

18

PROGRAMACIÓN BÁSICA

CREACIÓN DE THREADS

• El tamaño del stack es creado al crearse el thread y su comienzo es

alineado a un comienzo de página.


• Es importante tener en cuenta que el tamaño del stack es finito y es

más reducido que para un proceso con un único hilo.


• Generalmente al final es adicionada una página sin permisos que

permite que un proceso no acceda al stack de otro.


• Si el proceso accede genera un señal (SIGSEGV).



• Es importante tener cierto el uso que hará del stack cada thread.



ECAR 2012 – PROGRAMACIÓN MULTITHREADING

19

PROGRAMACIÓN BÁSICA

CREACIÓN DE THREADS

• Prototipo de la función debe ser el siguiente:


void * func_thread (void *)


• El parámetro es de tipo void *, lo que permite pasar cualquier tipo de

datos a la función.


struct persona {

struct fecha nacimiento;

int sexo;

...

};

struct persona p;



...

pthread_create (…., func_thread, (void *) p)



ECAR 2012 – PROGRAMACIÓN MULTITHREADING

20

PROGRAMACIÓN BÁSICA

TERMINACIÓN DE THREADS

• Función de destrucción: pthread_exit.

• Típicamente es ejecutada cuando un thread finaliza su ejecución y no

tiene nada más para realizar.


• El programador puede asignar un status a la terminación de forma que

algún otro threads (a través de la primitiva pthread_join) obtenga
un valor de la ejecución.


• La función no elimina ningún recurso asignado al proceso que haya sido

pedido por el thread.


• Si el thread main finaliza con un pthread_exit, todos los threads que

hayan sido creados permanecerán activos.

ECAR 2012 – PROGRAMACIÓN MULTITHREADING
  • Links de descarga
http://lwp-l.com/pdf12049

Comentarios de: Programación Multithreading (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad