PLANIFICACION La Planificación es el conjunto de políticas y mecanismos incorporados al S.O. que gobiernan el orden en que serán ejecutados los trabajos, cuyo objetivo principal es el máximo aprovechamiento del Sistema. Entre varios procesos en condiciones de ser ejecutados, el sistema operativo debe decidir cual conviene despachar primero y qué orden de ejecución debe seguirse. El módulo del sistema operativo encargado de esta tarea se denomina planificador (scheduler) o administrador del procesador y el algoritmo particular utilizado se denomina algoritmo de planificación. Niveles de Planificación Planificación a Extra Largo Plazo Por ser en la escala de tiempo del ser humano. Depende de la organización del centro de cómputos y para regularlo se deben crear Procedimientos escritos que fijen claramente las Reglas de uso, seguridad, accesos, prioridades, etc. Planificación a Largo Plazo (job scehduler) Long Term Scheduler (Planificador de Trabajos): decide cual será el próximo trabajo que se ejecutará, para lo cual carga el Programa y sus datos y crea los procesos. Es importante en Sistemas Batch donde decide sobre la base de las necesidades de los recursos que requieren los procesos, cuál de ellos logrará mantener el procesador. Planificación a Medio Plazo (SWAPPER) Middle Term Scheduler (también Medium term scheduler o Planificador de Swapping): es el que decide sacar de memoria central y llevar al disco (swap-out) a aquellos procesos inactivos o a los activos cuyos estados sean bloqueado momentáneamente o temporalmente o los suspendidos y luego, cuando desaparezcan las causas de su bloqueos, traerlos nuevamente a Memoria (swap-in) para continuar su ejecución Planificación a Corto Plazo (dispacher) Planificador de Procesos (Short Term Scheduler): Es el responsable de decidir quién, cuándo, cómo y por cuánto tiempo recibe procesador un proceso que esta preparado en la Ready Queue para ejecutar, además en S.O. con esquemas expropiativos se ocupa de quitar el recurso procesador al proceso que esta ejecutando. También verifica las interrupciones y las trata. Proceso NuLL: El proceso NULO nunca termina, no tiene E/S (Ej.: ciclo while, True do nada) y tiene la prioridad más baja en el sistema. En consecuencia la cola de listos nunca está vacía, El planificador a corto plazo es invocado cada vez que un suceso (interno o externo) hace que se modifique el estado global del sistema. Por ejemplo: Tics de reloj (interrupciones basadas en el tiempo). Interrupciones por comienzo y terminaciones de Entrada / Salida. La mayoría de las llamadas al S.O.. El envió y recepción de señales. La activación de programas interactivos. Políticas de Planificación Alternativas Non-Preemptive: cuando un proceso esta ejecutando, continúa corriendo hasta que termina o se bloquea esperando por E/S o un servicio del sistema operativo. Preemptive: el proceso que actualmente esta ejecutando puede ser interrumpido y enviado a la cola de Listos por el sistema operativo. Non-Preemptive: (FCFS- PRIORIDAD – SPN/F – HRRN) First Come First Served En FCFS el proceso que a permanecido por más tiempo en la cola de listos es el elegido para correr. Esta política suele desaprovechar al procesador y a los dispositivos de E/S. Para mejorar el desempeño muchas veces se lo combina con un esquema de prioridades. Prioridades Pueden ser internas o dinamicas // externas o estáticas. Shortest Process Next (SPN) Es una política en la que no se usa la substitución. El proceso cuyo tiempo de ejecución predicho es el menor, es el elegido por el planificador. La complicación que presenta es la necesidad de saber o estimar el tiempo de ejecución de los procesos. Para un trabajo batch, el tiempo es estimado por el programador. Para procesos interactivos, el sistema operativo mantiene un promedio de cada ráfaga de cada proceso. (Formulas Pag. 394) También hay riesgo de starvation para los procesos largos. Highest Response Ratio Next (HRRN) Se define RR como: S: w s RR s Tiempo de servicio esperado. W: Tiempo que espera por el procesador. El planificador siempre elige el proceso con mayor RR. Lo bueno es que los procesos con mayor RR serán los más chicos y los más viejos. Preemptive: (RR – VRR – SRT) Round Robin o torneo Un proceso puede salir del estado de ejecución por tres motivos: a) que termine su ejecución, b) se proceda al llamado a una entrada – salida y el proceso se quede bloqueado y c) que se supere el quantum de ejecución del proceso, se dispare la interrupción del reloj y sea automáticamente retirado del estado de ejecución. El algoritmo de planificación round-robin (RR) fue especialmente diseñado para sistemas de tiempo compartido. Se define una pequeña unidad de tiempo común llamada quantum de tiempo o time slice (QT) VRR (Virtual Round Robin), el cual funciona de manera similar al RR, aunque los procesos que son desbloqueados se colocan en una cola FIFO auxiliar, la cual tiene prioridad por sobre la cola principal, SRT Es la versión SPN/F no apropiativa. Características de un sistema operativo de tiempo real Determinismo Sensibilidad Control del Usuario Confiabilidad Tolerancia a fallas Planificación de hilos Compartir carga (Load sharing): Planificación por grupos (gang scheduling): Asignación dedicada de procesadores: Planificación dinámica: SINCRONIZACION Y COMUNICACIÓN ENTRE PROCESOS El acceso a estos recursos compartidos o la localización de áreas compartidas en la memoria generan problemas de uso y de comunicación entre los procesos. Para resolver estos problemas de competencia entre procesos, se utilizan dos mecanismos : la sincronización y la comunicación. los problemas de concurrencia parten del hecho de que la velocidad relativa de ejecución de los procesos no puede predecirse, ya que depende de la actividad de otros procesos, del tratamiento de las interrupciones y de las políticas de planificación. Así surgen las siguientes dificultades: 1. Compartir entre procesos los recursos globales está llena de riesgos. 2. Para el S.O. resulta difícil asignar los recursos de forma óptima. 3. Resulta difícil localizar un error de programación porque los resultados no son normalmente reproducibles. La mutua exclusión es uno de los problemas más importantes que presenta la ejecución de los procesos concurrentes debido al hecho de ser la abstracción de muchos problemas de sincronización. Interacción entre Procesos Influencia que un Proceso tiene sobre otro Grado de Relación Conocimiento Los procesos no se conocen Competencia Los procesos se conocen indirectamente Cooperación por compartir Los procesos se conocen directamente Cooperación por comunicación Los resultados de un proceso son independientes de la acción. La duración del proceso puede ser afectada Los resultados de un proceso pueden depender de la información obtenida de otro. La duración del proceso puede ser afectada Los resultados de un proceso pueden depender de la información obtenida de otro. La duración del proceso puede ser afectada Potenciales Problemas de Control Mutua exclusión. Deadlock (recursos reusables). Starvation. Mutua exclusión. Deadlock (recursos reusables). Starvation. Coherencia de datos Deadlock (recursos consumibles). Starvation. Estas condiciones no son siempre tan terminantes, muchas veces los procesos compiten y cooperan al mismo tiempo. Recurso Crítico: es aquel que puede ser compartido (no se accede simultáneamente). Region o Sección crítica: es una parte de un código que no puede estar siendo ejecutado por más de un proceso simultáneamente porque, por ejemplo, hace uso de un recurso crítico. Exclusión Mutua: enfoque por Software Cuenta con que hay algún mecanismo que obliga a que dos operaciones simultaneas sobre una locación de en MP, se hagan serialmente. Más allá de esto, no espera soporte alguno de hardware, sistema operativo o de lenguaje de programación. El algoritmo de Dekker Busy Waiting: Ejecución repetida de un loop de código mientras se espera la ocurrencia de un evento. Es un algoritmo para la mutua exclusión de 2 procesos. La idea de este algoritmo, son dos variables booleanas, una para c/proceso, que indican la voluntad de acceder a la sección critica y una variable extra que indica que proceso tiene derecho (de quien es el turno) a tratar de entrar (las tres variables son compartidas). Un proceso que quiere entrar a la sección critica pone su bandera en TRUE y se fija en la bandera del otro, si esta en FALSE, quiere decir que puede ejecutar su sección critica. Si no, se fija en la 3° variable y si dice que es su turno volverá a revisar la bandera del otro. Si no fuese su turno queda atrapado en un ciclo hasta que lo sea. (Algoritmo en Pag 203) El algoritmo de Peterson Logro lo mismo que con el algoritmo de Dekker y también usa las mismas 3 variables, pero es mucho mas claro y es fácil llevarlo de los 2 procesos que maneja a n procesos. La idea que implementa el algoritmo es: entras en la sección crítica si no quedas trabado en busy waiting, y quedas trabado cuando la bandera del otro es TRUE y es su turno. (Algoritmo en Pag 204) Exclusión Mutua: enfoque por Hardware Deshabilitar interrupciones Primitiva: Son procedimientos o funciones estándar del sistema operativo (System Calls) que se ejecutan atómicamente como si fuesen una sola instrucción y su mutua exclusión no aparece explícitamente en la ejecución. (Notas Sobre Sistemas Operativos – Tomo 1 – Pag. 273) En un uniprocesador, para que ningún otro proceso entre en la sección critica, además del que ya esta en ella, bastara con que no se soliciten servicios al sistema operativo y se deshabiliten las interrupciones. Esto se hace mediante una primitiva que deshabilite justo antes de la sección critica y una que habilite justo después. Instrucciones de maquina especiales Esta técnica se puede aplicar a multiprocesadores. Se basa en ciertas instrucciones que llevan a cabo 2 acciones atómicamente, acciones como: leer, escribir o testear. Dos ejemplos de estas instrucciones son test and set y exchange. Sus ventajas son: Se aplica tanto a uno como a varios procesadores. Es más fácil de verificar. Soporta fácilmente varias secciones críticas, basta con usar una variable para c/u. Sus desventajas son: También usa busy waiting. Es posible que haya Starvation. Es posible que haya Deadlock. Cuando un proceso esta en la sección crítica y es substituido por otro proceso que quiere acceder a ella. T & SET Exchange Exclusión Mutua: enfoque por SO Semaforos Un semáforo es una herramienta genérica de sincronización de procesos, o sea, permite el ordenamiento de las operaciones que realizan los procesos en el tiempo. Es una especie de bandera (señal o flag) que indica la posibilidad de acceder o no a un recurso. La primitiva ‘Wait’ decrementa el valor del semáforo. Si queda negativo, el proceso es bloqueado y queda en la cola del semáforo. 2° La primitiva ‘Signal’ incrementa el valor del semáforo. Si había un valor no positivo, entonces un por bloqueado por ‘wait’ se desbloquea. 1° Disciplinas en el manejo de las colas de procesos bloqueados FIFO: cuando se ejecuta un signal, se desbloquea el primer proceso de la cola (el más antiguo). RANDOM: Se desbloqueará cualquier proceso que esté en la cola de bloqueados, independientemente de su antigüedad. Con la disciplina FIFO, se sabe que, independientemente de la longitud de la cola de procesos en espera, le legará su turno. En cambio, con la disciplina RANDOM, no se sabe cuándo llegará su turno. Monitores Paso de mensajes Hay varios diseños para el paso de mensajes, y todos ellos dependen de estas 2 primitivas: send ( destino , mensaje ) recieve ( fuente , mensaje ) Las características que determinan el diseño del paso de mensajes son: sincronización, direccionamiento, formato de mensaje y disciplina de la cola. Sincronización Tanto send como recieve pueden ser bloqueantes o no bloqueantes. De las 4 combinaciones posibles, 3 son las más comunes: send bloqueante, recieve bloqueante: Emisor y receptor son bloqueados hasta que el mensaje es entregado. Esto suele llamarse Rendez – vous. send no bloqueante, recieve bloqueante: Esta es la combinación más usada. Es la que usa un proceso server. send no bloqueante, recieve no bloqueante: Nadie espera. Direccionamiento Directo Los procesos envían y reciben los mensajes entre sí. Dependen de las velocidades relativas entre sí (si son distintas requieren un buffer de mensajes para su sincronización). Propiedades: 1. Se establece un vínculo automáticamente entre los procesos. Sólo deben conocerse mutuamente. 2. El vínculo se establece con 2 procesos exactamente. 3. El vínculo es bidireccional. Indirecto El mensaje pasa por una estructura se datos compartida compuesta de colas, dedicada a almacenar mensajes temporalmente. Estas estructuras son los ‘mailbox’, y cuando exhiben una relación de muchos emisores y un receptor, se los llama ‘ports’. Los procesos pueden asociarse a estos dinámica o estáticamente. Formato de msg Disciplina de cola Deadlocks (interbloqueo, bloqueo mutuo o abrazo mortal) Entonces se podría hablar de Deadlock como el estado permanente de bloqueo de un conjunto de procesos que están compitiendo por recursos del sistema o se comunican entre ellos bajo dos situaciones: Ante la petición de recursos: si un proceso solicita un recurso que no está disponible éste queda esperando. Si todos los procesos quedan esperando por un recurso que tiene asignado otro proceso del conjunto y que también esta a la espera de otro recurso, se produce Deadlock. Ante la comunicación entre procesos: cuando cada proceso de un conjunto espera por un mensaje de otro miembro del grupo, y no existe un mensaje en tránsito, entonces ocurre un Deadlock. Recursos reutilizables Un recurso reutilizable es aquel que puede ser usado por un proceso y no se agota con el uso. Recursos consumibles Un recurso consumible es aquel que puede ser creado (producido) y destruido (consumido). Las condiciones para el Deadlock Exclusión Mutua Hold and wait: un proceso retiene los recursos que se le asignaron mientras espera por los que le faltan asignar No – expropiación: a un proceso no se le quitan sus recursos, se debe esperara a que los libere. Espera circular: existe una cadena cerrada de procesos, donde c/u tiene al menos un recurso y espera por al menos un recurso del siguiente proceso en la cadena. (esta última condición es una potencial consecuencia de las otras tres) Estrategias para tratar DEADLOCK Ignorarlo Prevención del Deadlock Consiste en evitar alguna de las cuatro condiciones para el deadlock. Exclusión Mutua: esta condición es una característica proveída por el sistema operativo, que rara vez se elige deshabilitar. Hold and wait: se exige al proceso que pida todos sus recursos de una sola vez y no comenzara a correr hasta que se le puedan asignar todos simultáneamente. Esta técnica es muy ineficiente. No – expropiación: se puede prevenir de varias maneras. Una es hacer que un proceso al que se le niega un recurso, libera todos los que ya tiene, y más adelante vuelve a pedirlos. Otra es que si un proceso pide un recurso que es de otro, es este ultimo el que libera sus recursos. Espera circular: se previene imponiendo un orden lineal para pedir recursos(según los que ya se tienen asignados). Ejemplo: supongamos que se decide que no se puede pedir cinta hasta que se tenga disco(sí se necesita). Entonces tenemos un proceso que tiene disco y pide cinta, y otro que tiene cinta y pide disco, provocando una espera circular. El caso del ultimo es imposible porque el disco debe pedirse antes que la cinta Detectar y recuperar Evitación del Deadlock A diferencia de la prevención, permite las primeras tres condiciones necesarias para el deadlock, y se realizan juiciosas decisiones para evitar llegar al punto del deadlock. Estas decisiones se toman en tiempo de ejecución y es necesario saber las peticiones de recursos futuras de los procesos.