Una variable compartida x, inicializada a cero, es operada por cuatro procesos concurrentes W, X, Y, Z de la siguiente manera. Cada uno de los procesos W y X lee x de la memoria, lo incrementa en uno, lo almacena en la memoria y luego termina. Cada uno de los procesos Y y Z lee x de la memoria, lo reduce en dos, lo almacena en la memoria y luego termina. Cada proceso antes de leer x invoca la operación P (es decir, esperar) en un semáforo de conteo S e invoca la operación V (es decir, señal) en el semáforo S después de almacenar x en la memoria. El semáforo S se inicializa a dos. ¿Cuál es el valor máximo posible de x después de que todos los procesos completan su ejecución?
(A) -2
(B) -1
(C) 1
(D) 2
Respuesta: (D)
Explicación:
Antecedentes Explicación:
Una sección crítica en la que el proceso puede ser cambiar variables comunes, actualizar tablas, escribir un archivo y realizar otra función. El problema importante es que si un proceso se está ejecutando en su sección crítica, no se permitirá que ningún otro proceso se ejecute en su sección crítica. Cada proceso debe solicitar permiso para ingresar a su sección crítica. Un semáforo es una herramienta para la sincronización y se usa para eliminar el problema de la sección crítica, que es que dos procesos no pueden ejecutarse simultáneamente, por lo que para eliminar estas dos operaciones de señal se usan las llamadas espera y señal, que se usa para eliminar la exclusión mutua de la sección crítica. como una de las primitivas de sincronización más importantes sin signo, porque puede construir muchas otras. Decrementar el semáforo se llama adquirirlo o bloquearlo,
Solución :
Dado que el valor inicial del semáforo es 2, dos procesos pueden ingresar a la sección crítica a la vez; esto es malo y podemos ver por qué.
Digamos que X e Y son los procesos. X incrementa x en 1 y Z disminuye x en 2. Ahora, Z almacena de nuevo y después de esto X almacena de nuevo. Entonces, el valor final de x es 1 y no -1 y dos operaciones de señal hacen que el valor del semáforo sea 2 nuevamente. Entonces, ahora W y Z también pueden ejecutarse así y el valor de x puede ser 2, que es el máximo posible en cualquier orden de ejecución de los procesos. (Si el semáforo se inicializa en 1, procesado se ejecutará correctamente y obtenemos el
valor final de x como -2).
La opción (D) es la respuesta correcta.
Otra solución:
los procesos pueden ejecutarse de muchas maneras, a continuación se muestra uno de los casos en los que x alcanza el valor máximo. El semáforo S se inicializa en 2.
El proceso W ejecuta S=1, x=1 pero no actualiza la variable x.
Luego el proceso Y ejecuta S=0, decrementa x, ahora x= -2 y señala el semáforo S=1
Ahora el proceso Z ejecuta s=0, x=-4, señala el semáforo S=1
Ahora el proceso W actualiza x=1, S =2 Entonces el proceso X ejecuta X=2
Así que la opción correcta es D
Otra solución:
S es un semáforo de conteo inicializado en 2, es decir, dos procesos pueden entrar en una sección crítica protegida por S. W, X lee la variable, la incrementa en 1 y la vuelve a escribir. Y, Z puede leer la variable, decrementarla en 2 y volver a escribirla.
Cada vez que se ejecuta Y o Z, el conteo se reduce en 2. Entonces, para tener la suma máxima, debemos copiar la variable en uno de los procesos que aumenta el conteo, y al mismo tiempo el proceso decreciente debe ejecutarse en paralelo, de modo que lo que sea que escriben de nuevo en la memoria se pueden anular incrementando el proceso. Entonces, en efecto, el decremento nunca sucedería.
Enlaces relacionados:
https://www.geeksforgeeks.org/introduction-of-process-synchronization/
http://geeksquiz.com/operating-systems-process-management-question-11/ para obtener una explicación
Esta solución es aportada por Nitika Bansal
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