Interbloqueo Concurrencia: Interbloqueo e Inanición Capítulo 6 Bloqueo permanente de un conjunto de procesos que compiten por recursos del sistema o por comunicación con los otros No existe una solución eficiente Implican a varios procesos cuyas necesidades por recursos entran en conflicto
Recursos Reutilizables Usado por un procesa cada vez y que no se agotan por el uso Los procesos obtienen los recursos que más tarde liberarán para que otros lo reusen Los procesadores, canales de E/S, memoria principal y secundaria, ficheros, bases de datos y semáforos Un interbloqueo ocurre si cada proceso mantiene un recurso y pide otro Ejemplo de Interbloqueo Otro Ejemplo de Interbloqueo Hay espacio disponible para almacenar 200K bytes, y ocurre la siguiente secuencia de eventos P1 Request 80K bytes; Request 60K bytes; P2 Request 70K bytes; Request 80K bytes; El interbloqueo ocurre si ambos procesos llegan a su segunda petición
Recursos Consumibles Creados (produced) y destruidos (consumed) por un proceso Interrupciones, señales, mensajes e información en buffers de E/S El interbloqueo puede ocurrir si un Receptor de un mensaje está bloqueado Una extraña combinación de eventos puede dar lugar a interbloqueo Ejemplo de Interbloqueo El interbloqueo ocurre si la recepción es bloqueante P1 Receive(P2); Send(P2, M1); P2 Receive(P1); Send(P1, M2); Condiciones para el Interbloqueo Exclusión mutua sólo un proceso puede usar un recurso cada vez Mantener-y-esperar Un proceso pide todos los recurso que necesita en un momento Condiciones para el Interbloqueo Sin expropiación (No preemption) Si a un proceso que mantiene ciertos recursos se le deniega una petición, dicho proceso debe liberar sus recursos originales Si un proceso pide un recurso que actualmente mantiene otro proceso, el sistema operativo puede expropiar el segundo proceso y pedirle que libere sus recursos
Condiciones para el Interbloqueo Espera circular Se previene definiendo un orden lineal de los tipos de recurso Evitación de Interbloqueo Se toma una decisión dinámicamente cuando la actual petición de asignación de recurso, si se concede, potencialmente dará lugar a un interbloqueo Requiere el conocimiento de las peticiones futuras del proceso Dos Enfoques para la Evitación de Interbloqueo No comenzar un proceso si sus demandas pueden dar lugar a un interbloqueo No conceder una petición de recurso incremental a un proceso si esta asignación puede dar lugar a interbloqueo Denegación de Asignación de Recurso Se le conoce como algoritmo de banquero El estado del sistema es la asignación actual de recursos a procesos Un estado seguro es donde hay al menos una secuencia que no da lugar a interbloqueo Un estado de riesgo es un estado que no es seguro
Determinación de un Estado Seguro Estado Inicial Determinación de un Estado Seguro P2 se ejecuta hasta la finalización Determinación de un Estado Seguro P1 se ejecuta hasta la finalización Determinación de un Estado Seguro P3 se ejecuta hasta la finalización
Determinación de un Estado de Riesgo Determinación de un Estado de Riesgo Evitación de Interbloqueo Detección de Interbloqueo La máxima necesidad de recurso debe ser indicada de antemano Los procesos bajo consideración deben ser independientes; sin necesidad de sincronización Habrá un número fijo de recursos que asignar Ningún proceso puede salir manteniendo recursos
Estrategias una vez Detectado un Interbloqueo Abortar todos los procesos en interbloqueo Recuperar cada proceso bloqueado a algún checkpoint previamente definido y reiniciar todos los procesos puede volver a ocurrir el mismo interbloqueo Abortar sucesivamente los procesos bloqueados hasta que desaparece el interbloqueo Expropiar sucesivamente los recursos hasta que desaparece el interbloqueo Criterios de Selección de Procesos en Interbloqueo Menor cantidad de tiempo del procesador consumida hasta el momento Menor número de líneas de salida producidas hasta el momento Mayor tiempo restante estimado Menor número de recursos asignados hasta el momento Menor prioridad El Problema de la Cena de los Filósofos Mecanismos de Concurrencia en UNIX Pipes (encaminadores) Mensajes Memoria compartida Semáforos Señales (signals)
Primitivas de Sincronización de los Threads de Solaris Locks de Exclusión mutua (mutex) Semáforos Locks de múltiples lectores, único escritor (readers/writer) Variables de condición Mecanismos de Concurrencia de Windows 2000 Proceso Thread Fichero Entrada de consola Notificación de cambio en fichero Mutex Semáforo Evento Temporizador de espera