Hebras
-
Upload
stefano-salvatori -
Category
Technology
-
view
7.670 -
download
1
description
Transcript of Hebras
Hebras
Cecilia Hernández
Qué es un proceso?
ConsisteEspacio de direccionamiento
• Código a ejecutar• Datos estáticos y dinámicos• Pila o stack
CPU: PC, SP y valores en registros de propósito general
Conjunto de recursos• Archivos, pipes, conecciones,etc
Concurrencia y paralelismo
Imaginar un servidor web que requiere manejar múltiples requerimientos concurrentemente Mientras verifica la tarjeta de crédito de un cliente, podría
recuperar de disco la información para otro cliente o realizar una búsqueda para otro
Imaginar un cliente web (web browser) que desee realizar múltiples requerimientos simultaneamente Múltiples búsquedas, lectura de mails, chat, etc
Imaginar un programa paralelo ejecutándose en un multiprocesador, el cual no necesite concurrencia en términos de la multiplexación de una CPU Ejemplo típico, multiplicación de matrices, dividir las
matrices en un k regiones y calcular la multiplicación de las k regiones en k CPUs
Que se necesita?
En cada uno de ejemplos por separado Todos los requerimientos quieren ejecutar el mismo
código Gran parte de los datos son los mismos (excepto caso
paralelo) Todos tienen los mismos privilegios Todos usan los mismos recursos (archivos abiertos y
conecciones) Nos gustaría tener múltiples estados de ejecución
Cada estado de ejecución requiere• Estado en CPU
• Pila de ejecución y su puntero SP• PC, indicando próxima instrucción a ejecutar• Conjunto de valores de registros de propósito general
Podemos hacer esto con procesos
Podríamos crear varios procesos con fork() y hacer que cada uno atienda un requerimiento? Al crearse un proceso hijo
Desempeño No tan bueno, porque SO ocupa tiempo y
memoria para crear tabla de página y PCB de hijo
Sin embargo, SO no copia datos y código, sino que sólo hace que tablas de páginas de procesos apunten a lo mismo
• COW (Copy On Write) : SO asigna memoria a proceso hijo cuando desea escribir.
Podemos hacerlo mejor
IdeaSeparar concepto de proceso (espacio de
direccionamiento, estado CPU, recursos)Que es lo mínimo que necesitamos para
identificar un estado de ejecución?• Estado de CPU… A esto se le llama hebra de
control• Incluye estado PC,SP y valores registros
generales• También se le llama proceso liviano
Hebras y procesos
Mayoría de SOs modernos (Mach, NT, Unix, Linux) soportan: Proceso, el cual define espacio de direccionamiento y
recursos como archivos abiertos, conecciones, etc Hebra, define un flujo de ejecución secuencial dentro de un
proceso Una hebra vive dentro de un proceso
Múltiples hebras pueden vivir en un proceso Compartir datos entre hebras es barato, comparten mismo
espacio de direccionamiento Crear hebras es rápido, manipulación del espacio de
direccionamiento y estructura de datos de SO que conoce de hebras
Hebras pueden pasar a ser unidades planificables por SO Procesos pasan a ser contenedores de hebras
Hebras en sistemas/lenguajes disponibles
Espacio direcc.
hebra
Una hebra/proceso
Muchos procesos
Muchas hebras/proceso
Muchos procesos
Una hebra/proceso
Un proceso
Muchas hebras/proceso
Un proceso
MS/DOS
Java
UNIXantiguos
Mach, NT,Linux, …
clave
Proceso ayer/hoy
código(text segment)
Datos estáticos(data segment)
heap(mem dinámica)
stack(mem dinámica)SP
PC
0x00000000
0xFFFFFFFF
Espacio de
direccionamiento
código(text segment)
Datos estáticos(data segment)
heap(mem dinámica)
Stack hebra 1
PC (H2)
SP (H2)Stack hebra 2
Stack hebra 3
SP (H1)
SP (H3)
PC (H1)PC (H3)
Proceso
Hebras
Separación Hebra/proceso
Multithreading (concurrencia) útil para: Manejar eventos concurrentemente
• Cuál es la ganada en una CPU?
Construir programas paralelos• Hebras se ejecutan en distintas CPUs
Mejorando estructura de programas En lugar de crear múltiples procesos
concurrentes crear múltiples hebras concurrentes
• Más rápido / menos memoria / más fácil compartir
Quién crea/maneja hebras?
Opción 1: Hebras de Kernel (SO)Llamadas a sistema permiten creación
• Asignar stack de ejecución dentro del espacio de direccionamiento de un proceso
• Crear e inicializar un TCB• SP, PC, registros
Planificación de hebras realizada por OS
Quién crea/maneja hebras?
Opción 2: Creadas y manejadas en nivel usuario, dentro de un proceso Una biblioteca linkeada con el
programa que usa hebras Operaciones de creación,
destrucción, etc sobre hebras son llamadas a procedimientos (no llamadas a sistema)
Descritas como muchas to una • Muchas hebras mapeadas a un
proceso/hebra del kernel Biblioteca posee planificador de
hebras creadas por proceso
proceso
Hebra kernel
Ilustración hebras de kernel
Espacio Direccionamiento
hebra
Mach, NT,Linux, …
kernel
Operaciones sobre hebras mediante llamadas a
sistema al kernel
CPU
Hebras nivel usuario
Espacio de direccionamiento
hebra
Mach, NT,Linux, …
kernel
Kernel crea maneja hebras de kernel
CPU
Biblioteca hebras nivel usuario
Operaciones sobre hebras
Hebras de kernel
Manejando mejor hebras nivel usuario
Espacio de direccionamiento
hebra
Mach, NT,Linux, …
kernel
Biblioteca hebras Nivel usuario
Operaciones sobre hebras
Manejo hebras kernel
CPU
Hebras kernel
Implementación de hebras nivel usuario
Kernel ve a proceso como cualquier otro Hebras de nivel usuario invisibles al SO Pero proceso incluye funcionalidad
proporcionada por biblioteca de hebras la cual tiene su propio planificador
Planificador de biblioteca decide que hebra del proceso se ejecuta a determinado tiempo
• SO provee de llamadas a sistema no bloqueantes, de manera que si una hebra de usuario hace E/S biblioteca de hebras sabe que puede hacer cambio de contexto en hebras de usuario
Hebras de nivel usuario
POSIX Threads API En biblioteca libpthreads.so en linux t = pthread_create(attributes, start_procedure)
• Crea hebra de control, que comienza ejecución en procedimiento dado
• Puede especificar creación de hebras nivel kernel en attributes
pthread_cond_wait(condition_variable)• Hebra se bloquea hasta que condición se cumple
pthread_signal(condition_variable)• Señaliza a hebra que espera por condicion
pthread_exit()• Termina la hebra
pthread_join(t)• Espera por hebra t hasta que termine
Resumen Hebras de kernel son más eficientes que procesos Hebras de nivel usuario son más rápidas que las de
kernel Operaciones no pasan a través de SO
Si hebras de nivel usuario residen en un proceso representado por sólo una hebra de kernel No puede proporcionar paralelismo si solo una hebra de
kernel asociada a proceso Si una hebra de proceso de usuario se bloquea en E/S
entonces todo el proceso se bloquea (asumiendo que solo una hebra de kernel está asociada a proceso)
• Normalmente biblioteca maneja llamadas a sistema no bloqueantes por hebras de usuario de manera que pueda utilizar hebra de kernel para otra hebra de usuario