Está en la página 1de 4

TRABAJO CONSULTA

ESTUDIANTES:

LUISA MEBEL VARGAS

JULIETH PAOLA PACHON

KATHERYN BRIGGYD ROJAS RODRIGUEZ

CARRERA:

INGENIERÍA DE SISTEMAS

ASIGNATURA:

SISTEMAS OPERATIVOS

DOCENTE:

DANIEL AVELLANEDA

BOGOTA D.C
2019
 QUÉ ES UN DEADLOCK

Es el bloqueo permanente de un conjunto de procesos que compiten por los recursos del
sistema o bien se comunican unos con otros. A diferencia de otros problemas de la gestión
concurrente de procesos, para el caso general no existe una solución eficiente. En esta
sección, se examinará la naturaleza del problema del interbloqueo

Todos los interbloqueos suponen demandas contradictorias de recursos por parte de dos o
más procesos. Los dos ejes del diagrama representan el avance de los dos procesos en
términos de instrucciones ejecutadas. El avance conjunto de los dos procesos se representa
entonces con una secuencia discreta de puntos en el espacio. Las líneas horizontales o
verticales representan el intervalo de tiempo en el que sólo uno de los procesos está
ejecutándose (intercalado); una línea diagonal significa ejecución simultánea
(solapamiento). Supóngase que existe un punto en la ejecución de cada proceso en el que se
requiere el uso exclusivo de ambos recursos, Rl y R2, para continuar. En el ejemplo, llega
un punto en el que el proceso Pl ha adquirido el recurso Rl y el proceso P2 ha adquirido el
recurso R2 y cada proceso necesita el otro recurso. Este es el punto de interbloqueo

El interbloqueo se produce si cada proceso retiene un recurso y solicita el otro. Puede


parecer que es un error de programación en lugar de un error del diseño del sistema
operativo. Sin embargo, se ha visto que el diseño de un programa concurrente entraña gran
dificultad. Se producen interbloqueos como éste y la causa está frecuentemente en la
compleja lógica del programa, lo que hace más difícil su detección. Una posible estrategia
para resolver estos interbloqueos es imponer restricciones en el diseño del sistema sobre el
orden en el que se solicitan los recursos

Prevención

Dos procesos que compiten por un recurso, siguiendo una política de orden de llegada. (B) El punto
muerto ocurre cuando ambos procesos bloquean el recurso simultáneamente. (C) El punto muerto se
puede resolver rompiendo la simetría de las cerraduras. (D) El punto muerto
puede evitarse rompiendo la simetría del mecanismo de bloqueo.
La prevención de punto muerto funciona al evitar que ocurra una de las cuatro condiciones de
Coffman.
Eliminar la condición de exclusión mutua significa que ningún proceso tendrá acceso exclusivo a un
recurso. Esto resulta imposible para los recursos que no se pueden poner en cola . Pero incluso con
recursos en spool, aún podría producirse un punto muerto. Los algoritmos que evitan la exclusión
mutua se denominan algoritmos de sincronización sin bloqueo .
Las condiciones de retención y espera o retención de recursos pueden eliminarse exigiendo que los
procesos soliciten todos los recursos que necesitarán antes de comenzar (o antes de embarcarse en
un conjunto particular de operaciones). Este conocimiento avanzado es con frecuencia difícil de
satisfacer y, en cualquier caso, es un uso ineficiente de los recursos. Otra forma es requerir que los
procesos soliciten recursos solo cuando no tiene ninguno. Por lo tanto, primero deben liberar todos
sus recursos actuales antes de solicitar todos los recursos que necesitarán desde cero. Esto también
es a menudo poco práctico. Esto es así porque los recursos pueden asignarse y no utilizarse durante
largos períodos. Además, un proceso que requiere un recurso popular puede tener que esperar
indefinidamente, ya que dicho recurso siempre se puede asignar a algún proceso, lo que resulta
eninanición de recursos . (Estos algoritmos, como los tokens de serialización , se conocen
como algoritmos de todo o nada ).
El no preemption afección también puede ser difícil o imposible de evitar, en un proceso tiene que
ser capaz de tener un recurso para una cierta cantidad de tiempo, o el resultado de procesamiento
puede ser inconsistente o thrashing puede ocurrir. Sin embargo, la incapacidad para imponer la
preferencia puede interferir con un algoritmo de prioridad . La eliminación anticipada de un recurso
"bloqueado" generalmente implica una reversión , y debe evitarse, ya que es muy costoso en gastos
generales. Los algoritmos que permiten la prevención incluyen algoritmos sin bloqueo y sin
espera y control de concurrencia optimista. Si un proceso que contiene algunos recursos y solicita
algún otro recurso que no se le puede asignar inmediatamente, la condición puede eliminarse
liberando todos los recursos retenidos actualmente de ese proceso.
La condición final es la condición de espera circular . Los enfoques que evitan las esperas circulares
incluyen la desactivación de interrupciones durante las secciones críticas y el uso de una jerarquía
para determinar un ordenamiento parcial de los recursos. Si no existe una jerarquía obvia, incluso la
dirección de memoria de los recursos se ha utilizado para determinar el orden y los recursos se
solicitan en el orden creciente de la enumeración. La solución de Dijkstra también se puede utilizar.

Problemas de concurrencias

mutex
Los algoritmos de exclusión mutua (comúnmente abreviada como mutex por mutual
exclusion) se usan en programación concurrente para evitar que entre más de un proceso a
la vez en la sección crítica. La sección crítica es el fragmento de código donde puede
modificarse un recurso compartido.
La mayor parte de estos recursos son las señales, contadores, colas y otros datos que se
emplean en la comunicación entre el código que se ejecuta cuando se da servicio a
una interrupción y el código que se ejecuta el resto del tiempo. Se trata de un problema de
vital importancia porque, si no se toman las precauciones debidas, una interrupción puede
ocurrir entre dos instrucciones cualesquiera del código normal y esto puede provocar graves
fallos.
La técnica que se emplea por lo común para conseguir la exclusión mutua es inhabilitar
las interrupciones durante el conjunto de instrucciones más pequeño que impedirá la
corrupción de la estructura compartida (la sección crítica). Esto impide que el código de la
interrupción se ejecute en mitad de la sección crítica.
En un sistema multiprocesador de memoria compartida, se usa la operación indivisible test-
and-set sobre una bandera, para esperar hasta que el otro procesador la despeje. La
operación test-and-set realiza ambas operaciones sin liberar el bus de memoria a otro
procesador. Así, cuando el código deja la sección crítica, se despeja la bandera. Esto se
conoce como spin lock o espera activa.
Algunos sistemas tienen instrucciones multioperación indivisibles similares a las
anteriormente descritas para manipular las listas enlazadas que se utilizan para las colas de
eventos y otras estructuras de datos que los sistemas operativos usan comúnmente.
La mayoría de los métodos de exclusión mutua clásicos intentan reducir la latencia y espera
activa mediante las colas y cambios de contexto. Algunos investigadores afirman que las
pruebas indican que estos algoritmos especiales pierden más tiempo del que ahorran.
A pesar de todo lo dicho, muchas técnicas de exclusión mutua tienen efectos colaterales.
Por ejemplo, los semáforos permiten interbloqueos (deadlocks) en los que un proceso
obtiene un semáforo, otro proceso obtiene el semáforo y ambos se quedan a la espera de
que el otro proceso libere el semáforo. Otros efectos comunes incluyen la Inanición, en el
cual un proceso esencial no se ejecuta durante el tiempo deseado, y la inversión de
prioridades, en el que una tarea de prioridad elevada espera por otra tarea de menor
prioridad, así como la latencia alta en la que la respuesta a las interrupciones no es
inmediata.
La mayor parte de la investigación actual en este campo, pretende eliminar los efectos
anteriormente descritos. Si bien no hay un esquema perfecto conocido, hay un interesante
esquema no clásico de envío de mensajes entre fragmentos de código que, aunque permite
inversiones de prioridad y produce una mayor latencia, impide los interbloqueos.
Algunos ejemplos de algoritmos clásicos de exclusión mutua son:
El algoritmo de Dekker.
El algoritmo de Peterson.

También podría gustarte