Está en la página 1de 10

BENEMÉRITA UNIVERSIDAD

AUTONOMA DE PUEBLA
INGENIERIA EN CIENCIAS DE LA COMPUTACIÓN

ALUMNA: BERENICE JUAREZ GONZALEZ


MATRICULA: 202042438
MATERIA: SISTEMAS OPERATIVOS I
FACULTAD DE CIENCIAS DE LA COMPUTACIÓN
INVESTIGACION “ALGORITMO DEL BANQUERO”
INTRODUCCION
El algoritmo del banquero es una técnica utilizada en sistemas operativos
para prevenir interbloqueos y garantizar la seguridad del sistema en
entornos donde varios procesos compiten por un conjunto limitado de
recursos compartidos.

En un sistema con múltiples procesos, cada proceso puede requerir


diferentes recursos para completarse. Sin embargo, si estos recursos no
están disponibles o no se asignan de manera adecuada, puede ocurrir un
interbloqueo, lo que significa que los procesos se quedan esperando
indefinidamente a que se liberen los recursos necesarios.

El algoritmo del banquero se basa en la idea de que, para que un proceso


se ejecute sin causar un interbloqueo, es necesario que los recursos que
necesita estén disponibles. El algoritmo utiliza una técnica de asignación
de recursos segura y conservadora, donde solo se asignan los recursos
que están disponibles y necesarios para que un proceso pueda
completarse. Además, el algoritmo puede detectar situaciones de
interbloqueo y tomar medidas para resolver el problema.
El algoritmo del banquero, en sistemas operativos es una forma de evitar
el interbloqueo, propuesta por primera vez por Edsger Dijkstra. Es un
acercamiento teórico para evitar los interbloqueos en la planificación de
recursos. Requiere conocer con anticipación los recursos que serán
utilizados por todos los procesos. Esto ultimo generalmente no puede ser
satisfecho en la práctica.
Este algoritmo recibe el nombre de “banquero” debido a que su
funcionamiento es similar a la gestión que hacen los bancos con las
cuentas de crédito. Un banquero (S.O) dispone de unos fondos (recursos)
y tiene unos clientes (procesos). Cada cliente dispone de un crédito que
corresponde al máximo que el banquero le prestara. El cliente ira
solicitando fondos suficientes para prestar el máximo a cada cliente, no
habría inconvenientes. Sin embargo, esto no es así, los recursos del
banquero son limitados, por lo que si todos reclaman todo su crédito no
podrá satisfacerlos simultáneamente. Por lo tanto, la solución es que el
banquero gestione sus fondos de manera que todos los clientes puedan
llegar al máximo en algún momento, aunque no lo hagan todos al mismo
tiempo.
PLANTEAMIENTO:
El algoritmo del banquero es un algoritmo utilizado para evitar
situaciones de interbloqueo en un sistema con múltiples procesos que
compiten por un conjunto limitado de recursos. A continuación, se el
planteamiento del algoritmo del banquero:
1. Inicialización:
Se define el numero de procesos (n) y el número de recursos (m).
Se define la matriz Allocation [n, m], que indica la cantidad de
recursos asignados a cada proceso.
Se define la matriz Max[n,m], que indica la cantidad máxima de
recursos que un proceso puede solicitar.
Se define la matriz Need[n,m], que indica la cantidad de recursos que
un proceso todavía necesita para completar su tarea.
2. Se calcula la matriz Available[m], que indica la cantidad de recursos
disponibles para ser asignados.
3. Se inicia el algoritmo de detección de interbloqueo:
Se busca un proceso que pueda completar su tarea actual utilizando
los recursos disponibles. Si no se encuentra en ninguno, se
considera que el sistema esta en un estado de interbloqueo.
Si se encuentra un proceso, que asume que el proceso solicitara sus
recursos restantes y los usara de manera inmediata y luego los
liberara. Se verifica si esta asignación de recursos a este proceso
causara o no un interbloqueo.
Si la asignación de recursos no causa interbloqueo, se asignan los
recursos al proceso y se actualizan las matrices Allocation, Need,
Available.

PSEUDOCODIGO EN C:
#include <stdio.h>

#define n 5 // número de procesos


#define m 3 // número de recursos

int Available[m], Max[n][m], Allocation[n][m], Need[n][m];

void banquero() {
int Finish[n], SafeSequence[n];
int count = 0;

// Inicialización de Finish[]
for (int i = 0; i < n; i++)
Finish[i] = 0;

// Inicialización de SafeSequence[]
for (int i = 0; i < n; i++)
SafeSequence[i] = -1;

// Inicialización de Available[]
for (int j = 0; j < m; j++) {
int sum = 0;
for (int i = 0; i < n; i++)
sum += Allocation[i][j];
Available[j] = sum;
}

// Inicialización de Need[]
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
Need[i][j] = Max[i][j] - Allocation[i][j];

// Algoritmo de detección de interbloqueo


while (count < n) {
int found = 0;
for (int i = 0; i < n; i++) {
if (Finish[i] == 0) {
int j;
for (j = 0; j < m; j++) {
if (Need[i][j] > Available[j])
break;
}
if (j == m) {
for (int k = 0; k < m; k++)
Available[k] += Allocation[i][k];
SafeSequence[count++] = i;
Finish[i] = 1;
found = 1;
}
}
}
if (found == 0) {
printf("El sistema está en un estado de interbloqueo\n");
break;
}
}

// Imprimir secuencia segura


printf("Secuencia segura: ");
for (int i = 0; i < n; i++)
printf("%d ", SafeSequence[i]);
printf("\n");
}

int main() {
// Definir Max y Allocation
int Max[n][m] = {
{7, 5, 3},
{3, 2, 2},
{9, 0, 2},
{2, 2, 2},
{4, 3, 3}
};
int Allocation[n][m] = {
{0, 1, 0},
{2, 0, 0},
{3, 0, 2},
{2, 1, 1},
{0, 0, 2}
};

banquero();

return 0;
}

ALGORITMO:
El algoritmo del banquero se utiliza para prevenir interbloqueos en un
sistema con múltiples procesos que compiten por un conjunto
limitado de recursos. A continuación, se presenta el pseudocódigo
del algoritmo:

Se define la cantidad de procesos y recursos disponibles en el


sistema.

Se inicializa una matriz Max de tamaño n x m, donde n es la cantidad


de procesos y m es la cantidad de recursos. Max(i,j) representa la
cantidad máxima de recursos del tipo j que necesita el proceso i para
completarse.
Se inicializa una matriz Allocation de tamaño n x m, donde
Allocation(i,j) representa la cantidad de recursos del tipo j que se le
ha asignado al proceso i en el momento actual.

Se calcula la matriz Need de tamaño n x m, donde Need(i,j) =


Max(i,j) - Allocation(i,j). Need(i,j) representa la cantidad de recursos
del tipo j que aún necesita el proceso i para completarse.

Se inicializa un vector Available de tamaño m, donde Available(j)


representa la cantidad de recursos del tipo j que están disponibles en
el momento actual.

Se inicializa un vector Finish de tamaño n, donde Finish(i) es


verdadero si el proceso i ha completado su tarea y falso en caso
contrario.

Se inicia un ciclo que se ejecuta mientras haya procesos que no


hayan completado su tarea:

a. Se busca un proceso i que cumpla con las siguientes condiciones:

Finish(i) es falso.
Need(i,j) ≤ Available(j) para todo j. Es decir, los recursos necesarios
por el proceso i están disponibles.
b. Si se encuentra un proceso i que cumple con estas condiciones,
se ejecuta el proceso i y se liberan los recursos que se le habían
asignado. Es decir, se actualiza el vector Available y se marca el
proceso i como completo en el vector Finish.
c. Si no se encuentra ningún proceso que cumpla con estas
condiciones, el sistema está en un estado de interbloqueo y se debe
tomar una acción para resolver el problema.
El algoritmo del banquero se utiliza para prevenir interbloqueos y
garantizar la seguridad del sistema. Si el algoritmo encuentra una
secuencia segura de procesos que pueden completarse sin que
ocurra un interbloqueo, el sistema está seguro y se puede ejecutar.
Si no se encuentra una secuencia segura, el sistema está en un
estado de interbloqueo y se deben tomar medidas para resolver el
problema.

EJEMPLO:
Supongamos que tenemos un sistema con 5 procesos y 3 tipos de
recursos. La tabla a continuación muestra la cantidad máxima de
recursos que cada proceso puede solicitar (Matriz Max) y la cantidad
actual de recursos asignados a cada proceso (Matriz Asignación):
PROCESO MAXIMO DE RECURSOS ASIGNACION
REQUERIDOS ACTUAL
P0 753 010
P1 322 200
P2 902 302
P3 222 211
P4 433 002

Además, tenemos la matriz de recursos disponibles (Available), que


muestra la cantidad de cada recurso que esta disponible en el
sistema en este momento:
RECURSO DISPONIBLE
R0 3
R1 3
R2 2

El objetivo del algoritmo del banquero es determinar si es posible


asignar recursos a los procesos de tal manera que no se produzca
un interbloqueo. Es decir, si los procesos pueden completar su
ejecución sin quedarse sin recursos. El algoritmo del banquero sigue
los siguientes pasos:
1. Inicialización de matrices: se inicializan las matrices necesarias
para el algoritmo: la matriz de necesidades (Need), la matriz de
finalización (Finish), la matriz de secuencia segura
(SafeSequence) y la matriz de recursos disponibles (Available).
2. Algoritmo de detección de interbloqueo: En este paso, se
busca una secuencia segura de ejecución de los procesos.
Para ello, se selecciona un proceso que no haya finalizado y
que pueda ejecutarse sin provocar un interbloqueo, es decir,
que sus necesidades de recursos sean menores o iguales a los
recursos disponibles. Si se encuentra un proceso que cumpla
con estas condiciones, se ejecuta y se liberan los recursos
asignados al proceso. Si no se encuentra un proceso que
cumpla con estas condiciones, el algoritmo concluye que el
sistema esta en un estado de interbloqueo.
3. Impresión de la secuencia segura: Si se encuentra una
secuencia (Need) se calcula como la diferencia entre la matriz
de máximo requerido (MAX) y la matriz de asignacion actual
(Allocation):
PROCESO MAXIMO DE ASIGNACION NECESIDADES
RECURSOS ACTUAL
REQUERIDOS
P1 753 010 743
P2 322 200 122
P3 902 302 600
P4 222 211 011
P5 433 002 431
CONCLUSION
El algoritmo del banquero es una estrategia de asignación de recursos
segura y conservadora, ya que solo asigna los recursos que están
disponibles y necesarios para que un proceso pueda completarse.
Además, el algoritmo puede detectar situaciones de interbloqueo y tomar
medidas para resolver el problema.

Sin embargo, el algoritmo del banquero también tiene algunas limitaciones,


ya que puede haber situaciones en las que la asignación de recursos no
sea óptima y algunos procesos deban esperar más tiempo de lo necesario
para obtener los recursos que necesitan.

En general, el algoritmo del banquero es una herramienta útil para


garantizar la seguridad de los sistemas informáticos y prevenir
interbloqueos, aunque también es importante tener en cuenta sus
limitaciones y considerar otras estrategias de asignación de recursos
según las necesidades del sistema en cuestión.

REFERENCIAS BIBLIOGRAFICAS:
Simulación - Algoritmo del Banquero (victorvr.com)

ALGORITMO DEL BANQUERO - Apuntes - Fiorelly Zarate (clubensayos.com)

Algoritmo del banquero - Wikipedia, la enciclopedia libre

(anonymous) (uns.edu.ar)

También podría gustarte