Capítulo 5 Silberschatz Galvin

Slides:



Advertisements
Presentaciones similares
TEMA 1 Introducción a la Programación Concurrente
Advertisements

Hilos Capítulo 5 Silberschatz Galvin. Copyright © 2006, Intel Corporation. All rights reserved. Intel and the Intel logo are trademarks or registered.
Sistemas Operativos Unidad II Procesos.
HILOS Y COMUNICACIÓN ENTRE PROCESOS
Comunicación y sincronización entre procesos Realizado por Kepa Bengoetxea Kortazar
Hilos - Lightweight process - Procesos ligeros
Pablo Abrile1 Threads Lenguajes de Programación I.
Sistemas Operativos II MC. Daniel Fajardo Delgado INSTITUTO TECNOLÓGICO DE CD. GUZMÁN 24 de Abril de 2004.
Hebras Cecilia Hernández. Qué es un proceso? Consiste Espacio de direccionamiento Código a ejecutar Datos estáticos y dinámicos Pila o stack CPU: PC,
Hilos En La Computación. (THREADS).
Concepto de proceso Sebastián Sánchez Prieto. Procesos 2  S2P, OGP & IGT Definición de proceso Un proceso es un programa en ejecución Componentes:
Tema 8: Introducción a los SOs. Tema 8: 2 Silberschatz, Galvin and Gagne ©2005 Fundamentos de los Computadores (ITT, Sist. Electr.), Introducción.
1.1 Silberschatz, Galvin y Gagne ©2002 Sistems Operativos – 6ta. Edición Capítulo 1: Introducción ¿Qué es un sistema operativo? Sistemas Operativos por.
Unidad 2 – Gestión de Procesos
Hilos Capítulo 5 Silberschatz Galvin. Copyright © 2006, Intel Corporation. All rights reserved. Intel and the Intel logo are trademarks or registered.
También es conocido como proceso ligero. Es una entidad básica de utilización de CPU y esta formado por un contador de programa, algunos registros y una.
Desarrollador Profesional de Juegos Programación III Unidad II Hilos de ejecución Threads.
Arquitectura y Sistemas Operativos Gestión de Memoria Parte 1 1 Gestión de Memoria – Parte 1 Agenda Parte 1 –RequisitosRequisitos –EvoluciónEvolución –Carga.
Procesos Un proceso es un programa en ejecución. Modelo de procesos secuenciales. Abstracción del SO.
Vinculación de Instrucciones y Datos a Memoria Tiempo de compilación: si la dirección de memoria se conoce a priori, se puede generar código absoluto;
Sistemas Operativos Introducción Unidad II Sergio Fuenlabrada Velázquez Edna Martha Miranda Chávez Revisión Feb 2011.
COMPUTACION PARALELA GLORIA PATRICIA FLOREZ ANGIE PAOLA ANCHICO.
SISTEMAS OPERATIVOS INTEGRANTES: ANGEL LORENZO ROMERO COD: DIANA ASTRID RAMIREZ ALBA COD:
Sistemas Operativos ➢ Que son? ➢ Que hacen? ➢ Por Juan O. Tejeda.
Subsistema de Planificación de Procesos en GNU/Linux.
Microkernels - Introducción Sistemas Operativos 2 – Usac 2009.
Generalidades. Introducción a los procesos
Proceso: Una instancia de un programa en ejecución
SISTEMAS OPERATIVOS Sistema de Archivos.
Descripcion y control de procesos
Antonio Reynoso Lobato 2002 A
SISTEMAS OPERATIVOS Sección Crítica.
Procesos Concurrentes
TIPOS ABSTRACTOS DE DATOS.
Concepto de proceso Rina Arauz.
Daniela George Jiménez
Métodos en Java.
ADMINISTRACíON DE LA MEMORIA EN SISTEMAS RECIENTES
Estructura del sistema operativo
Presentamos.
Definición y Conversión de datos
Unidad de Procesamiento Central
Sistemas Operativos : El Alma De La Pc.
Ayudantía 3: Procesos y threads
PROCESOS COMENZAR.
Introducción y Threads Programación Concurrente
LENGUAJE C.
– GESTIÓN DE PROCESOS Sistemas Operativos. AGENDA Concepto de Proceso Planificación de Procesos Operaciones entre Procesos Comunicación interprocesos.
SISTEMAS OPERATIVOS. El sistema operativo es un conjunto de programas que: ■Inicializa el hardware del ordenador. ■Suministra rutinas básicas para controlar.
Capítulo 4: hilos.
Capítulo 3: procesos.
GESTIÓN DE PROCESOS Vertical Horizontal
Realizado por: Marina Ramos Carmen Camacho
Informática Ingeniería en Electrónica y Automática Industrial
EJECUCION PARALELA THREADS Y FIBERS
ESTRUCTURA DE SISTEMAS OPERATIVOS Carbajal Rojas karla.
Crucigrama: Gestión de procesos HORIZONTALES VERTICALES
Programación Modular Programación de Computadoras - Hugo Vega Grupo2: Reina Rodríguez Miriam Salluca.
1 TEMA 10. SISTEMAS OPERATIVOS DISTRIBUIDOS Introducción Hardware Software Aspectos de diseño.
Funciones Subprogramas definidos por el usuario Subprogrmas.
Núcleo Lic. Gonzalo Pastor.
SISTEMAS OPERATIVOS JOSE ANGEL MORENO B. Ingeniero de Sistemas TP # Copnia Universidad Incca de Colombia CORPORACI Ó N UNIVERSITARIA REMINGTON.
Procesos Lic. Gonzalo Pastor.
Estructura de los sistemas operativos
ESTRUCTURA DE LOS SISTEMAS OPERATIVOS
Estructura de Sistemas Operativos
SISTEMAS OPERATIVOS En el mundo de la informática se denomina sistema operativo al programa, o conjunto de ellos, que gestiona los recursos físicos de.
Estructura de los Sistemas Operativos
ESTRUCTURA DE LOS SISTEMAS OPERATIVOS. Estos sistemas no tienen una estructura definida, sino que son escritos como una colección de procedimientos donde.
Hilos de Procesamiento. Hilos Concepto Beneficios Hilos a nivel kérnel y a nivel usuario Modelos multihilos Hilos de Solaris 2 Hilos de Java.
Transcripción de la presentación:

Capítulo 5 Silberschatz Galvin Hilos Capítulo 5 Silberschatz Galvin

Hilos Concepto Beneficios Hilos a nivel kérnel y a nivel usuario Modelos multihilos Hilos de Solaris 2 Hilos de Java Sistemas Operativos Hilos

Hilos Un hilo (o proceso ligero) es una unidad básica de utilización del CPU; consiste de: Contador de programa Conjunto de registros Espacio de stack Sistemas Operativos Hilos

Hilos Un hilo comparte con sus hilos pares: Sección de código Sección de datos Recursos del sistema operativo En conjunto se les conoce como tarea Un proceso tradicional o pesado, es igual a una tarea con un hilo. Sistemas Operativos Hilos

varios hilos por proceso Hilos y procesos un proceso un hilo un proceso varios hilos varios procesos un hilo por proceso varios procesos varios hilos por proceso Sistemas Operativos Hilos

Procesos con un solo hilo y con múltiples hilos Código Datos Archivos Código Datos Archivos Hilo Hilos Mono-hilo Multi-hilo Sistemas Operativos Hilos

Modelos de procesos de un solo hilo y de muchos hilos Modelo de proceso multihilos Modelo de proceso de un solo hilo Hilo Hilo Hilo Bloque de control del hilo Bloque de control del hilo Bloque de control del hilo Bloque de control del proceso Stack del usuario Bloque de control del proceso Stack del usuario Stack del usuario Stack del usuario Espacio de direcciones del usuario Stack del Kernel Espacio de direcciones del usuario Stack del kernel Stack del kernel Stack del kernel Sistemas Operativos Hilos

Multihilo Sistema operativo que mantiene varios hilos de ejecución dentro de un mismo proceso. MS-DOS soporta un solo hilo. UNIX soporta múltiples procesos de usuarios, pero sólo un hilo por proceso. Windows 2000, Solaris, Linux, Mac OS, OS/2 soportan múltiples hilos. Sistemas Operativos Hilos

Hilos En una tarea donde hay múltiples hilos, mientras un hilo servidor está bloqueado y esperando, otro hilo en la misma tarea puede ejecutarse. Cooperación de múltiples hilos en la misma tarea aumenta la tasa de trabajos por unidad tiempo y mejora el rendimiento. Aplicaciones que requieren compartir un buffer común (productor-consumidor) sacan provecho de la utilización de hilos. Sistemas Operativos Hilos

Hilos Los hilos proveen un mecanismo que permiten a procesos secuenciales hacer llamadas bloqueantes mientras otros en paralelo ejecutan otras operaciones. Sistemas Operativos Hilos

Beneficios Compartición de recursos Economía Utilización de arquitecturas de múltiples procesadores Sistemas Operativos Hilos

Hilos a nivel usuario El manejo de los hilos lo hace una librería de hilos a nivel usuario Ejemplos - Hilos POSIX - Mach C-threads - Hilos de Solaris Sistemas Operativos Hilos

Hilos a nivel usuario (un CPU con dos núcleos) Proceso de usuario gestiona y planifica los múltiples hilos Nivel usuario Nivel kérnel (sistema operativo) Planificador del SO Hardware Core Core CPU Sistemas Operativos Hilos

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 Sistemas Operativos Hilos

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 Sistemas Operativos Hilos

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

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

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

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 Sistemas Operativos Hilos

Modelos multihilos Muchos a uno Uno a uno Muchos a muchos Sistemas Operativos Hilos

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. Sistemas Operativos Hilos

Modelo muchos a uno k Sistemas Operativos Hilos

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

Uno a uno Cada hilo a nivel usuario corresponde a un hilo del kérnel. Ejemplos: - Windows 95/98/NT - OS/2 Sistemas Operativos Hilos

Modelo uno a uno Hilo a nivel usuario Hilo a nivel kérnel k Sistemas Operativos Hilos

Modelo muchos a muchos Hilo a nivel usuario Hilo a nivel kérnel k Sistemas Operativos Hilos

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. Sistemas Operativos Hilos

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

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 Sistemas Operativos Hilos

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 Sistemas Operativos Hilos

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 Sistemas Operativos Hilos

Ejemplo de la arquitectura multihilo de Solaris Usuario Núcleo Hardware Biblioteca de hilos Hilo a nivel de usuario Hilo del núcleo Proceso ligero Procesador L P Proceso 1 Proceso 2 Proceso 3 Proceso 4 Proceso 5 Sistemas Operativos Hilos

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. Sistemas Operativos Hilos

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. #include <pthread.h> int pthread_create(pthread_t *tid, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg); pthread_create crea un hilo y lo coloca en la cola de hilos. tid apunta al ID del hilo que se crea. Los atributos del hilo se encapsulan en el objeto atributo al que apunta attr si este es null, el nuevo hilo tendrá los atributos por omisión. start_routine, es el nombre de una rutina a la que el hilo invoca. El parámetro que se le especifica a start_routine es arg. void pthread_exit(void *value_ptr); La función pthread_exit termina el hilo que la invoca. El valor del parámetro value_ptr queda disponible para pthread_join. Sistemas Operativos Hilos

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 #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <pthread.h> void *thread_function(void *arg); char message[] = "Hola mundo"; int main() { int res; pthread_t a_thread; void *thread_result; /* Aquí se crea el hilo */ res = pthread_create(&a_thread, NULL, thread_function, (void *)message); if (res != 0) { perror("Thread creation failed"); exit(EXIT_FAILURE); } printf("Esperando que el hilo termine...\n"); res = pthread_join(a_thread, &thread_result); perror("La unión del hilo ha fallado"); printf("Hilo unido, regresó %s\n", (char *)thread_result); printf("El mensaje es %s\n", message); exit(EXIT_SUCCESS); void *thread_function(void *arg) { printf("la función del hilo está corriendo. El Argumento fué %s\n", (char *) arg); sleep(3); strcpy(message, "Adios!"); pthread_exit("Gracias por el tiempo del CPU"); Sistemas Operativos Hilos

pthread_create(a_thread,funcion_hilo); int main() { pthread_create(a_thread,funcion_hilo); pthread_join(a_thread); } Crea un hilo nuevo Espera a que termine el hilo creado Hilo principal funcion_hilo() { … } Hilo creado con la llamada pthread_create Sistemas Operativos Hilos

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. Sistemas Operativos Hilos

Hilos en memoria Código (compartido) Datos (compartidos) Int cont=0 (var. Global) Stack (de cada hilo) Int i (var local) #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <pthread.h> // Definen funciones para manejo de hilos void *thread_function(void *arg); // Función donde inicia el hilo int cont=0; // Es la misma para ambos hilos // Global está en el segmento de datos int main() { // Definición de variables int res; pthread_t a_thread; // Identificador del hilo void *thread_result; int i; // Es local, por lo tanto está en el segmento de stack de cada hilo /* Aquí se crea el hilo */ res = pthread_create(&a_thread, NULL, thread_function,NULL); if (res != 0) { perror("Thread creation failed"); exit(EXIT_FAILURE); } // Hilo principal for(i=1;i<=10;i++) printf("%d\n",i); cont++; printf("Hilo principal dice cont=%d\n",cont); sleep(1); printf("Esperando que el hilo termine...\n"); // Esperar a que termine el hilo cuyo identificador es a_thread res = pthread_join(a_thread, &thread_result); if (res != 0) perror("La unión del hilo ha fallado"); printf("Hilo unido, regresó %s\n", (char *)thread_result); exit(EXIT_SUCCESS); // Función donde inicia la ejecución el hilo secundario void *thread_function(void *arg) int i; // Es local, por lo tanto está en el segmento de stack de cada hilo for(i=10;i>0;i--) printf("Hilo secundario dice cont=%d\n",cont); pthread_exit("Gracias por el tiempo del CPU"); Stack (de cada hilo) Int i (var local) Sistemas Operativos Hilos