Interprocess communications aka IPC occurs with the help of
signals and pipes. Linux also supports System V IPC mechanisms. Signals notify
events to one or more processes and can be used as a primitive way of
communication and synchronization between user processes. Signals can also be
used for job control. Processes can
choose to ignore most of the signals except for the well-known SIGSTOP and
SIGKILL. The first causes a process to halt its execution. The second causes a
process to exit. Defaults actions are associated with signals that the kernel
completes. Signals are not delivered to the process until it enters running
state from ready state. When a process exits a system call, the signals are then
delivered. Linux is POSIX compatible so the process can specify which signals
are blocked when a particular signal handling routine is called.
A pipe is a unidirectional, ordered and unstructured stream
of data. Writers add data at one end and readers get it from the other end. An
example is the command “ls | less” which paginates the results of the directory
listing.
UNIX System V introduced IPC mechanisms in 1983 which
included message queues, semaphores, and shared memory. The mechanisms all
share common authentication methods and Linux supports all three. Processes
access these resources by passing a unique resource identifier to the kernel
via system calls.
Message queues allow one or more processes to write messages,
which will be read by one or more processes. They are more versatile than pipes
because the unit is a message rather than an unformatted stream of bytes and
messages can be prioritized based on a type association.
Semaphores are objects that support atomic operations such
as set and test. They are counters for controlled access to shared resources by
multiple processes. Semaphores are most often used as locking mechanisms but
must be used carefully to avoid deadlocking such as when a thread holds on to a
lock and never releases it.
Shared memory is a way to communicate when that memory
appears in the virtual address spaces of the participating processes. Each
process that wishes to share the memory must attach to virtual memory via a
system call and similarly must detach from the memory when it no longer needs
the memory.
Linux has a symmetrical multiprocessing model. A multiprocessing
system consists of a number of processors communicating via a bus or a network.
There are two types of multiprocessing systems: loosely coupled or tightly
coupled. Loosely coupled systems consists of processors that operate
standalone. Each processor has its own bus, memory, and I/O subsystem, and
communicates with other processes through the network medium. Tightly coupled
systems consists of processors that share memory, bus, devices and sometimes
cache. These can be symmetric and asymmetric. Asymmetric systems have a single master
processor that controls the others. Symmetric systems are subdivided into
further classes consisting of dedicated and shared cache systems.
Ideally, an SMP System with n processors would perform n
times better than a uniprocessor system but in reality, no SMP is 100%
scalable.
SMP systems use locks where multiple processors execute
multiple threads at the same time. Locking must be limited to the smallest time
possible. Another common technique is to use finer grain locking so that
instead of locking a table, only a few rows are locked at a time. Linux 2.6
removes most of the global locks and locking primitives are optimized for low
overheads.
Multiprocessors demonstrate cache coherency problem because
each processor has an individual cache, and multiple copies of certain data exist
in the system which can get out of sync.
Processor affinity improves system performance because the
data and the resources accessed by the code will stay local to the processor’s
cache due to warmth. Affinity helps to use these rather than fetch repeatedly. Use
of processor affinity is accentuated in Non-uniform Memory Access architectures
where some resources can be closer to a processor than others.
No comments:
Post a Comment