Critical Section for n Processes

 

 

            When Processes need to share one source, they must run without disturbing each other knowing only one process can use a source. To achieve this Critical Section concept has been developed and it was tried to solve this by various C.S. algorithms. Bakery Algorithms is a solution to this for n processes.

 

 

Bakery Algorithm

            For n processes algorithm works like this:

Before entering C.S. a process is given a number. A process having minimum number enters into C.S.  if Pi and Pj has same number and i<j then Pi enters C.S. in first order. Otherwise Pj enters C.S.

Number giving is always in increasing order (i.e.1,2,3,3,3,3,4,5…).  

max (a0,…, an-1) : is the biggest number in number[n] for Pi.

 

boolean choosing[n]; // initially “false”

int number[n]; // initially “0”

do

{

choosing[i] = true;

number[i] = max(number[0], number[1], …, number [n – 1])+1;

choosing[i] = false;

for (j = 0; j < n; j++)

{

while (choosing[j]) ;

while ((number[j] != 0) && (number[j] < number[i])) ;

}

CRITICAL SECTION

number[i] = 0;

REMAINDER SECTION

} while (1); // exit when false

 

 

How Bakery Algorithm Convenient?

a)      Mutual Exclusion: Arrays choosing[] and number[] is used to guarantee only one process will enter C.S. in any time. Form array number[n] minimum process number is selected. When Pi=Pj, smallest number is selected from i, j.

b)      Progress: Time quantum mechanism tq is used to ensure that process will exit at most in tq seconds.

c)      Bounded Waiting: Processes waiting to enter C.S. will wait n unit times in extreme conditions.

 

 

References

[1]       Silberschatz, Galvin and Gagne, Operating System Concepts, John Wiley and Sons Inc., Chapter 7, Pages 194-196, 2002.

 
Copyright by Chasan Chouse