Shared Memory
Shared Memory
An illustration of a shared
memory system of three processors
In computer science, shared memory is memory that may
be simultaneously accessed by multiple programs with an
intent to provide communication among them or avoid
redundant copies. Shared memory is an efficient means of
passing data between programs. Depending on context,
programs may run on a single processor or on multiple
separate processors.
Using memory for communication inside a single program,
e.g. among its multiple threads, is also referred to as
shared memory.
In hardware
In software
In computer software, shared memory is either
a method of inter-process communication (IPC), i.e. a
way of exchanging data between programs running at
the same time. One process will create an area
in RAM which other processes can access;
a method of conserving memory space by directing
accesses to what would ordinarily be copies of a piece of
data to a single instance instead, by using virtual
memory mappings or with explicit support of the program
in question. This is most often used for shared
libraries and for Execute in place (XIP).
Since both processes can access the shared memory area
like regular working memory, this is a very fast way of
communication (as opposed to other mechanisms of IPC
such as named pipes, Unix domain sockets or CORBA). On
the other hand, it is less scalable, as for example the
communicating processes must be running on the same
machine (of other IPC methods, only Internet domain
sockets—not Unix domain sockets—can use a computer
network), and care must be taken to avoid issues if
processes sharing memory are running on separate CPUs
and the underlying architecture is not cache coherent.
IPC by shared memory is used for example to transfer
images between the application and the X server on Unix
systems, or inside the IStream object returned by
CoMarshalInterThreadInterfaceInStream in the COM
libraries under Windows.
Dynamic libraries are generally held in memory once and
mapped to multiple processes, and only pages that had to
be customized for the individual process (because a symbol
resolved differently there) are duplicated, usually with a
mechanism known as copy-on-write that transparently
copies the page when a write is attempted, and then lets
the write succeed on the private copy.
Compared to multiple address space operating systems,
memory sharing -- especially of sharing procedures or
pointer-based structures -- is simpler in single address
space operating systems.[2]