Peterson’s Algorithm in Process Synchronization
Problem: The producer consumer problem (or bounded buffer problem) describes two processes, the producer and the consumer, which share a common, fixed-size buffer used as a queue. Producer produce an item and put it into buffer. If buffer is already full then producer will have to wait for an empty block in buffer. Consumer consume an item from buffer. If buffer is already empty then consumer will have to wait for an item in buffer. Implement Peterson’s Algorithm for the two processes using shared memory such that there is mutual exclusion between them. The solution should have free from synchronization problems.
Peterson’s algorithm –
Explanation of Peterson’s algorithm –
Peterson’s Algorithm is used to synchronize two processes. It uses two variables, a bool array flag of size 2 and an int variable turn to accomplish it.
In the solution i represents the Consumer and j represents the Producer. Initially the flags are false. When a process wants to execute it’s critical section, it sets it’s flag to true and turn as the index of the other process. This means that the process wants to execute but it will allow the other process to run first. The process performs busy waiting until the other process has finished it’s own critical section.
After this the current process enters it’s critical section and adds or removes a random number from the shared buffer. After completing the critical section, it sets it’s own flag to false, indication it does not wish to execute anymore.
The program runs for a fixed amount of time before exiting. This time can be changed by changing value of the macro RT.
Output:
Producer is ready now. Job 9 has been produced Buffer: 9 0 0 0 0 0 0 0 Producer will wait for 1 seconds Producer is ready now. Job 8 has been produced Buffer: 9 8 0 0 0 0 0 0 Producer will wait for 2 seconds Producer is ready now. Job 13 has been produced Buffer: 9 8 13 0 0 0 0 0 Producer will wait for 1 seconds Producer is ready now. Job 23 has been produced Buffer: 9 8 13 23 0 0 0 0 Producer will wait for 1 seconds Consumer is ready now. Job 9 has been consumed Buffer: 8 13 23 0 0 0 0 0 Consumer will sleep for 9 seconds Producer is ready now. Job 15 has been produced Buffer: 8 13 23 15 0 0 0 0 Producer will wait for 1 seconds Producer is ready now. Job 13 has been produced Buffer: 8 13 23 15 13 0 0 0 Producer will wait for 1 seconds Producer is ready now. Job 11 has been produced Buffer: 8 13 23 15 13 11 0 0 Producer will wait for 1 seconds Producer is ready now. Job 22 has been produced Buffer: 8 13 23 15 13 11 22 0 Producer will wait for 2 seconds Producer is ready now. Job 23 has been produced Buffer: 8 13 23 15 13 11 22 23 Producer will wait for 1 seconds The clock ran out.
Paterson Solution
This is a software mechanism implemented at user mode. It is a busy waiting solution can be implemented for only two processes. It uses two variables that are turn variable and interested variable.
The Code of the solution is given below
Till now, each of our solution is affected by one or the other problem. However, the Peterson solution provides you all the necessary requirements such as Mutual Exclusion, Progress, Bounded Waiting and Portability.
Analysis of Peterson Solution
This is a two process solution. Let us consider two cooperative processes P1 and P2. The entry section and exit section are shown below. Initially, the value of interested variables and turn variable is 0.
Initially process P1 arrives and wants to enter into the critical section. It sets its interested variable to True (instruction line 3) and also sets turn to 1 (line number 4). Since the condition given in line number 5 is completely satisfied by P1 therefore it will enter in the critical section.
Meanwhile, Process P1 got preempted and process P2 got scheduled. P2 also wants to enter in the critical section and executes instructions 1, 2, 3 and 4 of entry section. On instruction 5, it got stuck since it doesn't satisfy the condition (value of other interested variable is still true). Therefore it gets into the busy waiting.
P1 again got scheduled and finish the critical section by executing the instruction no. 6 (setting interested variable to false). Now if P2 checks then it are going to satisfy the condition since other process's interested variable becomes false. P2 will also get enter the critical section.
Any of the process may enter in the critical section for multiple numbers of times. Hence the procedure occurs in the cyclic order.
Mutual Exclusion
The method provides mutual exclusion for sure. In entry section, the while condition involves the criteria for two variables therefore a process cannot enter in the critical section until the other process is interested and the process is the last one to update turn variable.
Progress
An uninterested process will never stop the other interested process from entering in the critical section. If the other process is also interested then the process will wait.
Bounded waiting
The interested variable mechanism failed because it was not providing bounded waiting. However, in Peterson solution, A deadlock can never happen because the process which first sets the turn variable will enter in the critical section for sure. Therefore, if a process is preempted after executing line number 4 of the entry section then it will definitely get into the critical section in its next chance.
Portability
This is the complete software solution and therefore it is portable on every hardware.