Managing Critical Resources in Concurrent Processes

undefined
B. RAMAMURTHY
Critical Section and Critical
Resources
Amrita-UB-MSES-CSE524-2016-5
1
Issues in Concurrency
Concurrent processes /threads help in improving
performance
However when they share resources, it is required that
the access to the resource is protected from inconsistency
and incorrect states.
These shared resources are called critical resources and
the code accessing the resource is called the critical
section.
The access to the resource needs to be mutually exclusive
among concurrent processes.
Semaphores are kernel level primitives to help
implement mutual exclusion.
Amrita-UB-MSES-CSE524-2016-5
2
Pag
e 3
Principles of Concurrency
Interleaving and overlapping the execution of
processes.
Consider two processes P1 and P2 executing
the function 
echo
:
{
  input (in, keyboard);
  out = in;
  output (out, display);
}
Amrita-UB-MSES-CSE524-2016-5
Pag
e 4
...Concurrency (contd.)
P1 invokes 
echo, 
after it inputs into 
in 
, gets interrupted (switched).
P2 invokes 
echo
, inputs into 
in 
and completes the execution and
exits. When P1 returns in is overwritten and gone. Result: first ch is
lost and second ch is written twice.
This type of situation is even more probable in multiprocessing
systems where real concurrency is realizable thru’ multiple processes
executing on multiple processors.
Solution: Controlled access to shared resource
Protect the shared resource : 
in
 buffer;  “critical resource”
one process/shared code. “critical region”
Amrita-UB-MSES-CSE524-2016-5
Semaphores
Pag
e 5
Semaphore is kernel level primitive for realizing
mutual exclusion.
Attributes: semaphore value,
Operations on semaphore: init, wait, signal
Considered an kernel resource, a limited number
available: a limited number of instances (objects)
of semaphore  is allowed.
Can easily implement mutual exclusion among
any number of processes.
Can also be used for synchronization.
Amrita-UB-MSES-CSE524-2016-5
Critical Section of 
n
 Processes
Pag
e 6
Shared data:
 
   Semaphore mutex; //
initially 
mutex
 = 1
Process 
Pi: 
do {
    mutex.wait();
        
critical section
 
 
    mutex.signal();
       
 remainder section
} while (1);
 
       
   
 
Amrita-UB-MSES-CSE524-2016-5
Semaphore Implementation
Pag
e 7
Define a semaphore as a class:
class Semaphore
{ int value; // semaphore value
   ProcessQueue L; // process queue
   //operations
 
wait()
 
signal()
}
In addition, two simple utility operations:
block()
 suspends the process that invokes it.
Wakeup() 
resumes the execution of a blocked process 
P
.
Amrita-UB-MSES-CSE524-2016-5
Semantics of wait and signal
Pag
e 8
Semaphore operations now defined as
  
S.
wait()
:
 
  
S.value--;
   
if (S.value < 0) {
      
add this process to
 S.L;
     
block(); // block a process
   
}
  
S.
signal()
:
  
S.value++;
   
if (S.value <= 0) {
     
remove a process
 P 
from
 S.L;
    
wakeup(); // wake a process
   
}
Amrita-UB-MSES-CSE524-2016-5
 Semaphores for CS
Pag
e 9
Semaphore is initialized to 1. The first process that
executes a 
wait() 
will be able to immediately enter the
critical section (CS). (S.
wait() 
makes S value zero.)
Now other processes wanting to enter the CS will each
execute the wait() thus decrementing the value of S, and
will get blocked on S. (If at any time value of S is negative,
its absolute value gives the number of processes waiting
blocked. )
When a process in CS departs, it executes S.
signal() 
which
increments the value of S, and will wake up any one of the
processes blocked. The  queue could be FIFO or priority
queue.
Amrita-UB-MSES-CSE524-2016-5
Two Types of Semaphores
Pag
e 10
Counting
 semaphore – integer value can
range over an unrestricted domain.
Binary
 semaphore – integer value can range
only between 0 and 1; can be simpler to
implement. ex: nachos
Can implement a counting semaphore 
using
a binary semaphore.
Amrita-UB-MSES-CSE524-2016-5
Semaphore for Synchronization
Pag
e 11
Execute 
B
 in 
P
j
 only after 
A
 executed in 
P
i
Use semaphore 
flag
 initialized to 0
Code:
  
P
i
 
P
j
  
 
 
 
  
A
 
flag.
wait
()
  
flag.
signal
()
 
B
Amrita-UB-MSES-CSE524-2016-5
Classical Problems of Synchronization
Pag
e 12
Bounded-Buffer Problem
Readers and Writers Problem
Dining-Philosophers Problem
Amrita-UB-MSES-CSE524-2016-5
Producer/Consumer problem
Pag
e 13
Producer
repeat
produce item v;
b[in] = v;
in = in + 1;
forever;
Consumer
repeat
while (in <= out) nop;
w = b[out];
out = out + 1;
consume w;
forever;
Amrita-UB-MSES-CSE524-2016-5
Solution for P/C using Semaphores
Pag
e 14
Producer
repeat
produce item v;
MUTEX.wait();
b[in] = v;
in = in + 1;
MUTEX.signal();
forever;
What if Producer is
slow or late?
Consumer
repeat
while (in <= out) nop;
MUTEX.wait();
w = b[out];
out = out + 1;
MUTEX.signal();
consume w;
forever;
Ans: Consumer will
busy-wait at the while
statement.
Amrita-UB-MSES-CSE524-2016-5
P/C: improved solution
Pag
e 15
Producer
repeat
produce item v;
MUTEX.wait();
b[in] = v;
in = in + 1;
MUTEX.signal();
AVAIL.signal();
forever;
What will be the initial
values of MUTEX and
AVAIL?
Consumer
repeat
AVAIL.wait();
MUTEX.wait();
w = b[out];
out = out + 1;
MUTEX.signal();
consume w;
forever;
ANS:  Initially MUTEX =
1, AVAIL  = 0.
Amrita-UB-MSES-CSE524-2016-5
P/C problem: Bounded buffer
Pag
e 16
Producer
repeat
produce item v;
while((in+1)%n == out)
NOP;
b[in] = v;
in = ( in + 1)% n;
forever;
How to enforce
bufsize
?
Consumer
repeat
while (in == out) NOP;
w = b[out];
out = (out + 1)%n;
consume w;
forever;
ANS: Using another
counting semaphore.
Amrita-UB-MSES-CSE524-2016-5
P/C: Bounded Buffer solution
Pag
e 17
Producer
repeat
produce item v;
BUFSIZE.wait();
MUTEX.wait();
b[in] = v;
in = (in + 1)%n;
MUTEX.signal();
AVAIL.signal();
forever;
What is the initial value
of BUFSIZE?
Consumer
repeat
AVAIL.wait();
MUTEX.wait();
w = b[out];
out = (out + 1)%n;
MUTEX.signal();
BUFSIZE.signal();
consume w;
forever;
ANS: size of the
bounded buffer.
Amrita-UB-MSES-CSE524-2016-5
Semaphores - comments
Pag
e 18
Intuitively easy to use.
wait() and signal() are to be implemented as atomic
operations.
Difficulties:
signal() and wait() may be exchanged inadvertently by
the programmer. This may result in deadlock or violation
of mutual exclusion.
signal() and wait() may be left out.
Related wait() and signal() may be scattered all over the
code among the processes.
Amrita-UB-MSES-CSE524-2016-5
Slide Note
Embed
Share

Concurrent processes can enhance performance but require careful handling of critical resources to prevent inconsistency. Utilizing semaphores for mutual exclusion and synchronization can help control access to shared resources. This article discusses the principles of concurrency, issues with interleaving processes, and the implementation of semaphores to manage critical sections in n processes effectively.

  • Concurrent Processes
  • Critical Resources
  • Semaphores
  • Performance Optimization
  • Synchronization

Uploaded on Oct 05, 2024 | 0 Views


Download Presentation

Please find below an Image/Link to download the presentation.

The content on the website is provided AS IS for your information and personal use only. It may not be sold, licensed, or shared on other websites without obtaining consent from the author. Download presentation by click this link. If you encounter any issues during the download, it is possible that the publisher has removed the file from their server.

E N D

Presentation Transcript


  1. Critical Section and Critical Resources 1 B. RAMAMURTHY Amrita-UB-MSES-CSE524-2016-5

  2. Issues in Concurrency 2 Concurrent processes /threads help in improving performance However when they share resources, it is required that the access to the resource is protected from inconsistency and incorrect states. These shared resources are called critical resources and the code accessing the resource is called the critical section. The access to the resource needs to be mutually exclusive among concurrent processes. Semaphores are kernel level primitives to help implement mutual exclusion. Amrita-UB-MSES-CSE524-2016-5

  3. Principles of Concurrency Pag e 3 Interleaving and overlapping the execution of processes. Consider two processes P1 and P2 executing the function echo: { input (in, keyboard); out = in; output (out, display); } Amrita-UB-MSES-CSE524-2016-5

  4. ...Concurrency (contd.) Pag e 4 P1 invokes echo, after it inputs into in , gets interrupted (switched). P2 invokes echo, inputs into in and completes the execution and exits. When P1 returns in is overwritten and gone. Result: first ch is lost and second ch is written twice. This type of situation is even more probable in multiprocessing systems where real concurrency is realizable thru multiple processes executing on multiple processors. Solution: Controlled access to shared resource Protect the shared resource : inbuffer; critical resource one process/shared code. critical region Amrita-UB-MSES-CSE524-2016-5

  5. Semaphores Pag e 5 Semaphore is kernel level primitive for realizing mutual exclusion. Attributes: semaphore value, Operations on semaphore: init, wait, signal Considered an kernel resource, a limited number available: a limited number of instances (objects) of semaphore is allowed. Can easily implement mutual exclusion among any number of processes. Can also be used for synchronization. Amrita-UB-MSES-CSE524-2016-5

  6. Critical Section of n Processes Pag e 6 Shared data: Semaphore mutex; //initially mutex = 1 Process Pi: do { mutex.wait(); critical section mutex.signal(); remainder section } while (1); Amrita-UB-MSES-CSE524-2016-5

  7. Semaphore Implementation Pag e 7 Define a semaphore as a class: class Semaphore { int value; // semaphore value ProcessQueue L; // process queue //operations wait() signal() } In addition, two simple utility operations: block() suspends the process that invokes it. Wakeup() resumes the execution of a blocked process P. Amrita-UB-MSES-CSE524-2016-5

  8. Semantics of wait and signal Pag e 8 Semaphore operations now defined as S.wait(): S.value--; if (S.value < 0) { } add this process to S.L; block(); // block a process S.signal(): S.value++; if (S.value <= 0) { remove a process P from S.L; wakeup(); // wake a process } Amrita-UB-MSES-CSE524-2016-5

  9. Semaphores for CS Pag e 9 Semaphore is initialized to 1. The first process that executes a wait() will be able to immediately enter the critical section (CS). (S.wait() makes S value zero.) Now other processes wanting to enter the CS will each execute the wait() thus decrementing the value of S, and will get blocked on S. (If at any time value of S is negative, its absolute value gives the number of processes waiting blocked. ) When a process in CS departs, it executes S.signal() which increments the value of S, and will wake up any one of the processes blocked. The queue could be FIFO or priority queue. Amrita-UB-MSES-CSE524-2016-5

  10. Two Types of Semaphores Pag e 10 Counting semaphore integer value can range over an unrestricted domain. Binary semaphore integer value can range only between 0 and 1; can be simpler to implement. ex: nachos Can implement a counting semaphore using a binary semaphore. Amrita-UB-MSES-CSE524-2016-5

  11. Semaphore for Synchronization Pag e 11 Execute B in Pj only after A executed in Pi Use semaphore flag initialized to 0 Code: Pi A flag.signal() Pj flag.wait() B Amrita-UB-MSES-CSE524-2016-5

  12. Classical Problems of Synchronization e 12 Pag Bounded-Buffer Problem Readers and Writers Problem Dining-Philosophers Problem Amrita-UB-MSES-CSE524-2016-5

  13. Producer/Consumer problem Pag e 13 Producer repeat produce item v; b[in] = v; in = in + 1; forever; Consumer repeat while (in <= out) nop; w = b[out]; out = out + 1; consume w; forever; Amrita-UB-MSES-CSE524-2016-5

  14. Solution for P/C using Semaphores Pag e 14 Producer repeat produce item v; MUTEX.wait(); b[in] = v; in = in + 1; MUTEX.signal(); forever; Consumer repeat while (in <= out) nop; MUTEX.wait(); w = b[out]; out = out + 1; MUTEX.signal(); consume w; forever; Ans: Consumer will busy-wait at the while statement. What if Producer is slow or late? Amrita-UB-MSES-CSE524-2016-5

  15. P/C: improved solution Pag e 15 Producer repeat produce item v; MUTEX.wait(); b[in] = v; in = in + 1; MUTEX.signal(); AVAIL.signal(); forever; Consumer repeat AVAIL.wait(); MUTEX.wait(); w = b[out]; out = out + 1; MUTEX.signal(); consume w; forever; What will be the initial values of MUTEX and AVAIL? ANS: Initially MUTEX = 1, AVAIL = 0. Amrita-UB-MSES-CSE524-2016-5

  16. P/C problem: Bounded buffer Pag e 16 Producer repeat produce item v; while((in+1)%n == out) NOP; b[in] = v; in = ( in + 1)% n; forever; How to enforce bufsize? Consumer repeat while (in == out) NOP; w = b[out]; out = (out + 1)%n; consume w; forever; ANS: Using another counting semaphore. Amrita-UB-MSES-CSE524-2016-5

  17. P/C: Bounded Buffer solution Pag e 17 Producer repeat produce item v; BUFSIZE.wait(); MUTEX.wait(); b[in] = v; in = (in + 1)%n; MUTEX.signal(); AVAIL.signal(); forever; What is the initial value of BUFSIZE? Consumer repeat AVAIL.wait(); MUTEX.wait(); w = b[out]; out = (out + 1)%n; MUTEX.signal(); BUFSIZE.signal(); consume w; forever; ANS: size of the bounded buffer. Amrita-UB-MSES-CSE524-2016-5

  18. Semaphores - comments Pag e 18 Intuitively easy to use. wait() and signal() are to be implemented as atomic operations. Difficulties: signal() and wait() may be exchanged inadvertently by the programmer. This may result in deadlock or violation of mutual exclusion. signal() and wait() may be left out. Related wait() and signal() may be scattered all over the code among the processes. Amrita-UB-MSES-CSE524-2016-5

More Related Content

giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#