Hebras

20
Hebras Cecilia Hernández

description

Hebras

Transcript of Hebras

Page 1: Hebras

Hebras

Cecilia Hernández

Page 2: Hebras

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

Page 3: Hebras

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

Page 4: Hebras

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

Page 5: Hebras

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.

Page 6: Hebras

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

Page 7: Hebras

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

Page 8: 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

Page 9: Hebras

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)

Page 10: Hebras

Proceso

Page 11: Hebras

Hebras

Page 12: 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

Page 13: Hebras

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

Page 14: Hebras

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

Page 15: Hebras

Ilustración hebras de kernel

Espacio Direccionamiento

hebra

Mach, NT,Linux, …

kernel

Operaciones sobre hebras mediante llamadas a

sistema al kernel

CPU

Page 16: Hebras

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

Page 17: Hebras

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

Page 18: Hebras

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

Page 19: Hebras

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

Page 20: Hebras

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