Date post: | 27-Dec-2015 |
Category: |
Documents |
Upload: | eduardo-farfan |
View: | 25 times |
Download: | 0 times |
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
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
Contenidos
1 Modelo de Memoria Compartida
2 Modelo de HilosPOSIX ThreadsJava Threads
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
Modelo de Memoria Compartida Modelo de Hilos
Matias Valdenegro UTEM
Modelo de Memoria Compartida
Modelo de Memoria Compartida Modelo de Hilos
Matias Valdenegro UTEM
Modelo de 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
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
Modelo de Memoria Compartida Modelo de Hilos
Matias Valdenegro UTEM
Modelo de Memoria Compartida
Contenidos
1 Modelo de Memoria Compartida
2 Modelo de HilosPOSIX ThreadsJava Threads
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
Modelo de Memoria Compartida Modelo de Hilos
Matias Valdenegro UTEM
Modelo de Memoria Compartida
Modelo de Memoria Compartida Modelo de Hilos
Matias Valdenegro UTEM
Modelo de Memoria Compartida
Modelo de Memoria Compartida Modelo de Hilos
Matias Valdenegro UTEM
Modelo de 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
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
Modelo de Memoria Compartida Modelo de Hilos
POSIX Threads
Inicializacion
#include <pthread.h>
int pthread_init();
Matias Valdenegro UTEM
Modelo de 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
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
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
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
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
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
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
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