Informe - Interbloqueos (Grupo 02)
Informe - Interbloqueos (Grupo 02)
Informe - Interbloqueos (Grupo 02)
UNIVERSIDAD NACIONAL
DE TRUJILLO
FACULTAD DE INGENIERIA
ESCUELA DE INGENIERIA DE SISTEMAS
Tema:
“INTERBLOQUEOS”
Profesor:
César Arellano Salazar
Integrantes:
INTERBLOQUEOS
CONTENIDO
INTRODUCCIÓN .......................................................................................................... 6
DESARROLLO ............................................................................................................. 6
1. Recursos ............................................................................................................ 7
1.1.1. Recurso apropiativo: ................................................................................... 7
1.1.2. Recurso no apropiativo: .............................................................................. 7
1.2. Adquisición de recursos .................................................................................. 8
1.2.1. Recurso adquirido por solo 1 proceso ......................................................... 8
1.2.2. Recurso adquirido por 2 o más procesos .................................................... 8
2. Interbloqueo ....................................................................................................... 9
2.1. Condiciones para los interbloqueos de recursos ........................................... 10
2.2. Modelo de Interbloqueo ................................................................................ 10
3. El Algoritmo del Avestruz ................................................................................. 11
4. Detección y recuperación de un Interbloqueo................................................... 11
4.1. Conceptos: ................................................................................................... 11
4.2. Detección de interbloqueos con un recurso de cada tipo .............................. 11
4.3. Detección del interbloqueo con varios recursos de cada tipo ........................ 13
4.4. Recuperación de un interbloqueo: ................................................................ 15
4.4.1. Recuperación por medio de apropiación: .................................................. 15
4.4.2. Recuperación a través del retroceso: ........................................................ 15
4.4.3. Recuperación a través de la eliminación de procesos: .............................. 16
5. Cómo evitar un Interbloqueo ............................................................................ 16
5.1. Trayectoria de recursos............................................................................. 16
5.2. Estados seguros e inseguros .................................................................... 18
5.3. El algoritmo del banquero para un solo recurso ........................................ 19
5.4. El algoritmo del banquero para varios recursos......................................... 21
6. Como prevenir interbloqueos ........................................................................... 22
6.1. Cómo atacar la condición de exclusión mutua........................................... 22
6.2. Cómo atacar la condición de contención y espera .................................... 23
6.3. Cómo atacar la condición no apropiativa ................................................... 23
6.4. Cómo atacar la condición de espera circular ............................................. 24
7. Mecanismos de concurrencia de UNIX............................................................. 25
7.1. TUBERIAS ................................................................................................ 29
7.2. MENSAJES ............................................................................................... 30
7.3. MEMORIA COMPARTIDA ........................................................................ 30
7.4. SEMAFOROS ........................................................................................... 30
7.5. SEÑALES ................................................................................................. 31
8. Mecanismos de concurrencia del núcleo de Linux ........................................... 32
LISTA DE ILUSTRACIONES
Ilustración 1: Uso de un semáforo para proteger los recursos. (a) Un recurso. (b) Dos
recursos ........................................................................................................................ 8
Ilustración 2: (a) Código libre de interbloqueos. (b) Código con potencial de
interbloqueo. ................................................................................................................. 9
Ilustración 3- Gráficos de asignación de recursos. (a) Contención de un recurso. (b)
Petición de un recurso. (c) Interbloqueo ..................................................................... 10
Ilustración 4: (a) Proceso con interbloqueo (b) Sección con Interbloqueo ................ 12
Ilustración 5: Estructurad de datos para detección de interbloqueos con recursos
múltiples ..................................................................................................................... 14
Ilustración 6: Trayectorias de recursos de dos procesos ............................................. 17
Ilustración 7: Demostración de que el estado en (a) es seguro. .................................. 18
Ilustración 8: Demostración de que el estado en (b) no es seguro. ............................. 19
Ilustración 9: Tres estados de asignación de recursos: (a) Seguro. (b) Seguro. (c)
Inseguro...................................................................................................................... 20
Ilustración 10: El algoritmo del banquero con varios recursos..................................... 21
Ilustración 11: (a) Recursos ordenados en forma numérica. (b) Un gráfico de recursos
................................................................................................................................... 24
Ilustración 12: Resumen de los métodos para evitar interbloqueos............................. 25
Ilustración 13: Disposición para los filósofos comensales. .......................................... 26
Ilustración 14: Solución 1 (Problema de los filósofos comensales) ............................. 27
Ilustración 15: Solución 2 (Problema de los filósofos comensales) ............................. 27
Ilustración 16: Solución 3 (Problema de los filósofos comensales) ............................. 29
Ilustración 17: Operaciones disponibles con señales .................................................. 32
Ilustración 18: Operaciones atómicas en Linux ........................................................... 34
Ilustración 19: Cerrojos cíclicos en Linux .................................................................... 35
Ilustración 20: Semáforos en Linux ............................................................................. 38
Ilustración 21: Barreras en Linux ................................................................................ 39
Ilustración 22: Estructura de Datos de Sincronización de Solaris ................................ 39
Ilustración 23:Uso de la función cv_wait() ................................................................... 42
Ilustración 24: Objetos de sincronización en Windows ................................................ 42
INTRODUCCIÓN
Los sistemas computacionales están llenos de recursos que pueden ser utilizados por
sólo un proceso a la vez sin embargo cuando dos procesos escriben de manera
simultánea en uno de estos recursos se producen incoherencias. En consecuencia,
todos los sistemas operativos tienen la habilidad de otorgar (en forma temporal) a un
proceso el acceso exclusivo a ciertos recursos.
Para muchas aplicaciones, un proceso necesita acceso exclusivo no sólo a un recurso,
sino a varios. Por ejemplo, suponga que cada uno de dos procesos quiere grabar un
documento digitalizado en un CD. El proceso A pide permiso para utilizar el escáner y
se le otorga. El proceso B se programa de manera distinta y solicita primero el grabador
de CDs, y también se le otorga. Ahora A pide el grabador de CDs, pero la petición se
rechaza hasta que B lo libere. Por desgracia, en vez de liberar el grabador de CD, B
pide el escáner. En este punto ambos procesos están bloqueados y permanecerán así
para siempre. A esta situación se le conoce como interbloqueo.
DESARROLLO
1. Recursos
Los recursos vendrían a ser los objetos exclusivos otorgados a diferentes
procesos, estos pueden ser un dispositivo de hardware (por ejemplo, una unidad
de cinta) o una pieza de información (como un registro bloqueado en una base
de datos). Por lo general, una computadora tendrá muchos recursos que se
pueden adquirir.
Cuando hay disponibles varias copias de un recurso, se puede utilizar sólo una
de ellas para satisfacer cualquier petición de ese recurso. En resumen, un
recurso es cualquier cosa que se debe adquirir, utilizar y liberar con el transcurso
del tiempo.
1.1. Recursos apropiativos y no apropiativos
Los recursos son de dos tipos: apropiativos y no apropiativos.
1.1.1. Recurso apropiativo:
Es aquel recurso que se puede quitar al proceso que lo posee
sin efectos dañinos. Ejemplo
Ilustración 1: Uso de un semáforo para proteger los recursos. (a) Un recurso. (b) Dos recursos
Ilustración 2: (a) Código libre de interbloqueos. (b) Código con potencial de interbloqueo.
2. Interbloqueo
“Un conjunto de procesos se encuentra en un interbloqueo si cada
proceso en el conjunto está esperando un evento que sólo puede ser ocasionado
por otro proceso en el conjunto”.
Debido a que todos los procesos están en espera, ninguno de ellos producirá
alguno de los eventos que podrían despertar a cualquiera de los otros miembros
del conjunto, y todos los procesos seguirán esperando para siempre. En otras
palabras, ninguno de los procesos se puede ejecutar, ninguno de ellos puede
liberar recursos y ninguno puede ser despertado.
Este resultado se aplica a cualquier tipo de recurso, tanto de hardware
como de software. A este tipo de interbloqueo se le conoce como interbloqueo
de recursos. Es probablemente el tipo más común, pero no el único. Para este
modelo suponemos que los procesos tienen sólo un hilo y que no hay
interrupciones posibles para despertar a un proceso bloqueado.
ejecuta hasta que termina, momento en el que devuelve los recursos que
contiene a la reserva de recursos disponibles. Después se marca como
completado. Si todos los procesos pueden en última instancia ejecutarse
hasta completarse, ninguno de ellos está en interbloqueo. Si algunos de
ellos nunca pueden terminar, están en interbloqueo. Aunque el algoritmo
no es determinístico (debido a que puede ejecutar los procesos en
cualquier orden posible), el resultado siempre es el mismo.
Ahora que sabemos cómo detectar interbloqueos (por lo menos
cuando se conocen de antemano las peticiones de recursos estáticas),
surge la pregunta sobre cuándo buscarlos. Una posibilidad es comprobar
cada vez que se realiza una petición de un recurso. Esto sin duda los
detectará lo más pronto posible, pero es potencialmente costoso en
términos de tiempo de la CPU. Una estrategia alternativa es comprobar
cada k minutos, o tal vez sólo cuando haya disminuido el uso de la CPU
por debajo de algún valor de umbral. La razón de esta consideración es
que, si hay suficientes procesos en interbloqueo, habrá pocos procesos
ejecutables y la CPU estará inactiva con frecuencia.
4.4. Recuperación de un interbloqueo:
Algunas formas de recuperarse de un interbloqueo detectado son:
4.4.1. Recuperación por medio de apropiación:
En algunos casos puede ser posible quitar temporalmente un
recurso a su propietario actual y otorgarlo a otro proceso. En muchos
casos se puede requerir intervención manual, en especial en los
sistemas operativos de procesamiento por lotes que se ejecutan en
mainframes.
Por ejemplo, para quitar una impresora láser a su propietario, el
operador puede recolectar todas las hojas ya impresas y colocarlas
en una pila. Después se puede suspender el proceso (se marca como
no ejecutable). En este punto, la impresora se puede asignar a otro
proceso. Cuando ese proceso termina, la pila de hojas impresas se
puede colocar de vuelta en la bandeja de salida de la impresora y se
puede reiniciar el proceso original.
4.4.2. Recuperación a través del retroceso:
Los procesos realizan puntos de comprobación en forma
periódica, realizar puntos de comprobación en un proceso significa
que su estado se escribe en un archivo para poder reiniciarlo más
Estado Seguro
Estado Inseguro
Ahora, supongamos que tenemos el estado inicial que se muestra
en la figura (a), pero esta vez A solicita y obtiene otro recurso, con lo que
obtenemos la figura (b).
Ilustración 9: Tres estados de asignación de recursos: (a) Seguro. (b) Seguro. (c) Inseguro.
Si podemos evitar que los procesos que contienen recursos esperen por más
recursos, podemos eliminar los interbloqueos. Una forma de lograr esta meta es
requerir que todos los procesos soliciten todos sus recursos antes de empezar
su ejecución. Si todo está disponible, al proceso se le asignará lo que necesite y
podrá ejecutarse hasta completarse. Si uno o más recursos están ocupados, no
se asignará nada y el proceso sólo esperará. Un problema inmediato con este
método es que muchos procesos no saben cuántos recursos necesitarán hasta
que hayan empezado a ejecutarse. De hecho, si lo supieran se podría utilizar el
algoritmo del banquero. Otro problema es que los recursos no se utilizarán de
una manera óptima con este método. Sin embargo, algunos sistemas de
procesamiento por lotes de mainframes requieren que el usuario liste todos los
recursos en la primera línea de cada trabajo. Después el sistema adquiere todos
los recursos de inmediato, y los mantiene hasta que el trabajo termina. Aunque
este método impone una carga sobre el programador y desperdicia recursos,
evita los interbloqueos. Una manera ligeramente distinta de romper la condición
de contención y espera es requerir que un proceso que solicita un recurso libere
temporalmente todos los recursos que contiene en un momento dado. Después
puede tratar de obtener todo lo que necesite a la vez.
Sólo queda una condición. La espera circular se puede eliminar de varias formas.
Una de ellas es simplemente tener una regla que diga que un proceso tiene
derecho sólo a un recurso en cualquier momento. Si necesita un segundo
recurso, debe liberar el primero. Para un proceso que necesita copiar un enorme
archivo de una cinta a una impresora, esta restricción es inaceptable. Otra
manera de evitar la espera circular es proporcionar una numeración global de
todos los recursos, como se muestra en la figura 6-13(a). Ahora la regla es ésta:
los procesos pueden solicitar recursos cada vez que quieran, pero todas las
peticiones se deben realizar en orden numérico. Un proceso puede pedir primero
una impresora y después una unidad de cinta, pero tal vez no pueda pedir
primero un trazador y después una impresora.
Ilustración 11: (a) Recursos ordenados en forma numérica. (b) Un gráfico de recursos
Con esta regla, el gráfico de asignación de recursos nunca puede tener ciclos.
En la figura 6-13(b). Podemos obtener un interbloqueo sólo si A solicita el recurso
j y B solicita el recurso i. Suponiendo que i y j sean recursos distintos, tendrán
diferentes números. Si i > j, entonces A no puede solicitar a j debido a que es
menor de lo que ya tiene. Si i < j, entonces B no puede solicitar a i debido a que
es menor de lo que ya tiene. De cualquier forma, el interbloqueo es imposible.
Con más de dos procesos se aplica la misma lógica. En cada instante, uno de
los recursos asignados será el más alto. El proceso que contiene ese recurso
nunca pedirá un recurso que ya esté asignado. Terminará o, en el peor caso,
solicitará recursos con mayor numeración, los cuales están disponibles. En un
momento dado, terminará y liberará sus recursos. En este punto, algún otro
proceso contendrá el recurso más alto y también podrá terminar. En resumen,
existe un escenario en el que todos los procesos terminan, por lo que no hay
interbloqueo presente. Una variación menor de este algoritmo es retirar el
requerimiento de que los recursos se adquieran en una secuencia cada vez más
estricta, y simplemente insistir que ningún proceso puede solicitar un recurso
menor del que ya contiene. Si al principio un proceso solicita 9 y 10, y después
libera ambos recursos, en efecto está empezando otra vez, por lo que no hay
razón de prohibirle que solicite el recurso 1. Aunque el ordenamiento numérico
de los recursos elimina el problema de los interbloqueos, puede ser imposible
encontrar un ordenamiento que satisfaga a todos. Cuando los recursos incluyen
entradas en la tabla de procesos, espacio en la cola de impresión del disco,
registros bloqueados de la base de datos y otros recursos abstractos, el número
de recursos potenciales y usos distintos puede ser tan grande que ningún
ordenamiento podría funcionar. Los diversos métodos para evitar el interbloqueo
se sintetizan en la figura 6-14.
Como podemos ver la disposición de la mesa es simple, una mesa redonda con
cinco platos, uno para cada filosofo y cinco tenedores. Para poder comer el
filosofo se debe sentar en el lugar de su plato y tomar los tenedores que se
encuentran a la izquierda y derecha de este.
8.1. TUBERIAS
relacionados pueden compartir tuberías sin nombre, mientras que, los procesos
pueden compartir tuberías con nombre tanto si están relacionadas como si no.
8.2. MENSAJES
8.5. SEÑALES
prioridades. Es decir, todas las señales se tratan por igual; las señales que
ocurren al mismo tiempo se le presentan al proceso una detrás de otra, sin
ningún orden en particular.
Los procesos se pueden enviar señales entre sí, o puede ser el núcleo quien
envíe señales internamente. Para entregar una señal, se actualiza un campo en
la tabla de procesos correspondiente al proceso al que se le está enviando la
señal. Dado que por cada señal se mantiene un único bit, las señales de un
determinado tipo no pueden encolarse. Una señal solo se procesa después de
que un proceso se despierte para ejecutar o cuando el proceso está retornando
de una llamada al sistema. Un proceso puede responder a una señal realizando
alguna acción por defecto (por ejemplo, su terminación), ejecutando una función
de manejo de la señal o ignorando la señal.
9.3. Semáforos
Como ya lo hemos mencionado, Linux incluye los mecanismos de
concurrencia comunes de UNIX, dentro de los cuales están los
semáforos, los cuales son usados únicamente en el nivel de usuario, esto
es debido a que para el propio uso del núcleo de Linux cuenta con la
implementación de semáforos exclusivos que no pueden accederse
directamente desde un programa de usuario mediante llamadas al
sistema, sino que son implementados como funciones dentro del núcleo
haciéndolos más eficientes que los semáforos visibles para el usuario.
9.4. Barreras
En algunas arquitecturas, los compiladores o el hardware del
procesador pueden cambiar el orden de los accesos a memoria del
código fuente para optimizar el rendimiento. Este cambio, en ciertas
circunstancias donde el orden de la lectura y asignación de las variables
no es importante, es saludable para el optimizar el uso de las tuberías de
instrucciones del procesador. Sin embargo, cuando el orden de estas si
es importante para la ejecución debido al uso que se hace de la
información desde otro hilo o desde un dispositivo de hardware.
La ilustración 9
muestra las estructuras de
datos asociadas a estas
funciones. Las funciones de iniciación de estos mecanismos rellenan algunos de
los campos de datos. Una vez que se crea un objeto sincronización, sólo se
pueden realizar dos operaciones: entrar (adquirir un cerrojo) y liberar
(desbloquearlo). Si un hilo Ilustración 22: Estructura de Datos de Sincronización de Solaris
CONCLUSIONES
• Los interbloqueos son producidos por procesos que compiten por recursos,
estos recursos pueden afectar o no al cómputo.
• En la programación de procesos, el orden con la que se realicen estos, a la hora
de adquirir un recurso es determinante para determinar si se realiza un
interbloqueo.
• No siempre tratar los interbloqueos es la mejor opción puesto que estos se dan
con mucha frecuencia a comparación de errores del compilador y errores en el
sistema operativo.
• La detección y recuperación de interbloqueos proporcionan un mayor grado de
concurrencia potencial que la prevención o evitación de interbloqueos. Además,
la sobrecarga del tiempo de ejecución de detección de interbloqueo puede ser
un parámetro ajustable en el sistema. Una vez que se encuentra un punto muerto
y el proceso de reinicio o reversión desperdicia el uso de los recursos del
sistema, el precio que se paga es el recargo por recuperación. La recuperación
de interbloqueo puede resultar atractiva en sistemas con baja probabilidad de
interbloqueo. En un sistema de alta carga, es bien sabido que la concesión de
solicitudes de recursos sin restricción resultará en una inversión de recursos
excesiva, lo que resultará en frecuentes bloqueos. El impacto negativo del
interbloqueo aumenta a medida que aumenta la carga del sistema y la frecuencia
del interbloqueo, aumentando así el desaprovechamiento de los recursos del
sistema justo cuando son más necesarios.
• La prevención de interbloqueos es algo importante que podemos analizar,
sabemos que evitar los interbloqueos es algo imposible ya que se necesita
información de peticiones futuras, la cuales no se conocen, pero los sistemas
pueden tratar de evitarlos según las 4 condiciones de Coffman y colaboradores
las cuales son: exclusión mutua, contención y espera, no apropiativa y espera
circular.
• Los mecanismos de concurrencia de UNIX permiten la comunicación y
sincronización entre procesos en las que podemos encontrar a las tuberías, los
mensajes y la memoria compartida los cuales comunican datos entre procesos
y también tenemos a los semáforos y las señales las cuales disparan acciones
en otros procesos.
• Linux es un Sistema Operativo complejo, que requiere del uso correcto de
mecanismos de concurrencia para el óptimo desempeño en su ejecución. Para
lograr esto, cuenta con mecanismos que están a su disposición, por estar basado
BIBLIOGRAFÍA