Exclusion mutua
Dr. Víctor J. Sosa
vjsosa@cinvestav.mx
Problema de Exclusión Mutua
• Cuando accedemos a datos compartidos es importante sincronizar el acceso para que los datos no se pierdan. •Las operaciones de actualización de información actuales no son atómicas: x = x +1.
LD R, x ; carga x al registro R INC R; incrementa el registro R ST R, x; almacena el registro R en x
Ejemplode una Interfaz Java mínima para exclusión mutua
Public interface Lock { public void accederSC(int pid); public void liberarSC(int pid); }
Algoritmo de Peterson
Class Intento1 implements Lock {boolean puertaAbierta = true;
Ejemplo de una propuesta para manejar dos procesos intentando utilizar una sección crítica (SC)
public void accederSC(int i) { while (!puertaAbierta) ; // Esta ocupadopuertaAbierta = false; } public void liberarSC(int i) { puertaAbierta = true; } }
¿cómo se quién cambio primero la variable puertaAbierta? Problema: No garantiza la exclusión mutua!
Algoritmo dePeterson
Class Intento2 implements Lock { boolean quieroSC[] = {false, false};
Ejemplo de una propuesta para manejar dos procesos intentando utilizar una sección crítica (SC)
public voidaccederSC(int i) { quieroSC[i] = true; // manifiesto mi intencion de entrar while (quieroSC[1- i]) ; // Esta ocupado } public void liberarSC(int i) { quieroSC[i] = false; } }
¿y si ambos manifiestan suintención de entrar? Problema: Deadlock!!
Algoritmo de Peterson
Class Intento3 implements Lock { int turno = 0; public void accederSC(int i) { while (turno == 1 - i) ; // Esta ocupado } public voidliberarSC(int i) { turno = 1 - i; } }
Igualdad de oportunidades, a cada quien se le sede un turno ala vez. Exclusion Mutua Deadlock Hambruna
Ejemplo de una propuesta para manejar dos procesosintentando utilizar una sección crítica (SC)
☺ ☺
Algoritmo de Peterson*
Class AlgoritmoPeterson implements Lock { boolean quieroSC[] = {false, false}; int turno = 1; public void accederSC(int i) {...
Regístrate para leer el documento completo.