n Hence, in fact, a semaphore is a record (structure):
type semaphore = record
                   count: integer;
                   queue: list of process
                 end;
var S: semaphore;
n When a process must wait for a semaphore S, it
is blocked and put on the semaphore’s queue
n The signal operation removes (acc. to a fair
policy like FIFO) one process from the queue
and puts it in the list of ready processes