Processes are one of the primary abstractions implemented by the OS. Private virtual address spaces are an important abstraction in multiprogrammed systems, and are one way in which the OS prevents processes from interfering with each other’s execution state. However, sometimes a user or programmer may want their application processes to communicate with each other (or to share some of their execution state with each other) as they run.
Operating systems typically implement support for several types of interprocess communication, or ways in which process can communicate or share their execution state. Signals are a very restricted form of interprocess communication, where one process can send a signal to another process to notify it of some event. Processes can also communicate using message passing in which the OS implements an abstraction of a message communication channel that is used by a process to exchange messages with another process. Finally, the OS may support interprocess communication through shared memory that allows a process to share all or part of its virtual address space with other processes. Processes with shared memory can read or write to addresses in shared space to communicate with each other.