In this section, we explore three different IPC systems. We first cover the POSIX API for shared memory and then discuss message passing in the Mach operating system. We conclude with Windows, which interestingly uses shared memory as a mechanism for providing certain types of message passing.
3.5.1 An Example: POSIX Shared Memory
Several IPC mechanisms are available for POSIX systems, including shared memory and message passing. Here, we explore the POSIX API for shared memory. A process must first create a shared-memory segment using the shmget() system call (shmget() is derived from SHared Memory GET). The following example illustrates the use of shmget(): segment id = shmget(IPC PRIVATE, size, S IRUSR | S IWUSR); This first parameter specifies the key (or identifier) of the shared-memory segment. If this is set to IPC PRIVATE, a newshared-memory segment is created. The second parameter specifies the size (in bytes) of the shared-memory segment. Finally, the third parameter identifies the mode, which indicates how the shared-memory segment is to be used—that is, for reading, writing, or both. By setting the mode to S IRUSR | S IWUSR, we are indicating that the owner may read or write to the shared-memory segment. A successful call to shmget() returns an integer identifier for the shared-memory segment. Other processes that want to use this region of shared memory must specify this identifier. Processes that wish to access a shared-memory segment must attach it to their address space using the shmat() (SHared Memory ATtach) system call. The call to shmat() expects three parameters as well. The first is the integer identifier of the shared-memory segment being attached, and the second is a pointer location in memory indicating where the shared memory will be attached. If we pass a value of NULL, the operating system selects the location on the user’s behalf. The third parameter identifies a flag that allows the shared memory region