Está en la página 1de 25

Modelo de Memoria Compartida

Modelo de Hilos

Unidad 4: Modelo de Memoria Compartida


Ing. Matias Valdenegro T.
Universidad Tecnolgica Metropolitana o

7 de noviembre de 2010

Matias Valdenegro Modelo de Memoria Compartida

UTEM

Modelo de Memoria Compartida

Modelo de Hilos

1 Modelo de Memoria Compartida

2 Modelo de Hilos

POSIX Threads Java Threads

Matias Valdenegro Modelo de Memoria Compartida

UTEM

Contenidos

1 Modelo de Memoria Compartida

2 Modelo de Hilos

POSIX Threads Java Threads

Modelo de Memoria Compartida

Modelo de Hilos

Modelo de Memoria Compartida


Las tareas comparten un espacio de direcciones de memoria comun, llamada memoria compartida. Existe una cierta cantidad de procesadores, la cual ejecuta las tareas. Acceden a la memoria compartida a traves de un bus. Los procesadores pueden tener diferentes capacidades, velocidad, etc. Pero en general todos los procesadores son iguales (SMP vs ASMP). Una tarea puede leer y escribir en la memoria compartida. El uso de un bus provoca contencion.

Matias Valdenegro Modelo de Memoria Compartida

UTEM

Modelo de Memoria Compartida

Modelo de Hilos

Matias Valdenegro Modelo de Memoria Compartida

UTEM

Modelo de Memoria Compartida

Modelo de Hilos

Matias Valdenegro Modelo de Memoria Compartida

UTEM

Modelo de Memoria Compartida

Modelo de Hilos

Ventajas
Amigable al programador. Compartir datos entre tareas es rapido debido a la proximidad de los procesadores. Tienen un bajo costo. Aun mas si se usan tecnologias multicore. Una descomposicion de datos disjunta no requiere sincronizacion. Ampliamente disponible en hardware de consumo masivo (Comodity).

Matias Valdenegro Modelo de Memoria Compartida

UTEM

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 en cada procesador. Con el uso de memoria cache, se produce el problema de coherencia de cache. Compartir datos entre procesos requiere sincronizacion entre estos para evitar corrupcion de datos. Un programador descuidado puede provocar que el programa corrompa datos y tenga un comportamiento randomico. (Ver caso Therac). Esto produce condiciones de carrera (Race conditions).
Matias Valdenegro Modelo de Memoria Compartida UTEM

Modelo de Memoria Compartida

Modelo de Hilos

Matias Valdenegro Modelo de Memoria Compartida

UTEM

Contenidos

1 Modelo de Memoria Compartida

2 Modelo de Hilos

POSIX Threads Java Threads

Modelo de Memoria Compartida

Modelo de Hilos

Hilos (Threads)

Un hilo es un contexto de ejecucion independiente dentro de un proceso de sistema operativo. Varios hilos dentro de un proceso de SO pueden ejecutarse en diferentes procesadores, alcanzando paralelismo. Varios hilos ejecutandose dentro de un solo procesador se ejecutan en estilo round-robin.

Matias Valdenegro Modelo de Memoria Compartida

UTEM

Modelo de Memoria Compartida

Modelo de Hilos

Matias Valdenegro Modelo de Memoria Compartida

UTEM

Modelo de Memoria Compartida

Modelo de Hilos

Matias Valdenegro Modelo de Memoria Compartida

UTEM

Modelo de Memoria Compartida

Modelo de Hilos

Matias Valdenegro Modelo de Memoria Compartida

UTEM

Modelo de Memoria Compartida

Modelo de Hilos

Hilos (Threads)

El SO provee soporte a Hilos. Windows/Linux y Mac OS X lo soportan. El planicador del SO decide que hilos se ejecutan en que procesadores. El programador puede inuir en la decision. La creacion de un thread es barato en comparacion a crear un proceso.

Matias Valdenegro Modelo de Memoria Compartida

UTEM

Modelo de Memoria Compartida

Modelo de Hilos

APIs de Hilos

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

Matias Valdenegro Modelo de Memoria Compartida

UTEM

Modelo de Memoria Compartida POSIX Threads

Modelo de Hilos

Inicializacion

#include <pthread.h> int pthread_init();

Matias Valdenegro Modelo de Memoria Compartida

UTEM

Modelo de Memoria Compartida POSIX Threads

Modelo de Hilos

Creacion

#include <pthread.h> int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);

Matias Valdenegro Modelo de Memoria Compartida

UTEM

Modelo de Memoria Compartida POSIX Threads

Modelo de Hilos

Salida

#include <pthread.h> int pthread_exit(void *retval);

Matias Valdenegro Modelo de Memoria Compartida

UTEM

Modelo de Memoria Compartida POSIX Threads

Modelo de Hilos

Union

#include <pthread.h> int pthread_join(pthread_t *thread, void **ptr);

Matias Valdenegro Modelo de Memoria Compartida

UTEM

Modelo de Memoria Compartida POSIX Threads

Modelo de Hilos

Ejemplo
#include <pthread.h> void *mensaje(void *ptr) { printf("%s \n", (char *) ptr); } 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 Modelo de Memoria Compartida UTEM

return NULL;

Modelo de Memoria Compartida POSIX Threads

Modelo de Hilos

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 Modelo de Memoria Compartida

UTEM

Modelo de Memoria Compartida Java Threads

Modelo de Hilos

Interfaz Runnable

class Test implements Runnable { public void run() { /* Codigo del Thread. */ } } Thread t = new Thread(new Test()); t.start();

Matias Valdenegro Modelo de Memoria Compartida

UTEM

Modelo de Memoria Compartida Java Threads

Modelo de Hilos

Clase Thread

class Test extends Thread { public void run() { /* Codigo del Thread. */ } } Test t = new Test(); t.start();

Matias Valdenegro Modelo de Memoria Compartida

UTEM

Modelo de Memoria Compartida Java Threads

Modelo de Hilos

Metodos utiles de la clase Thread

Thread.join() Thread.sleep(long millis) Thread.yield() Thread.stop() (Deprecado)

Matias Valdenegro Modelo de Memoria Compartida

UTEM

También podría gustarte