Uploaded on

Hebras

Hebras

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
7,524
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
174
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Hebras Cecilia Hernández
  • 2. Qué es un proceso?
    • Consiste
      • Espacio 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
  • 3. 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
  • 4. 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
  • 5. 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.
  • 6. Podemos hacerlo mejor
    • Idea
      • Separar 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
  • 7. 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
  • 8. 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 UNIX antiguos Mach, NT, Linux, … clave
  • 9. Proceso ayer/hoy 0x00 0 00000 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) código (text segment) Datos estáticos (data segment) heap (mem dinámica) stack (mem dinámica) SP PC
  • 10. Proceso
  • 11. Hebras
  • 12. 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
  • 13. 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
  • 14. 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
  • 15. Ilustración hebras de kernel Espacio Direccionamiento hebra Mach, NT, Linux, … kernel Operaciones sobre hebras mediante llamadas a sistema al kernel CPU
  • 16. Hebras nivel usuario Espacio de direccionamiento hebra Mach, NT, Linux, … kernel Kernel crea maneja hebras de kernel CPU Hebras de kernel Biblioteca hebras nivel usuario Operaciones sobre hebras
  • 17. Manejando mejor hebras nivel usuario Espacio de direccionamiento hebra Mach, NT, Linux, … kernel Manejo hebras kernel CPU Hebras kernel Biblioteca hebras Nivel usuario Operaciones sobre hebras
  • 18. 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
  • 19. 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
  • 20. 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