GATE - 2013 | OS | A certain computation generates two arrays a and b such that a[i]=f(i)

GATE - 2013 | OS | A certain computation generates two arrays a and b such that a[i]=f(i)
Posted on 12-02-2022

GATE - 2013 [Operating System]

Question:

A certain computation generates two arrays a and b such that a[i]=f(i) for 0 ≤ i < n and b[i]=g(a[i]) for 0 ≤ i < n. Suppose this computation is decomposed into two concurrent processes X and Y such that X computes the array a and Y computes the array b. The processes employ two binary semaphores R and S, both initialized to zero. The array a is shared by the two processes. The structures of the processes are shown below.

Process X:                         Process Y:

private i;                         private i;

for (i=0; i < n; i++) {            for (i=0; i < n; i++) {

   a[i] = f(i);                       EntryY(R, S);

   ExitX(R, S);                       b[i]=g(a[i]);

}                                 }

Which one of the following represents the CORRECT implementations of ExitX and EntryY?

A

ExitX(R,S) {
P(R);
V(S);
}
EntryY(R,S) {
P(S);
V(R);
}

B

ExitX(R,S) {
V(R);
V(S);
}
EntryY(R,S) {
P(R);
P(S);
}

C

ExitX(R,S) {
P(S);
V(R);
}
EntryY(R,S) {
V(S);
P(R);
}

D

ExitX(R,S) {
V(R);
P(S);
}
EntryY(R,S) {
V(S);
P(R);
}

Solution:

Option (C) is Correct.

The solution is using a binary semaphore. X and Y are two different processes whatever the values inserted by the processes in the array that will be used by process Y afterward.


Option C - Correct because each and every value inserted by process X in the array will be immediately consumed by process Y.

Thank You