Page 107 - DCAP403_Operating System
P. 107
Operating System
Notes Problem: When one process is updating shared modifiable data in its critical section, no other
process should allowed to enter in its critical section.
Proposal 1: Disabling Interrupts (Hardware Solution)
Each process disables all interrupts just after entering in its critical section and re-enable all
interrupts just before leaving critical section. With interrupts turned off the CPU could not be
switched to other process. Hence, no other process will enter its critical and mutual exclusion
achieved.
Conclusion
Disabling interrupts is sometimes a useful interrupts is sometimes a useful technique within the
kernel of an operating system, but it is not appropriate as a general mutual exclusion mechanism
for users process. The reason is that it is unwise to give user process the power to turn off
interrupts.
Proposal 2: Lock Variable (Software Solution)
In this solution, you consider a single, shared, (lock) variable, initially 0. When a process wants
to enter in its critical section, it first test the lock. If lock is 0, the process first sets it to 1 and
then enters the critical section. If the lock is already 1, the process just waits until (lock) variable
becomes 0. Thus, a 0 means that no process in its critical section, and 1 means hold your horses -
some process is in its critical section.
Conclusion
The flaw in this proposal can be best explained by example. Suppose process A sees that the
lock is 0. Before it can set the lock to 1 another process B is scheduled, runs, and sets the lock to
1. When the process A runs again, it will also set the lock to 1, and two processes will be in their
critical section simultaneously.
Proposal 3: Strict Alteration
In this proposed solution, the integer variable ‘turn’ keeps track of whose turn is to enter the
critical section. Initially, process A inspect turn, finds it to be 0, and enters in its critical section.
Process B also finds it to be 0 and sits in a loop continually testing ‘turn’ to see when it becomes
1.Continuously testing a variable waiting for some value to appear is called the Busy-Waiting.
Conclusion
Taking turns is not a good idea when one of the processes is much slower than the other. Suppose
process 0 finishes its critical section quickly, so both processes are now in their noncritical section.
This situation violates above mentioned condition 3.
Using Systems calls ‘sleep’ and ‘wakeup’
Basically, what above mentioned solution do is this: when a processes wants to enter in its critical
section , it checks to see if then entry is allowed. If it is not, the process goes into tight loop and
waits (i.e., start busy waiting) until it is allowed to enter. This approach waste CPU-time.
Now look at some interprocess communication primitives is the pair of steep-wakeup.
100 LOVELY PROFESSIONAL UNIVERSITY