VVS: model checking
Sleeping Barber
Introduction
We want to model and verify some
properties of the following classical concurrency problem:
the sleeping
barber. A barber owns a shop with a barber chair and
a waiting room with N>=0
chairs.
- The barber sleeps in his chair when there
are no customers. If a customer wakes him up, then he
starts shaving him. Once he finishes, he proceeds with
the next customer in the waiting room. If the waiting
room is empty and no customer is remaining, the barber
starts sleeping again in his chair.
- Each new customer enters the barber shop
unshaved and, if the barber is sleeping, awakes him
and sits in the barber chair to be shaved. Otherwise,
if the barber is busy, the customer looks for a free
chair in the sitting room taking his turn. If the
sitting room is full, the customer simply leaves
unattended.
We will introduce a slight variant in the
problem and assume that any customer leaving the
barbershop will take some arbitrary time and return at a
given point (potentially) as many times as he likes.
Naive approach
The following file, barber0.pml,
contains a first naive approach where someone has tried to
program the behaviour described above in a completely
straightforward manner. Several shared variables are used:
- The waiting room is a FIFO queue implemented as
a circular
buffer. To control the queue, two pointers are
used: start
points to the first element in the queue (if not
empty) and end points
to the first free position (if not full). A third
variable, customers,
keeps the number of elements in the queue. When the
queue is empty, start==end
and customers=0.
When it is full, we also have start==end
but customers==N.
- A variable sitting
used to tell who is currently sitting at the barber
chair. Each customer is numbered from 1 to C>=0 (the number
of customers) and the BARBER
is numbered with 0.
The barber is sleeping when sitting==BARBER.
There is no need to represent an empty chair.
- Finally, a boolean array shaved[i]
reflects if person i has been shaved
or not.
The file above starts with 4 customers
and 2 seats in the waiting room. A simple execution of the
code shows several anomalous situations and the execution
normally ends up with an unexpected deadlock: remember
that in this variant of the problem, the system should be
running forever.
Exercise A: Force spin to obtain counterexamples of
the following (safety) properties:
- The barber cannot be sleeping while there are
customers waiting
- Any customer (take, for instance, 1) should never
leave unattended while the barber is sleeping
To find short counterexamples, try reducing the number
of seats and/or customers. In each case, explain the
counterexample found and the cause of the wrong
behaviour. Explain the reason for the deadlock too. Does
it happen for any number N>=0
of seats in the waiting room?
Adapting the classical solution
The classical solution to the Sleeping Barber problem
uses three semaphores:
- A Boolean semaphore mutex
used to protect the information about the waiting room
(number of waiting customers, etc)
- A Boolean semaphore ready
used to point out that the barber is not busy
- An integer semaphore counting the number of customers waiting,
ready to be shaved
and a general variable freeseats
that accounts for the number of free seats in the
waiting room.
Exercise B: create a new version of the code
above, barber1.pml, declaring the new Boolean semaphores
and using the already existing variable customers as an
integer semaphore. Adapt the classical solution of the
Sleeping Barbers problem to the current implementation.
Exercise C: try again the previous properties in
Exercise A, explaining their results. Additionally, try
to check these properties:
- The barber can shave infinitely often
- If a customer enters the waiting room, he is
eventually shaved
- A customer (say 1) can be shaved infinitely often.
Try this query also with some values when C<N. Explain the
difference.
Again, explain the answers and the counterexamples if
those are found.
Assessment & delivery
The maximum grade for this exercise is 2
points. Use the MOODLE platform to upload your work
as a single .zip file containing all the files with pml
code and explanations. Exercises can be made by two
students at most. If so, the students' names must be
included in the first lines of each file and only one of
the students needs to upload the files to his MOODLE
account.
The deadline for delivery is Friday, May 9th, 2025
(23:59).
|