Department of I.T. Engineering
Presentation
On
Semaphore and critical section problem solving
Academic year 2018-19
Laxmi Institute of Technology, Sarigam
Approved by AICTE, New Delhi; Affiliated to Gujarat Technological University, Ahmedabad
Enrolment
number
Name
160860116018 Nishant P. Joshi
160860116029 Raj M. Patel
160860116032 Udit A. Patel
Content
 What is Semaphore?
 Methods for Semaphore
 Types of semaphore
 Semaphore Implementation
 Bounded-Buffer Problem
 Readers-Writers Problem
 Dining-Philosophers Problem
Semaphore
 A semaphore is a variable or abstract data type used to
control access to a common resource by
multiple processes in a concurrent system such as
a multitasking operating system.
 A semaphore is an object that consists of a counter, a
waiting list of processes and two methods:
signal and wait.
 Synchronization tool that does not require busy waiting
(spinlock).
Facts about semaphore
 It is a mechanism that can be used to provide
synchronization of tasks.
 It is a low level synchronization mechanism.
 It was devised in 1965 by Edsger Dijkstra to provide
competition synchronization and also cooperation
synchronization.
 It is a data structure that contains an integer and a queue
that store tasks descriptors.
 Semaphore has only two operations. They are pass/wait
and release. Originally named P and V by Dijkstra, after
two Dutch words passeren (to pass) and vrygeren (to
release).
Semaphore Method: wait( )
void wait(sem S)
{
S.count--;
if (S.count < 0)
{
add the caller to the waiting list; block();
}
}
• After decreasing the counter by 1, if the counter value
becomes negative, then
 add the caller to the waiting list, and then
 block itself.
• Resources are occupied for a process to occur.
Semaphore Method: signal( )
void signal(sem S)
{ S.count++;
if (S.count <= 0)
{
remove a process P from the waiting list; resume(P);
}
}
 After increasing the counter by 1, if the new counter value is
not positive, then
 remove a process P from the waiting list,
 resume the execution of process P, and return
 Resources are released for other process to occupy.
Semaphores Types
Counting semaphore – integer value can range over
an unrestricted domain.
• full: counts the number of slots that are full
• empty: counts the number of slots empty
Binary semaphore – integer value can range only
between 0 and 1; can be simpler to implement.
• mutex: makes sure the producer and consumer don’t
access the buffer at the same time
Wait() and Signal() are performed atomically
Semaphore Implementation
Mutual exclusion implementation with semaphores
Shared data:
semaphore mutex; //initially mutex = 1
Process Pi:
do {
wait(mutex);
critical section
signal(mutex);
remainder section
}while(1);
Bounded-Buffer Problem
Shared data
semaphore full, empty, mutex;
● pool of n buffers, each can hold one item
● mutex provides mutual exclusion to the buffer pool
● empty and full count the number of empty and full buffers
Initially:
full = 0, empty = n, mutex = 1;
// Consumer
do {
wait(full)
wait(mutex);
…
remove an item from buffer to
nextc
…
signal(mutex);
signal(empty);
…
consume the item in nextc
…
}while(1);
Bounded-Buffer Problem
// Producer
do{
…
produce an item in nextp
…
wait(empty);
wait(mutex);
…
add nextp to buffer
…
signal(mutex);
signal(full);
}while(1);
Readers-Writers Problem
● readcount keeps track of how many processes are reading the
object
● mutex provides mutual exclusion for changes to readcount
● wrt provides mutual exclusion for the writers
● when writer exits and signals wrt, either another waiting
writer executes or another waiting reader – the scheduler
decides
Readers-Writers Problem
● Sharing a data object (file or record) among several
concurrent processes.
● If one processes wants to write and another process wants to
reads or write, synchronization problems can arise.
• Require that the writers have exclusive access to the shared
object.
Shared data
semaphore mutex, wrt;
Initially
mutex = 1, wrt = 1, readcount = 0
Readers-Writers Problem
// Write process
wait(wrt);
…
writing is performed
… signal(wrt);
// Read process
wait(mutex);
readcount++;
if (readcount == 1) wait(wrt);
signal(mutex);
…
reading is performed
… wait(mutex);
readcount--;
if (readcount == 0) signal(wrt);
signal(mutex):
Dining-Philosophers Problem
Processes are competing for exclusive access to a
limited number of resources
● Philosophers eat/think
● Eating needs 2 chopsticks
● Pick up one chopstick at a time
● How to prevent deadlock
Shared data
semaphore chopstick[5];
Initially all values are 1
Dining-Philosophers Problem
● All could pick up left fork simultaneously, see right fork not
available , put down left fork simultaneously and repeat the
process – starvation
● Each could wait a random amount of time before pick up right
fork but that is not a good solution for all applications
● Could use a binary semaphore, would enable only one
philosopher to eat at a time
Dining-Philosophers Problem
Philosopher i:
do {
wait(chopstick[i])
wait(chopstick[(i+1) % 5])
eat
signal(chopstick[i]);
signal(chopstick[(i+1) % 5]);
think
} while (1);
Semophores and it's types

Semophores and it's types

  • 1.
    Department of I.T.Engineering Presentation On Semaphore and critical section problem solving Academic year 2018-19 Laxmi Institute of Technology, Sarigam Approved by AICTE, New Delhi; Affiliated to Gujarat Technological University, Ahmedabad Enrolment number Name 160860116018 Nishant P. Joshi 160860116029 Raj M. Patel 160860116032 Udit A. Patel
  • 2.
    Content  What isSemaphore?  Methods for Semaphore  Types of semaphore  Semaphore Implementation  Bounded-Buffer Problem  Readers-Writers Problem  Dining-Philosophers Problem
  • 3.
    Semaphore  A semaphoreis a variable or abstract data type used to control access to a common resource by multiple processes in a concurrent system such as a multitasking operating system.  A semaphore is an object that consists of a counter, a waiting list of processes and two methods: signal and wait.  Synchronization tool that does not require busy waiting (spinlock).
  • 4.
    Facts about semaphore It is a mechanism that can be used to provide synchronization of tasks.  It is a low level synchronization mechanism.  It was devised in 1965 by Edsger Dijkstra to provide competition synchronization and also cooperation synchronization.  It is a data structure that contains an integer and a queue that store tasks descriptors.  Semaphore has only two operations. They are pass/wait and release. Originally named P and V by Dijkstra, after two Dutch words passeren (to pass) and vrygeren (to release).
  • 5.
    Semaphore Method: wait() void wait(sem S) { S.count--; if (S.count < 0) { add the caller to the waiting list; block(); } } • After decreasing the counter by 1, if the counter value becomes negative, then  add the caller to the waiting list, and then  block itself. • Resources are occupied for a process to occur.
  • 6.
    Semaphore Method: signal() void signal(sem S) { S.count++; if (S.count <= 0) { remove a process P from the waiting list; resume(P); } }  After increasing the counter by 1, if the new counter value is not positive, then  remove a process P from the waiting list,  resume the execution of process P, and return  Resources are released for other process to occupy.
  • 7.
    Semaphores Types Counting semaphore– integer value can range over an unrestricted domain. • full: counts the number of slots that are full • empty: counts the number of slots empty Binary semaphore – integer value can range only between 0 and 1; can be simpler to implement. • mutex: makes sure the producer and consumer don’t access the buffer at the same time Wait() and Signal() are performed atomically
  • 8.
    Semaphore Implementation Mutual exclusionimplementation with semaphores Shared data: semaphore mutex; //initially mutex = 1 Process Pi: do { wait(mutex); critical section signal(mutex); remainder section }while(1);
  • 9.
    Bounded-Buffer Problem Shared data semaphorefull, empty, mutex; ● pool of n buffers, each can hold one item ● mutex provides mutual exclusion to the buffer pool ● empty and full count the number of empty and full buffers Initially: full = 0, empty = n, mutex = 1;
  • 10.
    // Consumer do { wait(full) wait(mutex); … removean item from buffer to nextc … signal(mutex); signal(empty); … consume the item in nextc … }while(1); Bounded-Buffer Problem // Producer do{ … produce an item in nextp … wait(empty); wait(mutex); … add nextp to buffer … signal(mutex); signal(full); }while(1);
  • 11.
    Readers-Writers Problem ● readcountkeeps track of how many processes are reading the object ● mutex provides mutual exclusion for changes to readcount ● wrt provides mutual exclusion for the writers ● when writer exits and signals wrt, either another waiting writer executes or another waiting reader – the scheduler decides
  • 12.
    Readers-Writers Problem ● Sharinga data object (file or record) among several concurrent processes. ● If one processes wants to write and another process wants to reads or write, synchronization problems can arise. • Require that the writers have exclusive access to the shared object. Shared data semaphore mutex, wrt; Initially mutex = 1, wrt = 1, readcount = 0
  • 13.
    Readers-Writers Problem // Writeprocess wait(wrt); … writing is performed … signal(wrt); // Read process wait(mutex); readcount++; if (readcount == 1) wait(wrt); signal(mutex); … reading is performed … wait(mutex); readcount--; if (readcount == 0) signal(wrt); signal(mutex):
  • 14.
    Dining-Philosophers Problem Processes arecompeting for exclusive access to a limited number of resources ● Philosophers eat/think ● Eating needs 2 chopsticks ● Pick up one chopstick at a time ● How to prevent deadlock Shared data semaphore chopstick[5]; Initially all values are 1
  • 15.
    Dining-Philosophers Problem ● Allcould pick up left fork simultaneously, see right fork not available , put down left fork simultaneously and repeat the process – starvation ● Each could wait a random amount of time before pick up right fork but that is not a good solution for all applications ● Could use a binary semaphore, would enable only one philosopher to eat at a time
  • 16.
    Dining-Philosophers Problem Philosopher i: do{ wait(chopstick[i]) wait(chopstick[(i+1) % 5]) eat signal(chopstick[i]); signal(chopstick[(i+1) % 5]); think } while (1);