An operating system supports a virtual machine by providing a
standard system interface. At the immediate interface
to the operating system, this is typically provided as one or more
<#99#> monitors<#99#>.
A Monitor is a collection of procedures which may be executed by a
collection of concurrent processes. It protects its internal data from
the users, and is a mechanism for synchronizing access to the
resources the procedures use. Since only the monitor can access its
private data, it automatically provides mutual exclusive between
customer processes. Entry to the monitor by one process excludes entry
by others. This is described further in chapter 2.
In this sense, the operating system is very like a collection of
Objects accessed by standard Methods. The operating system monitor is
a single monolithic monitor, which not only protects private data, but
also privileged instructions. Usually, hardware support is required to
secure access to this kind of monitor (via system ;SPM_quot;traps;SPM_quot;). However,
modern languages and compiler support mean that this is less
necessary.
These procedures in an operating system monitor
are usually divided into those to do with file access,
those to do with process manipulation, and those to do with
InterProcess Communication.
Interprocess Communication (#fnos2#100>) can be provided in several ways:
-
Shared Memory
-
Message Passing
-
Streams/Pipes/Named Pipes
-
FIFOs
-
Remote Procedure Call
We can further classify the IPC mechanisms into the broad classes:
Reliable communication channels fail only with the end system (e.g. if a
central computer bus fails, usually the entire machine (stable
storage/memory/CPU access) fails.
Unreliable channels exhibit various different types of fault.
Messages may be lost, re-ordered, duplicated, changed to apparently
correct but different messages and even created as if from nowhere
by the channel. All of these problems may have to be overcome by the
IPC mechanism.
We can also classify IPC mechanisms by when the
association between one process and another is made. This
is orthogonal to the issue of reliability.
-
Connection binding.
This can be further refined by seeing whether the inter-process
association is at compile time, link time or run-time. Many
systems (typically message passing) have no notion of connectedness.
-
Independent Messages.
This can be refined by the strength of synchronization involved in
sending and/or receiving a message.