Algoritmo del Banquero de Dijkstra

 

Asigna peticiones de recursos siempre que las mismas den como resultado estados seguros. Solicitudes que den como resultado estados inseguros ser�n negadas hasta que puedan ser satisfechas. Este algoritmos evita situaciones de Deadlock asignando los recursos en forma correcta.

 

Las debilidades del algoritmo son: que requiere que la cantidad de recursos del sistema sea constante, requiere una cantidad de procesos constante y requiere que los procesos garanticen que los recursos van a ser devueltos en un intervalo finito de tiempo. Detecci�n y Recuperaci�n de Deadlocks

 

Algoritmos de Detecci�n de Deadlock

 

1.     Cuando hay una �nica ocurrencia de cada recurso. (variante del grafo de "wait for graph"). Consiste en reducir el grafo, retirando las aristas que van de recursos a procesos y de procesos a recursos, colocando nuevas aristas que reflejan la situaci�n de espera entre procesos. Si el grafo reducido tiene ciclos el sistema esta en Deadlock. Orden de operaciones = n^2 , n = cantidad de aristas.

 

2.     Cuando hay m�ltiples ocurrencias de cada recurso.

 

 

Procedure detecta_deadlock

var

Disponible:array[1..n] of integer //# de recursos

Usados:array[1..n] of integer

Solicitados:array[1..n] of integer

Finalizado:array[1..n] of boolean

Begin Work:=Disponibles;

For i:=1..n do if(usados[i]?0) then finish[i]:=false

Else finish[i]:=true;

While(encontrar_indice_i = true) do { Work:=work + usados[i];

Finish[i]:=true; } If ((finish[i] = false) para algun i),

1=i=n then � El sistema esta en Deadlock.

End Function encontrar_indice_i : Boolean

Begin If (existe i tal que (Finish[i]=false && solicitados[i] = work)

Then -> true Else -> false End

 

 

Recuperaci�n ante Deadlocks

 

1.Cancelaci�n de procesos

a.      Cancelaci�n de todos los procesos involucrados. Esto resuelve la situaci�n de Deadlock pero tiene un costo muy alto de reprocesamiento.

b.     Cancelacion de un proceso por vez hasta resolver la situaci�n de Deadlock. La ventaja de esto es que el costo de reprocesamiento de la informaci�n es menor pero cada vez que se cancela un proceso debe ejecutarse el algoritmo de detecci�n de deadlock. Los criterios para elegir el candidato a ser cancelado son: por prioridad, por tiempo de uso de CPU, por cantidad de recursos utilizados y por cuantos recursos adicionales habr� de utilizar.

 

2. Obtenci�n de recursos (resourse Preemption).

El sistema operativo selecciona un proceso y le quita los recursos otorgados. Los criterios para seleccionar el candidato son los mismos que para la cancelaci�n. El proceso seleccionado se le quitan los recursos y se le lleva a un estado consistente (Rollback).

 

 

Algoritmo de Peterson (o Algoritmo de Dekker)

 

Este algoritmo combina las dos ideas anteriores. Se comparten una variable flag y una variable turno. Este algoritmo soluciona el problema de la secci�n cr�tica y evite que un proceso quede en espera mientras que otro proceso este en su secci�n no cr�tica. Para n procesos la idea es un poco mas compleja:

 

Flag::array[0..n-1] Turn::0..n-1

El while se tornara en una evaluaci�n de n condiciones.

 

Sem�foros Son una herramienta de sincronizaci�n. Es una variable protegida que solo puede ser modificada por la rutina de inicializaci�n y por otras dos operaciones at�micas: P( ) <- wait V( ) <- signal Las operaciones a las cuales se puede acceder son: Inicializaci�n: Crea un nuevo sem�foro asign�ndole un valor inicial: P(s): while (s=0) do no_op AT�MICA s:=s-1 V(s): s:=s+1 AT�MICA

 

 

Existen b�sicamente dos tipos de sem�foros:

1.     Sem�foros contadores: Toman valores positivos mayores o iguales a 0. Se utilizan para sincronizaci�n de procesos.

2.     Sem�foros binarios: Toman los valores 0 � 1 y se utilizan para exclusi�n mutua.

 

A continuaci�n se presenta una soluci�n mediante sem�foros del problema productor/consumidor.

#define N 100 semaphore mutex = 1;

semaphore empty = N;

semaphore full = 0;

void productor(void) {int item; while(1){ produce_item(item);

down(empty);

down(mutex);

enter_item(item);

up(mutex); up(full);} }

void consumidor(void) { int item;

while(1){ down(full);

down(mutex);

remove_item(&item);

up(mutex);

up(empty);

consume_item(item);} }

 

En este caso tenemos la utilizaci�n de 3 sem�foros, uno destinado al control de la exclusi�n mutua y los otros dos destinados a la sincronizaci�n de los procesos para el control de buffer lleno y vac�o. Podr�amos utilizar sem�foros para un algoritmo de espera ocupada con n procesos, pero los n procesos que est�n ejecutando el while de la funci�n P(s) van a la cola de ready en un instante de tiempo reduciendo la performance general del equipo. Para evitar la espera ocupada se crea un sem�foro que sea un registro de un nuevo tipo:

 

Sem�foro = Record Valor:Integer

L:Lista_de_Procesos End P(s)

{ s.Valor:= s.valor - 1

if s.Valor < 0 then agregar este proceso a s.L bloquear;

end}

V(s)

{ s.Valor:=s.Valor + 1 if s.Valor � 0 then quitar un proceso y a s.L despertar(y) }

 

 

 

 

 

CONCLUSIONES:

 

Este trabajo nos describe algoritmos como el de Dijkstra el cual evita situaciones de Deadlock asignando los recursos en forma correcta. Tambien nos ense�a lo que son los sem�foros (una herramienta de sincronizaci�n) y los tipos que hay de ellos.

 

 

 

 

REFERENCIA:

Copias de un documento dado en clase.

 

Menu

Hosted by www.Geocities.ws

1