Gestión de Procesos (esquema) Concepto Programa en ejecución, e.d., unidad de procesamiento gestionada por el SO El proceso reside en memoria principal y, conforme se ejecuta, va modificando su contexto. La información que caracteriza a un proceso es: la “imagen de memoria” (texto+datos+pila), el “contexto de programación” (registros h/w) y el BCP (Bloque de Control del Proceso) El SO mantiene estructuras de datos asociadas al proceso que permiten identificar los recursos: segmentos de memoria, ficheros abiertos, puertos de comunicaciones,… Jerarquía de procesos: padre e hijos, en forma de árbol genealógico Entorno del proceso: conjunto de variable=valor que se incluyen en la pila del proceso Grupos de procesos: derivados de un shell, dependientes de un terminal,… Hay operaciones que afectan al grupo como unidad: ej, suspender un grupo Multitarea Multitarea: coexistencia de varios procesos activos a la vez Multiusuario: soporte de varios usuarios que trabajan simultáneamente desde varios terminales Tiempo compartido: reparto “equitativo” del tiempo de CPU entre varios usuarios Bases de la multitarea: paralelismo real E/S-CPU, alternancia de fases E/S-CPU de los procesos carga en memoria de varios procesos a la vez Proceso Nulo: código que se ejecuta cuando no hay otra tarea que ejecutar Estados de los procesos: en ejecución, en espera de ejecución, en espera de evento Planificador (scheduler): parte del kernel que selecciona el siguiente proceso a ejecutar Activador (dispatcher): parte del kernel que prepara la ejecución del proceso planificado Grado de multiprogramación: número de procesos activos - en estado “planificable” dispuestos para ser activados - cargados en memoria - identificados por el SO con BCP vigente Información del proceso Contexto hardware del proceso = estado del procesador Registros generales, CS:IP, SS:SP, Status, otros () Cuando se interrumpe un proceso, lo primero es salvar su “contexto h/w” en pila kernel Imagen de memoria Regiones de texto, datos y pila Obtenidas a partir del fichero ejecutable Información del BCP Planificación y estado: “contexto h/w”, evento esperado, prioridad, info de planificación Descripción de regiones Recursos asignador: ficheros abiertos, puertos de comunicación asignados Punteros para formar listas: de preparados, de relaciones jerárquicas,… Comunicación: espacio para señales, mensajes,… Tablas del SO Tabla de BCPs Tabla de ficheros, de montajes Tablas de E/S: de drivers de bloques, de drivers de caracteres, Formación de un proceso - Asignar un espacio de memoria - Seleccionar un BCP libre - Rellenar el BCP (a partir del proceso padre, a partir del fichero ejecutable) - Cargar los segmentos de texto y datos iniciales - Crear el segmento de pìla inicial: incluye entorno y parámetros de invocación - Marcar listo para ejecución Estados del proceso 1. 2. 3. 4. 5. 6. En ejecución: en fase de procesamiento. Contexto h/w en CPU Bloqueado: en espera de que ocurra un evento. Contexto h/w en BCP Preparado: planificable pero no seleccionado. Contexto h/w en BCP Suspendido: en espera de asignación de memoria (swapped), Parado: retirado de la competencia por la CPU (suspended/stopped) En espera batch: en expectativa de ser introducido al sistema Cambio de contexto Atención a una interrupción Salvar el contexto h/w en la pila del kernel Ejecutar la RSI Cambio de estado de proceso Salvar y actualizar información en el BCP de un proceso que detiene su ejecución Activación de un proceso (dispatching) Actualización del BCP Recuperación del contexto h/w Vuelta de interrupción Procesos ligeros (hilos o threads) Cada uno de los flujos de ejecución, asociados a sendas funciones, que componen un proceso. Hilo de ejecución primario: función main() Información particular de cada hilo Contexto h/w: registros, IP y SP Estado del hilo: en ejecución, listo o bloqueado Información compartida por todos los hilos de un proceso BCP espacio de memoria, ficheros abiertos, temporizadores, señales, contabilidad,… Estado de los hilos vs., estado del proceso Paralelismo, variables compartidas y llamadas no bloqueantes Comparar: - un proceso con varios hilos - un proceso convencional (con un solo hilo) - un proceso convencional y llamadas no bloqueantes - varios procesos convencionales Diseño con hilos Separación de tareas Modularidad Aumento de velocidad de ejecución Compartición de variables globales Uso de mecanismos de sincronización Solapamiento de las ejecuciones de los hilos * Diseño de servidores con hilos 1. Hilo distribuidor y “pool” de hilos trabajadores 2. Conjunto independiente de hilos trabajadores iguales 3. Operación en cadena de (pipeline) de varios hilos Planificación 1. 2. 3. A largo plazo: aplicada a procesos batch; añade nuevos procesos al sistema A medio plazo: aplicada a procesos suspendidos (swapped); carga en memoria A corto plazo: aplicada a proceso listos para ejecutarse; asigna el procesador Expulsión (expropiación o preemption) El SO le retira, forzosamente, el uso del procesador al proceso en ejecución Colas de procesos Colas batch: organizadas según características del trabajo (job) Colas de procesos: organizadas según prioridad, carácter del proceso (interactivo o de usuario, de sistema, de tiempo real) Objetivos de planificación Reparto equitativo del procesador Optimización del uso del procesador Mejora (disminución) del tiempo de respuesta interactivo Mejora (disminución) del tiempo de espera en batch Mejora (aumento) de la productividad batch (throughput) Cumplimiento de los plazos de tiempo real Algoritmos de planificación Round-robin Organización en cola circular con asignación de “quantos” de tiempo Expropiación por agotamiento del quanto y replanificación FIFO Organización en lista ordenada por tiempo de llegada Prioridades Fijas o dinámicas Organización en listas ordenadas por prioridades asignadas o calculadas SJF, SRTF Organización en lista ordenada por tiempo previsto de ejecución Caso batch: tiempo previsto para la ejecución del proceso Caso interactivo: tiempo previsto de la próxima ráfaga de CPU Variantes: con/sin expropiación Lotería Selección por sorteo: cada proceso está asociado a un rango de valores y un generador de números aleatorios extrae un valor ganador. Tiempo real A plazo fijo: EDF Periódicos: RMS Planificación POSIX en Linux 2.2 Política SCHED_FIFO de tiempo real no crítico Valores de prioridad fija de tiempo real Un proceso solo sufre expropiación si aparece otro de mayor prioridad Política SCHED_RR de tiempo real no crítico Valores de prioridad fija de tiempo real Un proceso sufre expropiación, además, si agota su “quanto” Política SCHED_OTHER Valores de prioridad dinámica interactiva asociados al “quanto” restante Reevaluaciones de prioridad por “épocas”, según comportamiento. Época: marcada por el agotamiento de los quantos de los procesos “listos” Planificación Windows en W’NT 16 niveles con prioridad fija de tiempo real 15 niveles con prioridades variables de procesos interactivos, según comportamiento 1 nivel de sistema (proceso nulo) Señales y excepciones Señales: interrupción de proceso Origen otro proceso o el SO Tipos: Excepciones hardware: SIGBUS, SIGILL Comunicación: SIGPIPE E/S asíncrona: SIGIO … Efecto y armado: Armar asociar una función a una señal (con sigaction()) Actuación ejecución de la función asociada y retorno Excepciones: evento que requiere la ejecución de un código fuera del flujo normal Generadas por hardware o software Respondidas por el SO en primera instancia Redirigidas a un manejador, si ha sido declarado (soporte del lenguaje de programación) try {…} except {…} Temporizadores Servicio alarm(segundos), que genera una señal SIGALRM al consumir el plazo indicado Servidores y demonios Servidor: Proceso pendiente de recibir órdens provenientes de procesos cliente Estructura de bucle infinito: {lectura de orden, ejecución de orden, respuesta} Uso de puertos de comunicación Servidor secuencial: el servidor mismo ejecuta las órdenes Servidor paralelo: delega la ejecución las órdenes en procesos hijo o en hilos Demonio: Proceso con las siguientes características - se inicia al arrancar el sistema y está siempre activo (no acaba) - funciona como servidor o realizando tareas periódicas - delega el trabajo específico en otros procesos o hilos - se ejecutan en background: no están asociados a un Terminal Ejemplos: telnetd, httpd, lpd Servicios POSIX Gestión de procesos Identificación de proceso: getpid(), getppid(), getuid(), geteuid() Entorno de proceso: getenv(), setenv() Creación de proceso: fork(), exec() Terminación de proceso: exit(), atexit(), wait(), waitpid() Gestión de hilos Atributosde hilo: pthread_attr_init(), pthread_attr_destroy() Creación e identificación: pthread_create(), pthread_self() Terminación: pthread_join(), pthread_exit() Planificación: De proceso: sched_setparam(), sched_scheduler(), sched_getparam() Atributos: sched_get_priority_min(), sched_get_priority_max() De hilos: pthread_setschedparam(), pthread_getschedparam() Gestión de señales: Conjunto de señales: sigemtyset(), sigfillset(), sigaddset(), sigdelset() Envío de señales: kill(), alarm(), sleep() Armado de señales: sigaction() Máscara de señales: sisprocmask(), sigpending() Espera de señales: pause()