El siguiente es un código con dos subprocesos, productor y consumidor, que pueden ejecutarse en paralelo. Además, S y Q son semáforos binarios equipados con las operaciones estándar P y V.
semaphore S = 1, Q = 0;
integer x;
productor: consumidor:
while (true) do while (true) do
P(S); P(Q);
x = producir(); consumir (x);
V(Q); V(S);
hecho hecho
¿Cuál de las siguientes es VERDADERA sobre el programa anterior?
(A) El proceso puede bloquearse
(B) Uno de los subprocesos puede morir de hambre
(C) Algunos de los elementos producidos por el productor pueden perderse
(D) Los valores generados y almacenados en ‘x’ por el productor siempre se consumirán antes del el productor puede generar un nuevo valor
Respuesta: (D)
Explicación:Un semáforo es una variable de etiqueta de hardware o software cuyo valor indica el estado de un recurso común. Su propósito es bloquear el recurso que se está utilizando. Un proceso que necesita el recurso verificará el semáforo para determinar el estado del recurso seguido de la decisión de continuar. En los sistemas operativos multitarea, las actividades se sincronizan mediante técnicas de semáforo.
espera y señal se definen en el semáforo. La entrada a la sección crítica es controlada por la operación de espera y la salida de una región crítica es atendida por la operación de señal. Las operaciones de espera, señal también se denominan operaciones P y V. La manipulación del semáforo (S) se realiza de la siguiente manera:
1. El comando de espera P(S) reduce el valor del semáforo en 1. Si el valor resultante se vuelve negativo, el comando P se retrasa hasta que se cumple la condición.
2. La operación V(S) es decir, señales incrementa el valor del semáforo en 1.
Solución:
El consumidor puede consumir solo una vez que el productor haya producido el artículo, y el productor puede producir (excepto la primera vez) solo una vez que el consumidor haya consumido el artículo.
Vamos a explicar el funcionamiento de este código.
Se menciona que Producer y Consumer se ejecutan en paralelo.
Productor:
st1: el valor de S es 1, P (S) en S lo convierte en 0 y
st2, y luego se produce x artículo.
st3: el valor de Q es 0. V(Q) en Q lo convierte en 1.
siendo este un ciclo while infinito, debería iterarse infinitamente. En la siguiente iteración del bucle while, S ya es 0, más P(S) en 0 envía P a la lista bloqueada de S. Por lo tanto, el productor está bloqueado.
Consumidor:
P(Q) en Q hace que Q =0 y luego consuma el artículo.
V(S) en S,
ahora en lugar de cambiar el valor de S a 1, el consumidor activa el proceso bloqueado en la cola de Q. Por lo tanto, el proceso P está despierto. P se reanuda desde st2, ya que se bloqueó en la declaración 1. Entonces, P ahora produce el siguiente elemento. Entonces, el consumidor consume un artículo antes de que el productor produzca el siguiente artículo.
La opción correcta es (D).
Elección de esta pregunta:
A) No puede ocurrir un punto muerto si tanto el productor como el consumidor están operando en diferentes semáforos (sin espera ni espera).
B) No ocurre inanición porque hay una alteración entre P y el Consumidor, lo que también hace que tengan una espera limitada.
(C) Algunos de los artículos producidos por el productor pueden perderse pero no.
Referencia:
https://www.geeksforgeeks.org/mutex-vs-semaphore/
Esta solución es aportada por Nitika Bansal
Cuestionario de esta pregunta
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