DISEÑO DE SISTEMAS OPERATIVOS PROFESORA: EVELINA WULF UNIDAD N° 3: INTERBLOQUEO GRUPO 10 UNIDAD N° 3: INTERBLOQUEO. ÍNDICE. BLOQUEO DE DOS FACES ........................................................................................................ 2 INTERBLOQUEOS DE COMUNICACIONES .............................................................................. 3 BLOQUEO ACTIVO ...................................................................................................................... 6 INANICIÓN .................................................................................................................................... 7 BIBLIOGRAFÍA .............................................................................................................................. 8 1 DISEÑO DE SISTEMAS OPERATIVOS PROFESORA: EVELINA WULF UNIDAD N° 3: INTERBLOQUEO GRUPO 10 UNIDAD N° 3: INTERBLOQUEO. BLOQUEO DE DOS FACES Hay un peligro de interbloqueo cuando muchos procesos se ejecutan al mismo tiempo, aunque hoy en día se conocen varios algoritmos de interbloqueo que son excelentes para situaciones específicas (pero no así para casos en general). Un caso conocido por muchos sistemas de base de datos es cuando se solicitan con frecuencia bloqueos sobre varios registros para luego poder hacer actualizaciones sobre esos registros bloqueados. Este método se lo conoce cómo bloqueo de dos fases, y su accionar en cada fase sería: 1° FASE: El proceso trata de bloquear los registros que necesita, uno a la vez. 2° FASE: Realiza las actualizaciones y libera los bloqueos. Mientras transcurre la primera fase, si un registro bloqueado llegase a ser requerido, el proceso libera todos sus bloqueos y la primera fase se reinicia. Este método es parecido a solicitar todos los recursos antes de realizar algo irreversible. Existen versiones donde el interbloqueo ocurre porque no se liberan los bloqueos y el reinicio no sucede. VENTAJAS - Garantiza la seriabilidad y la correcta ejecución de los procesos que no se consiguen con métodos simples. DESVENTAJAS - Bloquea los elementos que podrían ser desbloqueados tras su uso ocupados hasta la segunda fase, impidiendo que otros procesos que los necesiten los utilicen. - El rendimiento de este protocolo se degrada conforme aumenta el grado de concurrencia. Cómo se mencionó antes, este método no puede aplicarse en forma general. Podemos mencionar un ejemplo: en sistemas de tiempo real y sistemas de control de procesos, no es aceptable terminar un proceso a la mitad debido a que un recurso no está disponible. Tampoco se permite el reinicio si el proceso ya ha leído o escrito mensajes en la red. Una gran cantidad de aplicaciones no pueden estructurarse de esta manera. 2 DISEÑO DE SISTEMAS OPERATIVOS PROFESORA: EVELINA WULF UNIDAD N° 3: INTERBLOQUEO GRUPO 10 El método es funcional en situaciones donde las cosas se hayan ordenado con cuidado por el programador, permitiendo que el programa pueda detenerse en cualquier momento de la primera fase para luego reiniciarse. INTERBLOQUEOS DE COMUNICACIONES Sabemos que los interbloqueos de recursos son el tipo de interbloqueo más común: un proceso desea algo que otro proceso tiene y debe esperar a que este lo libere. Pero hay otros tipos de interbloqueo, cómo los que ocurren en los sistemas de comunicación dónde los procesos se comunican a través del envío de mensajes. Una situación común sería la siguiente: Si se llega perder el mensaje de petición entonces A se bloquea en espera de la respuesta, B se bloquea en espera de una petición; y sucede un interbloqueo dónde hay un conjunto de procesos en el que cada proceso está bloqueado en espera de un evento que sólo otro proceso puede provocar, a este caso se lo conoce cómo interbloqueo de comunicación. No hay recursos involucrados a la vista ya que A no está en posesión de un recurso que B quiere ni viceversa. Los interbloqueos de comunicación no se pueden evitar mediante el ordenamiento de recursos, ni por una programación cuidadosa (ya que no hay momentos en los que se puede posponer una petición). Entonces usaremos los tiempos de espera para anular el interbloqueo. Cómo ejemplo de interbloqueo de comunicación veamos que pasa en el caso de las redes de interconexión, específicamente en el Encaminamiento (routing), que tiene como objetivo determinar la ruta que debe seguir un mensaje desde el origen hasta el destino. Una red bien diseñada debe estar libre de interbloqueos. El interbloqueo en una red provoca que los paquetes no puedan avanzar hacia su destino porque cada uno estará esperando en un enlace a que otro paquete deje disponible un buffer de entrada. Esto no debe ocurrir porque los enlaces bloqueados forman un ciclo. 3 DISEÑO DE SISTEMAS OPERATIVOS PROFESORA: EVELINA WULF UNIDAD N° 3: INTERBLOQUEO GRUPO 10 Vamos a poder evitar que ocurra un interbloqueo restringiendo cómo se adquirieren los canales. Por ejemplo, en orden dimensional y aportando recursos adicionales como los canales virtuales, que asocian cada enlace físico con más de un buffer de entrada, es decir son canales adicionales (virtuales) que van a proporcionar una vía de escape en situaciones que provocan interbloqueo y no aumentan el número de enlaces en la red. Un esquema de malla 2D aplicando canales virtuales se vería de la siguiente manera: José Francisco Duato Marín realizó un desarrollo teórico posterior sobre las condiciones necesarias y suficientes que deben cumplir los algoritmos de encaminamiento para evitar el deadlock. Su aportación básica es la demostración de 4 DISEÑO DE SISTEMAS OPERATIVOS PROFESORA: EVELINA WULF UNIDAD N° 3: INTERBLOQUEO GRUPO 10 que no es necesario eliminar todas las dependencias cíclicas del grafo de dependencia de canales para obtener un algoritmo libre de interbloqueos siempre que los mensajes puedan encontrar rutas alternativas hacia el nodo destino que no estén involucradas en dependencias cíclicas. Desde luego que, si el mensaje original no se perdió y la respuesta tiene demora, el receptor destinado puede recibir el mensaje más de una vez. Veamos un sistema de pago electrónico en el que el mensaje contiene instrucciones para realizar un pago. Es evidente que no se debe repetir numerosas veces, sólo porque la red es lenta o el tiempo de espera es corto. Definimos protocolo como el término que se emplea para denominar al conjunto de normas y pautas para guiar una acción. No todos los interbloqueos ocurren en los sistemas de comunicaciones, ni todas las redes son interbloqueos de comunicación y pueden suceder interbloqueos de recursos. Vemos el ejemplo de la figura, cuya visión es muy general de una red de Internet formado por dos tipos de computadoras: hosts (servidores) y enrutadores. El host es una computadora de usuario, ya sea la PC de alguien en su hogar, o de una empresa o un servidor corporativo y el enrutador es una computadora de comunicaciones especializada que desplaza paquetes de datos desde el origen hasta el destino. Cada host está conectado a uno o más enrutadores, ya sea mediante una línea DSL, conexión de TV por cable, LAN, línea de marcación telefónica, red inalámbrica, fibra óptica. Cuando llega un paquete a un enrutador proveniente de uno de sus hosts, se coloca en un búfer para transmitirlo a continuación a otro enrutador, y después a otro hasta que llega al destino. Estos búferes son recursos y hay un número finito de ellos. Cada enrutador sólo tiene ocho búferes, pero en la realidad tiene millones. Suponga que todos los paquetes en el enrutador A necesitan ir a B, que todos los paquetes en B necesitan ir a C, que todos los paquetes en C necesitan ir a D y todos los paquetes en D necesitan ir a A. Ningún paquete se puede mover debido a que no hay búfer al otro 5 DISEÑO DE SISTEMAS OPERATIVOS PROFESORA: EVELINA WULF UNIDAD N° 3: INTERBLOQUEO GRUPO 10 extremo y tenemos un interbloqueo de recursos clásico, aunque a la mitad de un sistema de comunicaciones. BLOQUEO ACTIVO En ciertas situaciones se utiliza el sondeo, que se refiere a que está ocupado y en espera. Esta estrategia se utiliza a menudo cuando se va a usar la exclusión mutua por un tiempo muy corto. Imaginemos un par de procesos en la siguiente situación: Cada uno de los procesos necesita dos recursos y ambos utilizan la primitiva de sondeo entrar_region para tratar de adquirir los bloqueos necesarios. Si el proceso A se ejecuta primero y adquiere el recurso_1 y después se ejecuta el proceso B y adquiere el recurso_2, sin importar quién se ejecute a continuación, no progresará más, pero ninguno de los procesos se bloqueará. Sólo utiliza su quantum de CPU una y otra vez sin progresar, pero sin bloquearse tampoco. Por ende, no tenemos un interbloqueo, pero tenemos algo funcionalmente equivalente al interbloqueo: el bloqueo activo (livelock). Podemos encontrar varios casos de bloqueo activo en algunos sistemas, por ejemplo: el número total de procesos permitidos se determina con base en el número de entradas en la tabla de procesos por lo que las entradas de la tabla de procesos son recursos finitos. Si una operación fork falla debido a que la tabla está llena, un método razonable para el programa que realiza la operación fork es esperar un tiempo aleatorio y probar de nuevo. Ahora suponga que un sistema UNIX tiene 100 entradas de procesos. Se ejecutan diez programas cada uno de los cuales necesita crear 12 (sub)procesos. Una vez que cada proceso ha creado 9 procesos, los 10 procesos originales y los 90 procesos nuevos han agotado la tabla. Cada uno de los 10 procesos originales ahora se encuentra en un ciclo sin fin, bifurcando y fallando: un interbloqueo. La probabilidad de que esto ocurra es minúscula, pero podría ocurrir. Otro caso donde ocurre el bloqueo activo es por ejemplo en el número máximo de archivos abiertos que está restringido de manera similar por el tamaño de la tabla de nodos-i. por lo que ocurre un problema similar cuando se llena. El espacio de intercambio en el disco es otro recurso limitado. De hecho, casi todas las tablas en el sistema operativo representan un recurso finito. 6 DISEÑO DE SISTEMAS OPERATIVOS PROFESORA: EVELINA WULF UNIDAD N° 3: INTERBLOQUEO GRUPO 10 La mayoría de los sistemas operativos, incluyendo UNIX y Windows, sólo ignoran el problema suponiendo que la mayoría de los usuarios preferirán un bloqueo activo ocasional en vez de una regla que restrinja a todos los usuarios a un solo proceso, un solo archivo abierto y a sólo una cosa de todo. Si estos problemas se pudieran eliminar sin costo no habría mucha discusión. El problema es que el precio es alto, en su mayor parte en términos de imponer restricciones inconvenientes en los procesos. Vale la pena mencionar que algunas personas no hacen una distinción entre la inanición y el interbloqueo, ya que en ambos casos no hay un progreso positivo. Otras sienten que son fundamentalmente distintos. ya que un proceso podría programarse fácilmente para tratar de hacer algo n veces y, si todo fallara, probar otra cosa. Un proceso bloqueado no tiene esa opción. INANICIÓN En un sistema multitarea cómo Linux, las peticiones de recursos por parte de los procesos e hilos ocurren todo el tiempo, por lo cual es necesario definir una política para la asignación de dichos recursos. La inanición (en inglés, starvation) es un problema que ocurre cuando, por defecto de la política elegida, una petición de recursos queda esperando indefinidamente por ser atendida. Por esta razón es que la inanición también es conocida como bloqueo indefinido. La inanición y el interbloqueo están relacionados e incluso suelen tener las mismas consecuencias, pero las causas son diferentes y por lo tanto es conveniente no confundir los conceptos: un conjunto de procesos está en interbloqueo si cada proceso está esperando un recurso que sólo puede liberar o generar otro proceso del conjunto; en cambio, un proceso sufre de inanición cuando directamente nunca llega su turno de utilizar algún recurso o de ser atendido. Esta problemática la podemos encontrar, por ejemplo, en las planificaciones de procesos basadas en prioridades ya que un proceso de muy baja prioridad podría quedar esperando sin llegar a ejecutar si constantemente llegan procesos con una prioridad mayor. Para este ejemplo podríamos evitar la inanición usando alguna política del tipo FIFO, en la cual todo proceso en algún momento será ejecutado; o con la implementación de mecanismos cómo el envejecimiento (aging), que consiste en aumentar gradualmente la prioridad de los procesos que esperan mucho tiempo en el sistema. 7 DISEÑO DE SISTEMAS OPERATIVOS PROFESORA: EVELINA WULF UNIDAD N° 3: INTERBLOQUEO GRUPO 10 Bibliografía Silberschatz A., P. G. (2006). Fundamentos de Sistemas Operativos (7° Edición). Madrid, España: McGraw-Hill Interamericana. Espinosa, C. C. (s.f.). Repositorio Universitario Institucional de Recursos Abiertos. Obtenido de https://ruidera.uclm.es/xmlui/bitstream/handle/10578/6317/CCT0024CAP10.pdf?seq uence=1&isAllowed=y Expósito Singh D. y otros. (Julio de 2012). OPENCOURSEWARE Universidad Carlos III de Madrid. Obtenido de http://ocw.uc3m.es/ingenieria-informatica/arquitectura-decomputadores-ii/materiales-de-clasee/mc-f-005 Pardo, F. (21 de Julio de 2017). SimuRed Simulador de redes de multicomputadores. Obtenido de http://simured.uv.es/doc/simured.pdf Carretero Pérez J., & otros., y. (2000). Sistemas operativos: una visión aplicada. Madrid, España: McGraw-Hill Interamericana. Tanenbaum, A. S. (2009). Sistemas Operativos Modernos (3° Edición). México: Pearson Educación. 8