Descargar

Hilos de procesamiento (página 2)

Enviado por Pablo Turmero


Partes: 1, 2
edu.red

Ventajas de los hilos a nivel usuario Los hilos podían implementarse en las aplicaciones que se ejecutaban en sistemas operativos que no son capaces de planificar hilos Ejemplo: Primeras implementaciones de UNIX

edu.red

Desventajas de los hilos a nivel usuario El planificador del sistema operativo solo ve un hilo por proceso No ve los hilos a nivel usuario Usa un solo núcleo del procesador en un procesador que tiene más de un núcleo No puede distribuir los hilos a nivel el usuario en los dos núcleos

edu.red

Hilos a nivel kérnel Soportados por el kérnel Ejemplos Windows 95/98/NT Solaris Linux Mac OS

edu.red

Hilos a nivel kernel (con un CPU con un solo núcleo) Nivel kérnel (sistema operativo) Nivel usuario Core CPU Hardware Planificador del SO

edu.red

Hilos a nivel kernel (con un CPU con doble núcleo) Nivel kérnel (sistema operativo) Nivel usuario Core Core CPU Hardware Planificador del SO

edu.red

Ventajas de los hilos a nivel kérnel El proceso de usuario no se tiene que encargar de la planificación de los hilos

Si tenemos un procesador con más de un núcelo, el Sistema operativo puede planificar los hilos en diferentes núcleos

edu.red

Modelos multihilos Muchos a uno Uno a uno Muchos a muchos

edu.red

Muchos a uno Muchos hilos a nivel usuario mapeados a un hilo a nivel kérnel.

Usado en sistemas que no soportan hilos a nivel kérnel.

edu.red

Modelo muchos a uno (Gp:) k

edu.red

Ejecución Listo Listo Relaciones entre estados de ULTs y estados de procesos Ejecución Bloqueado Bloqueado Listo Ejecución Bloqueado Hilo 1 Hilo 2 Proceso B Kernel Usuario

edu.red

Uno a uno Cada hilo a nivel usuario corresponde a un hilo del kérnel.

Ejemplos: – Windows 95/98/NT – OS/2

edu.red

Modelo uno a uno (Gp:) k (Gp:) k (Gp:) k (Gp:) k (Gp:) Hilo a nivel usuario (Gp:) Hilo a nivel kérnel

edu.red

Modelo muchos a muchos (Gp:) k (Gp:) k (Gp:) k (Gp:) Hilo a nivel usuario (Gp:) Hilo a nivel kérnel

edu.red

Soporte de hilos en Solaris 2 Solaris 2 es una versión de UNIX con soporte para hilos a nivel kernel y a nivel usuario, procesamiento simétrico y planificación en tiempo real.

edu.red

Soporte de hilos en Solaris 2 LWP – Nivel intermedio entre los hilos a nivel kernel y los hilos a nivel usuario.

edu.red

Hilos en Solaris 2. Recursos necesarios para los tipos de hilos Hilos del kernel Estructura de datos pequeña y un stack El intercambio de hilos no requiere cambiar la información del acceso a memoria Cambios de hilos relativamente rápidos

edu.red

Hilos en Solaris 2. Recursos necesarios para los tipos de hilos LWP PCB con datos de los registros Información sobre la memoria El intercambio entre LWP es relativamente lento

edu.red

Hilos en Solaris 2. Recursos necesarios para los tipos de hilos Hilos a nivel usuario Solo requiere un stack y un contador de programa No involucrar al kernel significa un intercambio rápido El kernel solo ve los LWP que soporta los hilos a nivel usuario

edu.red

(Gp:) Usuario (Gp:) Núcleo (Gp:) Hardware (Gp:) Biblioteca de hilos (Gp:) Hilo a nivel de usuario (Gp:) Hilo del núcleo (Gp:) Proceso ligero (Gp:) Procesador (Gp:) L (Gp:) L (Gp:) L (Gp:) L (Gp:) L (Gp:) L (Gp:) L (Gp:) L (Gp:) L (Gp:) L (Gp:) P (Gp:) P (Gp:) P (Gp:) P (Gp:) P (Gp:) P (Gp:) Proceso 1 (Gp:) Proceso 2 (Gp:) Proceso 3 (Gp:) Proceso 4 (Gp:) Proceso 5

Ejemplo de la arquitectura multihilo de Solaris

edu.red

Gestión de hilos básica Un hilo tiene : Un identificador (ID) Una pila Una prioridad de ejecución Una dirección de inicio de ejecución.

edu.red

Gestión de hilos básica(POSIX) Se dice que un hilo es dinámico si se puede crear en cualquier instante durante la ejecución. En POSIX : los hilos se crean dinámicamente con la función pthread_create. pthread_exit termina el hilo que la invoca.

edu.red

Gestión de hilos básica (POSIX), ejemplo: Programa que crea un hilo donde muestra el mensaje "Hola Mundo"

Para compilar el programa : $ cc -D_REENTRANT thread2.c -o thread2 -lpthread

edu.red

int main() {

pthread_create(a_thread,funcion_hilo);

pthread_join(a_thread);

} funcion_hilo() { . } Crea un hilo nuevo Espera a que termine el hilo creado Hilo principal Hilo creado con la llamada pthread_create

edu.red

Gestión de hilos básica(POSIX) Pthread_join() Hilo que ejecuta pthread_join, espera a que termine otro hilo El hilo principal debe esperar a que terminen todos los hilos creados Si el hilo principal no espera a que terminen los hilos creados, al terminar termina el proceso con todos los hilos.

edu.red

Hilos en memoria Código (compartido) Datos (compartidos) Int cont=0 (var. Global) Stack (de cada hilo) Int i (var local) Stack (de cada hilo) Int i (var local)

Partes: 1, 2
 Página anterior Volver al principio del trabajoPágina siguiente