Unidad 4 Modelo Memoria Compartida

25
Modelo de Memoria Compartida Modelo de Hilos Unidad 4: Modelo de Memoria Compartida Ing. Matias Valdenegro T. Universidad Tecnol´ ogica Metropolitana 7 de noviembre de 2010 Matias Valdenegro UTEM Modelo de Memoria Compartida

Transcript of Unidad 4 Modelo Memoria Compartida

Page 1: Unidad 4 Modelo Memoria Compartida

Modelo de Memoria Compartida Modelo de Hilos

Unidad 4: Modelo de Memoria Compartida

Ing. Matias Valdenegro T.

Universidad Tecnologica Metropolitana

7 de noviembre de 2010

Matias Valdenegro UTEM

Modelo de Memoria Compartida

Page 2: Unidad 4 Modelo Memoria Compartida

Modelo de Memoria Compartida Modelo de Hilos

1 Modelo de Memoria Compartida

2 Modelo de HilosPOSIX ThreadsJava Threads

Matias Valdenegro UTEM

Modelo de Memoria Compartida

Page 3: Unidad 4 Modelo Memoria Compartida

Contenidos

1 Modelo de Memoria Compartida

2 Modelo de HilosPOSIX ThreadsJava Threads

Page 4: Unidad 4 Modelo Memoria Compartida

Modelo de Memoria Compartida Modelo de Hilos

Modelo de Memoria Compartida

Las tareas comparten un espacio de direcciones de memoriacomun, llamada memoria compartida.

Existe una cierta cantidad de procesadores, la cual ejecuta lastareas. Acceden a la memoria compartida a traves de un bus.

Los procesadores pueden tener diferentes capacidades,velocidad, etc. Pero en general todos los procesadores soniguales (SMP vs ASMP).

Una tarea puede leer y escribir en la memoria compartida.

El uso de un bus provoca contencion.

Matias Valdenegro UTEM

Modelo de Memoria Compartida

Page 5: Unidad 4 Modelo Memoria Compartida

Modelo de Memoria Compartida Modelo de Hilos

Matias Valdenegro UTEM

Modelo de Memoria Compartida

Page 6: Unidad 4 Modelo Memoria Compartida

Modelo de Memoria Compartida Modelo de Hilos

Matias Valdenegro UTEM

Modelo de Memoria Compartida

Page 7: Unidad 4 Modelo Memoria Compartida

Modelo de Memoria Compartida Modelo de Hilos

Ventajas

Amigable al programador.

Compartir datos entre tareas es rapido debido a la proximidadde los procesadores.

Tienen un bajo costo. Aun mas si se usan tecnologiasmulticore.

Una descomposicion de datos disjunta no requieresincronizacion.

Ampliamente disponible en hardware de consumo masivo(Comodity).

Matias Valdenegro UTEM

Modelo de Memoria Compartida

Page 8: Unidad 4 Modelo Memoria Compartida

Modelo de Memoria Compartida Modelo de Hilos

Desventajas

El cuello de botella es el acceso a la memoria compartida.

Para alivianar el cuello de botella, se usa memoria cache encada procesador.

Con el uso de memoria cache, se produce el problema decoherencia de cache.

Compartir datos entre procesos requiere sincronizacion entreestos para evitar corrupcion de datos.

Un programador descuidado puede provocar que el programacorrompa datos y tenga un comportamiento randomico. (Vercaso Therac).

Esto produce “condiciones de carrera” (Race conditions).

Matias Valdenegro UTEM

Modelo de Memoria Compartida

Page 9: Unidad 4 Modelo Memoria Compartida

Modelo de Memoria Compartida Modelo de Hilos

Matias Valdenegro UTEM

Modelo de Memoria Compartida

Page 10: Unidad 4 Modelo Memoria Compartida

Contenidos

1 Modelo de Memoria Compartida

2 Modelo de HilosPOSIX ThreadsJava Threads

Page 11: Unidad 4 Modelo Memoria Compartida

Modelo de Memoria Compartida Modelo de Hilos

Hilos (Threads)

Un hilo es un contexto de ejecucion independiente dentro deun proceso de sistema operativo.

Varios hilos dentro de un proceso de SO pueden ejecutarse endiferentes procesadores, alcanzando paralelismo.

Varios hilos ejecutandose dentro de un solo procesador seejecutan en estilo round-robin.

Matias Valdenegro UTEM

Modelo de Memoria Compartida

Page 12: Unidad 4 Modelo Memoria Compartida

Modelo de Memoria Compartida Modelo de Hilos

Matias Valdenegro UTEM

Modelo de Memoria Compartida

Page 13: Unidad 4 Modelo Memoria Compartida

Modelo de Memoria Compartida Modelo de Hilos

Matias Valdenegro UTEM

Modelo de Memoria Compartida

Page 14: Unidad 4 Modelo Memoria Compartida

Modelo de Memoria Compartida Modelo de Hilos

Matias Valdenegro UTEM

Modelo de Memoria Compartida

Page 15: Unidad 4 Modelo Memoria Compartida

Modelo de Memoria Compartida Modelo de Hilos

Hilos (Threads)

El SO provee soporte a Hilos. Windows/Linux y Mac OS X losoportan.

El planificador del SO decide que hilos se ejecutan en queprocesadores. El programador puede influir en la decision.

La creacion de un thread es barato en comparacion a crear unproceso.

Matias Valdenegro UTEM

Modelo de Memoria Compartida

Page 16: Unidad 4 Modelo Memoria Compartida

Modelo de Memoria Compartida Modelo de Hilos

APIs de Hilos

POSIX Threads (C). Windows Threads (C).

Java Threads (Java).

Matias Valdenegro UTEM

Modelo de Memoria Compartida

Page 17: Unidad 4 Modelo Memoria Compartida

Modelo de Memoria Compartida Modelo de Hilos

POSIX Threads

Inicializacion

#include <pthread.h>

int pthread_init();

Matias Valdenegro UTEM

Modelo de Memoria Compartida

Page 18: Unidad 4 Modelo Memoria Compartida

Modelo de Memoria Compartida Modelo de Hilos

POSIX Threads

Creacion

#include <pthread.h>

int pthread_create(pthread_t *thread,

const pthread_attr_t *attr,

void *(*start_routine) (void *),

void *arg);

Matias Valdenegro UTEM

Modelo de Memoria Compartida

Page 19: Unidad 4 Modelo Memoria Compartida

Modelo de Memoria Compartida Modelo de Hilos

POSIX Threads

Salida

#include <pthread.h>

int pthread_exit(void *retval);

Matias Valdenegro UTEM

Modelo de Memoria Compartida

Page 20: Unidad 4 Modelo Memoria Compartida

Modelo de Memoria Compartida Modelo de Hilos

POSIX Threads

Union

#include <pthread.h>

int pthread_join(pthread_t *thread,

void **ptr);

Matias Valdenegro UTEM

Modelo de Memoria Compartida

Page 21: Unidad 4 Modelo Memoria Compartida

Modelo de Memoria Compartida Modelo de Hilos

POSIX Threads

Ejemplo

#include <pthread.h>

void *mensaje(void *ptr)

{

printf("%s \n", (char *) ptr); return NULL;

}

int main()

{

pthread_t thread1, thread2;

pthread_create(&thread1, NULL, mensaje, (void*) "hola");

pthread_create(&thread2, NULL, mensaje, (void*) "chao");

pthread_join(thread1, NULL); pthread_join(thread2, NULL);

}

gcc -pthread codigo.c -o ejecutable

Matias Valdenegro UTEM

Modelo de Memoria Compartida

Page 22: Unidad 4 Modelo Memoria Compartida

Modelo de Memoria Compartida Modelo de Hilos

POSIX Threads

Implementaciones de Pthreads

NPTL en Linux.

pthreads-w23 en Windows.

Otras formas de acceder a threads en C++

Windows Threads.

boost::thread.

QThread.

std::thread, disponible en C++0x o C++1x.

Matias Valdenegro UTEM

Modelo de Memoria Compartida

Page 23: Unidad 4 Modelo Memoria Compartida

Modelo de Memoria Compartida Modelo de Hilos

Java Threads

Interfaz Runnable

class Test implements Runnable {

public void run() {

/* Codigo del Thread. */

}

}

Thread t = new Thread(new Test());

t.start();

Matias Valdenegro UTEM

Modelo de Memoria Compartida

Page 24: Unidad 4 Modelo Memoria Compartida

Modelo de Memoria Compartida Modelo de Hilos

Java Threads

Clase Thread

class Test extends Thread {

public void run() {

/* Codigo del Thread. */

}

}

Test t = new Test();

t.start();

Matias Valdenegro UTEM

Modelo de Memoria Compartida

Page 25: Unidad 4 Modelo Memoria Compartida

Modelo de Memoria Compartida Modelo de Hilos

Java Threads

Metodos utiles de la clase Thread

Thread.join()

Thread.sleep(long millis)

Thread.yield()

Thread.stop() (Deprecado)

Matias Valdenegro UTEM

Modelo de Memoria Compartida