by B. W. Lampson & D. D. Redell @ Xerox
CACM 1980
|  | Open
      problems with monitor and answers this paper suggest 
 | ||||||||||||||||||||||||||||
|  | Why
      monitor rather than non-preemptive scheduling or semaphore? 
 | 
|  | Process
      creation in Mesa: Any procedure call can be prefixed by 'fork', for
      example, ReadLine(terminal) ->  fork ReadLine(terminal) 
 | ||||||||||||||
|  | Processes in Mesa are treated exactly like any other value: they can be passed as arguments, assigned to variables, etc | ||||||||||||||
|  | Strict
      type checking is possible: 
 | ||||||||||||||
|  | The cost of creating, destroying, and storing processes is moderate. Don't understand! | ||||||||||||||
|  | Java-like exception handling in Mesa -> Root procedure should catch all the exceptions -> Arbitrary procedure written for sequential call is NOT suitable for forking | 
|  | Monitor
      is an object comprised of: 
 | ||||||||||
|  | Only one process can be inside monitor and access the shared data | ||||||||||
|  | If the order of calling entry methods does matter, other provisions must be made in the program outside the monitor | 
|  | A module in Mesa is exactly an object in OO | ||||||
|  | Monitor
      modules: 
 | ||||||
|  | Condition variable: wait & notify | ||||||
|  | Mutex
      will not be released when a process in monitor calls a (inside or outside)
      function 
 | 
|  | Kind of independent issue | 
|  | Monitor is a tool for synchronization and it is the programmer's responsibility to be careful not to cause deadlock | 
|  | But the tool has to provide a clear interface | 
|  | Object are created and destroyed dynamically -> monitors for these objects should also be created and destroyed dynamically | ||
|  | In object oriented programming language such as Java, this is simply done by tagging an object as 'monitor' (actually tagging one or more function with 'synchronized') | ||
|  | But
      this is a kind of headache in a non OO language 
 | 
|  | If 
 | ||||||||
|  | how
      to release the monitor lock that Pi has? 
 | 
|  | 'notify' instead of 'signal' | 
|  | Timeout 
 | ||||
|  | Abort 
 | ||||
|  | Broadcast: wake all waiter instead of one waiter | 
|  | Communication
      between process and device--for example I/O device--can be implemented by
      monitor 
 | ||
|  | Device can notify interrupt handler by naked notification that signals some event has happened | ||
|  | Called naked notify because the device has not hold monitor lock -> race condition can happen | 
|  | Priority
      inversion can occur 
 | ||||||||
|  | Monitor does not prevent priority inversion outright | ||||||||
|  | Proposed
      and commonly used solution: priority boosting 
 | 
|  | Pros: This paper deals with many aspects of monitors and provides solutions, almost all of which have blossomed at Java monitor |