Sistemas Operativos | Conjunto 17

La siguiente pregunta se hizo en el examen GATE 2012 CS.

Fetch_And_Add(X,i) es una instrucción atómica de lectura, modificación y escritura que lee el valor de la ubicación de memoria X, lo incrementa en el valor i y devuelve el valor anterior de X. Se usa en el pseudocódigo que se muestra a continuación para implementar un Bloqueo de espera ocupada. L es una variable compartida entera sin signo inicializada en 0. El valor de 0 corresponde a que el bloqueo está disponible, mientras que cualquier valor distinto de cero corresponde a que el bloqueo no está disponible.

  AcquireLock(L){
         while (Fetch_And_Add(L,1))
               L = 1;
   }
  ReleaseLock(L){
         L = 0;
   } 

Esta implementación
(A) falla porque L puede desbordarse
(B) falla porque L puede tomar un valor distinto de cero cuando el bloqueo está realmente disponible
(C) funciona correctamente pero puede privar a algunos procesos
(D) funciona correctamente sin privación

Respuesta (B)
Mire más de cerca el siguiente ciclo while.

     while (Fetch_And_Add(L,1))
               L = 1;  // A waiting process can be here just after 
                       // the lock is released, and can make L = 1.

Considere una situación en la que un proceso acaba de liberar el bloqueo e hizo que L = 0. Que haya un proceso más esperando el bloqueo, significa ejecutar la función AcquireLock(). Justo después de que L se convirtió en 0, deje que los procesos en espera ejecuten la línea L = 1. Ahora, el bloqueo está disponible y L = 1. Dado que L es 1, el proceso en espera (y cualquier otro proceso futuro) no puede salir del bucle while.

El problema anterior se puede resolver cambiando AcuireLock() a siguiente.

  AcquireLock(L){
         while (Fetch_And_Add(L,1))
         { // Do Nothing }
   }

Consulte GATE Corner para ver todos los documentos/soluciones/explicaciones del año anterior, programa de estudios, fechas importantes, notas, etc.

Escriba comentarios si encuentra que alguna de las respuestas/explicaciones es incorrecta, o si desea compartir más información sobre los temas discutidos anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *