Grupo Digitalización. Integrantes: Acosta, Artesi, Fassari, Flook FIN DE SINCRONIZACIÓN Y COMUNICACIÓN ENTRE PROCESOS CONCURRENTES Sincronización entre procesos (CONCURRENTES): ordenamiento en el tiempo de las operaciones, debido a condiciones de carrera (RACE CONDITIONS). A simultaneidad de pedidos de un recurso único, secuenciamiento de su uso. Solución para la race condition: colocar una valla con cerrojo (LOCKEO) para cada recurso crítico. La sincronización permite que un proceso continué su ejecución luego de ocurrido un evento (por el que estaba esperando su ocurrencia) la sincronizaron se necesita para FORZAR la EXCLUSION MUTUA entre proceso. Comunicación (entre procesos): es un intercambio de datos que permite que los procesos intervinientes (en dicho intercambio) cooperen entre si a efectos de de llevar a cabo un objetivo global. LA COOPERACION ENTRE PROCESOS SE PUEDE LLEVAR A CABO DE DOS MANERAS DIFERENTES 1. A trabes de un área común de memoria (cooperation by sharing) 2. Mediante el intercambio de mensajes (cooperation by comunication). Caso 1: (área común de memoria): se necesitan una serie de mecanismos de sincronización (semáforos, monitores, etc.) para garantizar la consistencia de los datos allí almacenados. Ej.: productor – consumidor. Caso 2: (intercambio de mensajes): en este caso las variables son locales. PROPOSITO: permitir que dos procesos se sincronicen o se envíen datos mediante un mecanismo EXPLICITO. Mensaje: porción discreta de datos (generalmente un conjunto de bits) consistente en HEADER CUERPO Cuando los procesos interactúan entre si se deben satisfacer dos requisitos fundamentales: sincronización y comunicación. Los procesos necesitan SINCRONIZARSE para forzar la EM, y necesitan del INTERCAMBIO DE INFORMACIÓN para llevar adelante la cooperación entre ellos. Una aproximación (o intento) para proveer a los procesos de ambas funciones es el PASO DE MENSAJES. La ventaja del Paso de Mensajes es que conlleva LA IMPLEMENTACIÓN DE estas funciones tanto en sistemas distribuidos como en sistemas monoprocesadores y en sistemas con múltiples procesadores compartiendo memoria. Los sistemas de paso de mensajes vienen en varios “sabores” (modalidades de intercambio de información). La función de paso de mensajes viene implementada a trabes de un par de primitivas SEND: (destino, número de mensaje, mensaje) RECEIVE: (origen, numero de mensaje, &mensaje) -1- Grupo Digitalización. Integrantes: Acosta, Artesi, Fassari, Flook Este es el mínimo conjunto, de operaciones necesarias para que los procesos lleven a cabo la función de paso de mensajes. Su proceso (transmisor) envía información en forma de mensaje a otro proceso (Receptor) indicado en el destino del mensaje a trabes de SEND. A su vez un proceso recive información ejecutando la primitiva RECEIVE e indicando en ella el origen del proceso que envía el mensaje y el mensaje. Hay una serie de cuestiones relacionadas con el DISEÑO DE LOS SISTEMAS de paso de mensajes. 1. Sincronización entre los procesos que emiten las dos primitivas (SEND y RECEIVE). 2. Direccionamiento de cada mensaje (identificación de los procesos intervinientes en el paso de mensajes) 3. Formato de los mensajes. 4. disciplina de encolado de los mensajes recibidos. Estas cuatro cuestiones determinan los distintos sistemas de mensajes existentes en el mercado (o sistemas de comunicaciones). Transmisor Receptor mensaje reconocimiento Por diferencia de velocidad de los procesos TRANSMISOR y RECEPTOR (T>R) el sistema de PASO de MENSAJES va a requerir del uso de un buffer para amortiguar las fluctuaciones de velocidad relativa de los procesos TRANSMISOR y RECEPTOR. Para T y R se comuniquen se necesita un vínculo de comunicación (comunicación LINK) con las siguientes características: 1. nombre de los procesos asociados (origen T, destino R) 2. capacidad de vinculo (buffer space y transmisión space) 3. tamaño de cada mensaje 4. dirección del vinculo (unidireccional o bidireccional), half/ full duplex TIPOS DE COMUNICACIÓN ENTRE PROCESOS DIRECTA: los procesos envían y reciben los mensajes entre si. Dependen de las velocidades relativas entre ellos (si las velocidades son distintas sincronizan vía un buffer de MENSAJES) TX RX -2- Grupo Digitalización. Integrantes: Acosta, Artesi, Fassari, Flook INDIRECTA: los mensajes son enviados a un buzón (Mail Box) por el TRANSMISOR; y el RECEPTOR retira del buzón. MAILBOX RX TX LOS MENSAJES VAN Y VIENEN A BUZONES Propiedades de las comunicaciones: DIRECTA 1. AUTOMATICAMENTE se establece un vínculo (de comunicaciones) entre ambos procesos TRANSMISON y RECEPCION. Solo deben conocerse mutuamente (el PID del otro proceso). 2. el vínculo de comunicaciones se establece con exactamente dos procesos. 3. El vinculo es bidireccional full duplex INDIRECTA 1. el vínculo se establece solamente si ambos procesos comparten un buzón. 2. el vinculo (LINK) puede ser asociado con mas de dos procesos. Ej.: broadcast 3. un link puede ser UNI o BI direccional. 4. entre cada par de procesos puede haber varios links distintos, cada link correspondiente a un buzón. Ej.: TX MAILBOX RX RX TX RX COMUNICACIÓN ENTRE PROCESOS Mensajes Inter Process Communications Sincronización mediante mensajes Modelo Productor – Consumidor -3- Grupo Digitalización. Integrantes: Acosta, Artesi, Fassari, Flook RPC (remote procedure call) es una variante del modelo de paso de mensajes (message passing). Es un método para encapsular comunicaciones en un sistema distribuido. La esencia de esta técnica (RPC) es permitir que programas residentes en distintas maquinas interactúen entre ellos usando una semántica de call/return entre procesos; tal COMO SI LOS DOS PROGRAMAS estuvieran en la MISMA maquina. El RPC se usa para acceder a servicios remotos. Al mecanismo de los RPC se lo ve como un refinamiento de paso de mensajes SEGURO y BLOQUEANTE. CARACTERISTICAS DE DISEÑO DE SISTEMAS de PASO de MENSAJES para IPC y sincronización 1. SINCRONIZACION 2. DIRECCIONAMIENTO 3. FORMATO 4. DISCIPLINA DE ENCOLADO 1) SINCRONIZACION: la comunicación de mensajes entre dos procesos IMPLICA algún nivel de sincronización entre ambos procesos: el receptor no puede recibir un mensaje hasta que otro proceso lo haya enviado. Además se debe especificar que sucede con un proceso luego de haber emitido una primitiva SEND o RECEIVE. Analicemos primero el SEND: cuando un proceso emite un SEND pueden ocurrir dos cosas: BLOQUEANTE: el proceso que emite el SEND se bloquea hasta que se reciba el mensaje enviado SEND NO BLOQUEANTE: el proceso continúa trabajando luego del SEND Si un proceso emite un RECEIVE pueden ocurrir dos cosas: a) si previamente al receive algún proceso envió un mensaje entonces se recibe el mensaje y el proceso continua. b) Si no hay un mensaje en espera, hay dos posibilidades: b)1) El proceso se bloquea hasta que llegue un mensaje (RECEIVE BLOQUEANTE). b)2) El proceso continua su ejecución, abandonando el intento de recibir el mensaje. Recepción NO BLOQUEANTE. Hay tres combinaciones que son las más comunes, aunque en general cualquier sistema de comunicaciones solo soporta una de ellas (a lo sumo dos, no las tres). -4- Grupo Digitalización. Integrantes: Acosta, Artesi, Fassari, Flook a) SEND BLOQUEANTE, RECEIVE BLOQUEANTE: ambos procesos (TRANSMISION y RECEPCION) se bloquean hasta que el mensaje es entregado (a este tipo de comunicación se lo llama RENDEZ VOUS). Esta combinación permite una sincronización muy ajustada (estricta) entre los dos procesos intervinientes. Se usa en comunicaciones directas. b) SEND NO BLOQUEANTE, RECEIVE BLOQUEANTE: es quizás la combinación más útil. Permite que un proceso envié uno o mas mensajes a un conjunto de destinos en la forma mas rápida posible. El proceso que deba recibir un mensaje antes de continuar con su trabajo útil, deberá bloquearse hasta que el mensaje llegue. Ej.: procesos servidores de servicios (o de recursos) a otro procesos. c) SEND NO BLOQUEANTE, RECEIVE NO BLOQUEANTE: a ningún participante (en la comunicación) se le solicita esperar. El send No Bloqueante es el mas natural en programación de tareas concurrentes. POTENCIAL PROBLEMA: un error puede hacer que se generen muchos mensajes (no hay una forma de disciplinar a este proceso para que se interrumpa) consumiendo recursos del sistema: tiempo de procesador y áreas de buffer, en detrimento de otros procesos e incluso del mismo SO. El send No Bloqueante exige que sea el programador el encargado de determinar que cada mensaje se haya recibido correctamente. Los procesos deberán generar mensajes para dar a conocer la ORRECTA recepción de cada mensaje. El receive bloqueante es lo usual para programar tareas concurrentes. Esto en un sistema distribuido puede generar DEAD LOCK si un mensaje se pierde en la red o si el proceso que debía enviar el mensaje se bloquea antes del envió. Este problema se PUEDE RESOLVER con un receive no bloqueante. Pero surge otro problema: si un mensaje se envía luego de su correspondiente receive, el mensaje se pierde. Intentando resolver todas estas cuestiones surge el método TEST FOR ARRIVAL (Prueba de Recepción): otra alternativa consiste en permitir que un proceso averigüe si hay algún mensaje para el en espera, en cuyo caso si emite el receive correspondiente. Y permite que un proceso especifique más de un origen en la primitiva RECEIVE. Este esquema es útil para un proceso que ESTA ESPERANDO POR mensajes provenientes de múltiples orígenes. Permite que este proceso continué si cualquiera de esos mensajes es recepcionado. 2. DIRECCIONAMIENTO: como ya se vio la primitiva SEND debe especificar que proceso debe recibir cada mensaje. Análogamente la mayoría de las implementaciones (de un sistema de comunicaciones) permite que el proceso receptor especifique el origen del mensaje que quiere recibir. Los variados esquemas para especificar procesos en las primitivas SEND y RECEIVE caen en dos categorías: direccionamiento DIRECTO INDIRECTO 2)a) Direccionamiento DIRECTO: la primitiva SEND incluye el PID del proceso destino. La primitiva RECEIVE se puede manejar de dos formas: -5- Grupo Digitalización. Integrantes: Acosta, Artesi, Fassari, Flook 2)a)i) El proceso explícitamente designa al proceso emisor, con lo cual el proceso debe conocer en forma anticipada de que proceso espera un mensaje, esto es EFECTIVO cuando es usado en procesos cooperantes concurrentes (cooperating concurrent processes). 2)a) ii) EN OTRO CASOS, cuando es imposible especificar en forma anticipada al proceso emisor del mensaje a leer, se usa el direccionamiento directo implícito: en este caso el parámetro ORIGEN de la primitiva receive posee un valor que se retorna luego de ejecutada la operación de recepción. 2)b) Direccionamiento INDIRECTO: en este caso los mensajes no se envían directamente del proceso transmisor al proceso receptor, sino que se envían a una estructura de datos (compartida por ambos procesos) consistente en colas que pueden retener los mensajes temporariamente. A estas colas se las llama BUZONES (mailboxes). Aquí para que dos procesos se intercomuniquen es necesario que un proceso envié un mensaje al buzón apropiado, y que el otro proceso retire el mensaje del buzón en cuestión. La relación entre transmisores y receptores puede ser: a) uno a uno b) Varios a uno c) Uno a varios d) Varios a varios La relación uno a uno permite establecer un vinculo privado entre ambos procesos, libre de la interferencia errónea por parte de otros procesos. En la relación varios a uno al buzón se lo denomina PROT. Es útil en una interacción CLIENTS – SERVER donde un proceso provee de servicio a varios procesos, el servidor va a tener un port de entrada. La relación uno a varios permite un transmisor y muchos receptores, es útil para aplicaciones donde un proceso envía mensajes o información a un conjunto de procesos en forma simultanea (broadcast a un conjunto de procesos). A su vez la asociación procesos buzones puede ser ESTATICA DINAMICA Generalmente los ports se asignan a un proceso en forma estática, esto es: un port se crea y se asigna a un proceso PERMANENTEMENTE. De la misma forma una relación uno a uno se define estática y permanentemente. Cuando hay muchos transmisores (senders) la asociación de un origen con un buzón se puede efectuar dinámicamente, para ello se usan las primitivas connect y disconnect. Otro asunto a analizar es la propiedad del buzón (O sea, que proceso es su dueño). En el caso de un PORT, típicamente es el dueño quien lo posee y lo crea: El proceso receptor (O sea, el proceso servidor). Aquí cuando el proceso se destruye, el Port también se destruye. -6- Grupo Digitalización. Integrantes: Acosta, Artesi, Fassari, Flook En el caso de los Buzones (Mail Boxes) generales, el S.O. es quien ofrece el servicio de creación de buzones. En estos, si el S.O. le asigna la propiedad del buzón al proceso que pide su creación, esos buzones desaparecen al desaparecer el proceso “Dueño” del buzón. Si en cambio el S.O. retiene la propiedad del buzón creado (A través de uno de sus servicios) en este caso se necesita de un comando explicito para que se produzca su destrucción. 3) FORMATO DE LOS MENSAJES: Depende de los objetivos del dispositivo de mensajería (Messaging Facility). Además el formato de los mensajes depende de que el dispositivo de mensajera corra en un solo computador, o en un sistema distribuido (Red mediante). Para algunos S.O. los diseñadores prefieren mensajes cortos y de longitud fija con el objeto de minimizar Overhead de procesamiento y de almacenamiento. En estos casos si deseo pasar una gran cantidad de datos, los datos se colocan en un archivo, y el mensaje simplemente hace referencia a ese archivo donde almacena los datos. Una aproximación más flexible es permitir la transmisión de mensajes de longitud variable. Veamos ahora un formato de mensajes típico para S.O. que soportan mensajes de longitud variable: El mensaje se divide en dos partes: - Un encabezamiento: Conteniendo información acerca del mensaje. - Un cuerpo: Que contiene al mensaje en si. Tipo de Mensaje Encabezamiento Formato general de (Header) Destino (ID) Origen (Id) un mensaje de Longitud del Mensaje longitud variable Información de control Numero de Secuencia Prioridad Cuerpo (Body) Pointer Contenido del mensaje El campo Tipo permite discriminar entre varios tipos de mensajes. El campo puntero permite crear una lista de mensajes encadenada. El numero de secuencia para controlar la cantidad y el orden de los mensajes intercambiados entre fuentes (Orígenes) y destinos. 4) DISCIPLINA DE ENCOLADO (QUENING DISCIPLINE): Lo común es efectuar en tratamiento FIFO, pero esto no es suficiente si algunos mensajes son más urgentes que otros. Para esto tengo tres alternativas: a) Se usa un campo PRIORIDAD dentro del header. b) Se usa el tipo de cada mensaje. -7- Grupo Digitalización. Integrantes: Acosta, Artesi, Fassari, Flook c) Se permite que el receptor inspeccione la cola de mensajes y seleccione que mensaje se reciba próximamente. Veamos como se usa el paso de mensajes para forzar la exclusión mutua. Se usa un RECIVE Bloqueante y un SEND No Bloqueante. Un conjunto de procesos P1, …, Pn comparten un buzón llamado MUTEX, inicialado para contener un solo mensaje con contenido nulo. El proceso que desea ejecutar la R.C. primero intenta recibir este mensaje de contenido nulo. Si el buzón esta vacío el proceso se bloquea. Una vez adquirido este mensaje, el proceso ejecuta la R.C. controlada por este buzón. Al finalizar la R.C. el proceso vuelve a colocar este mensaje nulo en el buzón donde lo saco. De esta forma este mensaje funciona como TOKENS (En una red Token Ring). Esta solución asume que si más de un proceso efectúa una operación RECIVE en forma concurrente, entonces: - Si hay un mensaje (En el buzón) se le entrega a un solo proceso y los otros se bloquean, ó - Si el buzón esta vacío, todos los procesos se bloquean. Cuando haya un mensaje disponible, solo un proceso bloqueado se va a activar (Al cual se le entregará este mensaje). Estas presunciones son ciertas en casi todos los sistemas de paso de mensajes. Hay un ejemplo (Pág. 247) de Productor-Consumidor con Buffer acotado. Previo a tratamientos de D.L. dar ejemplo de transacciones (Ej.: Noviazgo con y sin embarazo) y de Roll Back de recursos (0 Km. de la novia si no se concreta la transacción, Casamiento). Conceptos: - Commit: Compromiso, llevar adelante la transacción. - Roll Back: Volver atrás la transacción. ABRAZO MORTAL: Los recursos se dividen en 2 tipos: Reusables: Recurso que puede ser usado con seguridad por un solo proceso por vez y no se destruye con ese tipo de uso. Ej.: Procesadores, canales de E/S, memoria primaria y secundaria, dispositivos y estructuras de datos: Semáforos, archivos y bases de datos. Consumibles: Recurso que se crea (Se produce) y se destruye al ser usado (Consume). No hay límite en cuanto a la cantidad de recursos consumibles de cualquier tipo. Un proceso no bloqueado puede producir cualquier cantidad de tales recursos. Cuando uno de estos recursos es tomado por un proceso, el recurso deja de existir. EJ.: Interrupciones, señales, mensajes e información en buffers de E/S. Receives bloqueantes puede generar Dead Lock (Pág. 271). -8- Grupo Digitalización. Integrantes: Acosta, Artesi, Fassari, Flook No existe una estrategia única para el tratamiento de Dead Lock. Ignorarlo. Posibles estrategias en el tratamiento de Dead Lock: Prevenirlo. Evitarlo. Detectarlo (Y corregirlo). Exclusión Mutua: Un recurso solo puede ser usado por un solo proceso a la vez. Condiciones para que se produzca el Dead Lock: Espera con retención (Hold & Wait): Un proceso retiene todos los recursos mientras espera que se le asignen otros recursos que ha solicitado. Apropiatividad (No Preemption): No se puede forzar la devolución de un recurso que es retenido por un proceso. La asignación del recurso es retentiva. Espera circular: Existe una cadena cerrada de procesos que retienen al menos un recurso necesario (Y por el cual expresa) el siguiente proceso de la cadena. Las tres primeras son condiciones necesarias (Puede no existir Dead Lock aunque las tres primeras condiciones estén presentes) y son las que a la larga conducen a la aparición de la cuarta condición (Espera circular). Las cuatro condiciones ya….. No se lee en la fotocopia este renglón. En muchos casos la pertenencia de las 3 primeras condiciones son deseables (Para llevar adelante la multiprogramación y el multiproceso, “Anche” el procesamiento distribuido). Por ejemplo, la exclusión mutua se necesita tanto para asegurar la consistencia de resultados y la integridad de una base de datos. En forma análoga, la No Apropiatividad (Preemption) no se puede llevar a cabo arbitrariamente (Especialmente cuando hay involucrados recursos “Dato”). La no apropiatividad debe ser soportada por un mecanismo de recuperación denominado ROLL BACK (Que relanza un proceso y sus recursos en base a un estado previo a su interrupción (Cese del uso del/os recurso/s). En ese caso previo a la interrupción debo dejar el estado de todos los recursos en el mismo estado en el que se encontraban previo al lanzamiento interrumpido, a fin de que el proceso pueda (Al reanudar su actividad) repetir sus acciones interrumpidas. PREVENCION DEL DEAD LOCK: Para llevara adelante esta estrategia se debe diseñar un sistema en el cual se Excluya la posibilidad de un Dead Lock. Se (Restringen/Condicionan) los pedidos de recursos para prevenir la ocurrencia de al menos una de las condiciones necesarias y suficientes del Dead Lock. -9- Grupo Digitalización. Integrantes: Acosta, Artesi, Fassari, Flook Clases de metodos para prevenir el Dead Lock: 1) Metodos indirectos: Consiste en prevenir la ocurrencia de al menos una de las tres condiciones necesarias para la ocurrencia de Dead Lock. 2) Metodos directos: Consisten en prevenir la ocurrencia de la cuarta condicion (Espera circular). METODOS INDIRECTOS 1. Evitar la exclusión mutua: si el acceso a un recurso requiere de EM, esta condición no se puede evitar. Pero DEBE ser soportada por el SO. Algunos recursos (ej.: archivos) permiten múltiples accesos por parte de procesos escritores. En este caso se da la posibilidad del DL cuando mas de un proceso requiere FALTA TEXTO 2. Evitar la espera con retención: esto requiere que un proceso solicite todos sus recursos al mismo tiempo (digamos antes de pasar de NEW a READY) y que quede bloqueado hasta tanto se le pueda asignar todo lo solicitado. Este esquema es INEFICIENTE desde varios aspectos: 2)a) Un proceso queda bloqueado hasta que todo lo que pida esta disponible, aun cuando con solo algunos recursos podría haber terminado. Incluso espero por recursos que quizá en esta corrida no uso en absoluto. 2)b) Los recursos así asignados (todos de una vez) permanecen denegados a otros procesos aun cuando el proceso que los tiene asignados los use muy de vez en cuando o no los use en absoluto (en esta corrida). Mal aprovechamiento de los recursos. 2)c) El proceso debe conocer por adelantado todos los recursos que va a necesitar. Un gran problema en aplicaciones modularmente programadas con procesos concurrentes o estructurados como multihilos, la aplicación debería conocer para esa corrida que recursos va a necesitar cada uno de sus hilos en el momento de solicitar su ejecución, para efectuar el pedido simultáneo de todos los recursos necesarios para esa corrida. 3. Evitar la apropiatividad. Esto se puede lograr de dos maneras 3)a) Si a un proceso que tiene retenido un conjunto de recursos se le niega una asignación posterior entonces a ese proceso se le liberan todos los recursos ya asignados. Y si es necesario antes de reiniciarlo se le asignan todos los recursos desasignados más los que acababa de pedir en el momento de ser interrumpido en su ejecución. - 10 - Grupo Digitalización. Integrantes: Acosta, Artesi, Fassari, Flook 3)b) Si un proceso P1 requiere un recurso que en estos momentos esta siendo retenido por un proceso P2 entonces el SO puede desapropiar (preempt) al proceso P2, obligándolo a liberar sus recursos. Esto solo tiene sentido si ambos procesos tienen la MISMA PRIORIDAD de ejecución. Cuando el estado de los recursos involucrados se pueden salvar con facilidad a fin de ser reestablecidos (restored) cuando se reasignan con posterioridad. Ejemplo: el procesador- la memoria principal (roll in – roll out) METODO DIRECTO 4. Evitar la espera circular: se logra estableciendo un ordenamiento lineal de los tipos de recursos permitiendo la asignación de los mismos de un orden estrictamente mayor al de mayor orden actualmente asignado. Ej.: si actualmente un proceso P1 tiene asignados recursos tipo R1, R2,…,Ri y solicita un recurso Rk solo se lo asigno si k>i. Desventajas: a) establecer el ordenamiento de recursos de recursos (dos instalaciones con igual equipamiento usan de la misma forma cada uno de los componentes). b) Análogamente al caso de evitar las dos condiciones (retener y esperar) este método del ordenamiento lineal conlleva ineficiencia en el uso de los recursos en forma innecesaria [el recurso Rk quizás solo es solicitado por P1 en el ejemplo])La prevención de DL (restringir o condicionar el pedido de recursos para prevenir la ocurrencia de al menos una de las 4 condiciones necesarias y suficientes para la existencia del mismo). Conlleva tanto a un uso ineficiente de los recursos como una ejecución indeficiente de los procesos. EVITAR EL DL (Avoidance) Por el contrario, el evitar permite la ocurrencia de las tres primeras condiciones [EM, Hola and Wait, Apropiatividad (Non Preemption)] pero hace elecciones juiciosas al asignar cada nuevo recurso solicitado para asegurarse que el punto de DL no se alcanzara jamás. Actual pudiera llevar (si se efectúa la asignación) potencialmente a un DL. Veremos dos implementaciones posibles: 1. Negación de la iniciación del proceso 2. Negación de la asignación del recurso Caso 1: no lanzar (start) un proceso si sus requerimientos pudieran ocasionar un DL. Caso 2: no permitirle a un proceso efectuar un pedido de recurso si su asignación pudiera conducir a un DL. - 11 - Grupo Digitalización. Integrantes: Acosta, Artesi, Fassari, Flook Método 1: (Process Initiation Denial) Consideremos un sistema con m distintos tipos de recursos y con n procesos corriendo simultáneamente. Definamos los siguientes vectores y matrices. Vector de recursos totales del sistema (cantidad total de cada recurso en el sistema) R= (R1, R2,…,Rm) VR: resource (recurso) Vector de recursos disponibles (en estos momentos) en el sistema (cantidad total de cada recurso no asignado a ningún proceso). VV: available (disponible) V= (V1,V2,…,Vn) Matriz de pedidos o solicitudes (c: clain) donde cij es la cantidad total de recurso j solicitada por el proceso i. Matriz de asignación (A: allocation) donde aij es la cantidad actual del recurso j asignado al proceso i. C= A= R1 R2 RM P1 C11 C12 C1M P2 C21 C22 C2M PN CN1 CN2 CNM R1 R2 RM P1 A11 A12 A1M P2 A21 A22 A2M PN AN1 AN2 ANM Cada fila de la matriz C esta dedicada a un proceso y representa los requerimientos máximos de cada recurso que efectúa dicho proceso. - 12 - Grupo Digitalización. Integrantes: Acosta, Artesi, Fassari, Flook Esta información debe ser declarada con anticipación por parte del proceso para que todos los algoritmos funcionen. FALTA TEXTO 1. Todos los recursos están asignados o disponibles 2. Ningún proceso puede solicitar mayor cantidad de un determinado recurso a la existente en el sistema 3. A ningún proceso se le deben asignar (por cada tipo de recurso) una cantidad mayor a la originalmente solicitada al sistema. Caso 1: Para evitar DL: lanzar (start) un proceso nuevo Pn+1 solo si Un nuevo proceso solo se lanza si el máximo de requerimientos de todos los procesos actuales más los requerimientos del nuevo proceso se pueden satisfacer. Esta estrategia dista de ser óptima pues supone lo peor: que todos los procesos van a efectuar el máximo de sus solicitudes en forma conjunta (o concurrente). Caso 2: Negación de la asignación de recurso (también conocida como algoritmo del banquero). Para ello es necesario introducir los conceptos de estado y estado seguro. Consideremos un sistema con un numero fijo de procesos Pi y un numero fijo de recursos Rj. En cualquier instante un proceso puede tener asignados cero o mas recursos. El estado del sistema es simplemente la asignación actual de recursos a los procesos. Entonces el estado consiste de los dos vectores ya vistos [R: resource (recurso) y V: available (disponible)] y las dos matrices ya definidas (C: solicitudes, A: asignaciones). Un estado seguro es aquel en el cual existe al menos una secuencia (de asignaciones) que no genera DL; o sea FALTA TEXTO Un estado es inseguro cuando no es seguro (o sea que no se puede encontrar una secuencia de asignaciones que permita la finalización de todos los procesos). El algoritmo del banquero establece: (asegurando que el sistema siempre va a estar en estado seguro) cuando un proceso efectué el pedido de un conjunto de recursos, suponga que la solicitud se satisface, actualice el estado del sistema de acuerdo a estas asignaciones, y determine si el resultado es un estado seguro. Si es seguro satisfaga el pedido. Si es inseguro entonces bloquee el proceso hasta tanto sea seguro el satisfacer dicho pedido. El estado inseguro es condición necesaria para un DL, no condición suficiente (un estado inseguro puede no ocasionar DL). Es estado inseguro no es estado DL. La estrategia de evitar no predice un DL, solamente se anticipa a la posibilidad de DL. Y asegura que dicha posibilidad no va a ocurrir jamás. - 13 - Grupo Digitalización. Integrantes: Acosta, Artesi, Fassari, Flook Ventajas del método de evitar el DL: 1) no es necesario desapropiar (preempt) y roll bachear procesos 2) es menos restrictiva que la prevención Restricciones de uso 1) cada proceso debe conocer por anticipado la cantidad máxima de requerimientos de cada recurso 2) los procesos analizados deben ser independientes (no debe haber ningún tipo de cooperación entre ellos, que exija sincronización). Son todos procesos no sincronización 3) debe existir un numero fijo de recursos a asignar 4) ningún proceso puede efectuar una salida exit reteniendo recursos. - 14 -