SlideShare a Scribd company logo
1 of 68
© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Inter Process Communication
2© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
What to Expect?
W's of Inter Process Communication
Various IPC mechanisms in Linux
Pipes
FIFOs
Message Queues
Shared Memory & Process Semaphores
3© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Why separate IPC mechanisms?
Processes are non-sharing entities
But, we may need communication
Already looked at one mechanism
Signals
But those are very basic
Mostly asynchronous
Connection-less
No data communication
Separate mechanisms are answer to all those
4© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
What is IPC?
Inter Process Communication
Mechanism whereby one process communicates
with another process
Communication = Exchange of Data
Directions
Uni-directional
Bi-directional
Multi-directional
5© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Example for IPC
Print the filenames in a directory
'ls' outputs the filenames
'lpr' prints its input
But ls & lpr are separate processes
What are the solutions?
Put into a file → ls > file; lpr < file
Setup an IPC, say a pipe (|) → ls | lpr
6© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Types of IPC mechanisms
Pipe: Allows the flow of data in one direction only
Named Pipe: Pipe with a specific name
Message Queues: Message passing using a queue
Shared Memory & Semaphore
Shared Memory allows the interchange of data through a defined area
of memory
Semaphore is used in solving problems associated with
synchronization and avoiding race conditions during sharing
Mapped Memory: Similar to shared memory, but use file instead
of memory
Why so many?
Based on the requirements, flexibility & benefits
7© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Pipes
8© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
W's of a Pipe
Connects 2 ends to allow transfer
One-way Serial Communication Channel
One end: Output (write end)
Another end: Input (read end)
Limited Capacity
Provides automatic Synchronization
Read blocks on no data
Write blocks on full data
9© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Pipe Usage
On Shell
Using |
In Programming / C
Creation
Using popen(), pclose()
Using system call pipe()
Communication as with any other fd
Using system calls read(), write(), ...
10© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Pipe in a Process
Pipe Creation: Kernel sets up two file descriptors
1st for Read: Path for obtaining the data
2nd for Write: Path for data input
Pipe to communicate with itself !!!
May be among threads of a process
Process Kernelwrite
read
11© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Making Sense with Pipes
Info: Child process inherits parent's open file
descriptors
This Info + Pipe Creation = IPC within the family
Final Critical Decision
Remember pipes are half-duplex
So, who communicates with whom?
Parent Process Kernel Child Process
in in
outout
12© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Multi-Process Communication
Usual system calls operating on file descriptors
Send data to the pipe: write()
Retrieve data from the pipe: read()
Though calls like lseek(), don't work
Parent Process Kernel Child Process
in
out
write()
read()
13© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Pipes Extras & Limitations
Two-way Pipes
Open two pipes
Assign the file descriptors, appropriately
pipe() call must PRECEDE a call to fork()
Pipes are only for related processes
That is processes with a related ancestry
What about unrelated processes?
There are special type of pipes called ...
14© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
FIFOs
15© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
W's of a FIFO
A Pipe with a name in the file system
Also called Named Pipe
Properties identical to those of a Pipe
including the Serial Communication
which is now termed as First-In-First-Out
Except that now processes can be unrelated
Achieved by it being a device special file
which persists irrespective of Process existence
And any process can operate on it
16© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
FIFO Usage
On Shell
Creation: mknod, or mkfifo
Communication: cat, echo, ...
In Programming / C
Creation
System Call: mknod(), open(), close()
Library Function: mkfifo(), fopen(), fclose()
Communication
System Calls: read(), write(), …
Library Functions: fread(), fwrite, fputs, ...
17© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Experiment on Shell
mkfifo /tmp/fifo
ls -l /tmp/fifo
cat < /tmp/fifo
<See the text>
Open another shell
cat > /tmp/fifo
<Type some text>
rm /tmp/fifo
18© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Programming Examples
With System Calls
Writer: fifo_write.c
Reader: fifo_read.c
With Library Functions
Writer: fifo_client.c
Reader: fifo_server.c
Use a shell for each of reader & writer
19© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Broken Pipe
Typical error condition with pipes
Read terminates while write is still on
Writer receives the signal SIGPIPE
the next time it tries to write()
Default signal handler for SIGPIPE
Prints "Broken Pipe" and exits
Avoid abnormal exit by a user handler
20© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Is FIFO good enough?
As long as FIFO meets our requirements
May not be helpful for
Out-of-order processing
Non-blocking requirements
Large storage communications
Unknown opening/closing sequences
Answer to that is ...
21© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Message Queues
22© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
W's of a Message Queue
Process Communication by means of IPC messages
Message sent goes & stays in an IPC message
queue
until another process reads it
Like FIFOs Unlike FIFOs
Typically follows FIFO Ways to pull certain urgent messages
before they reach the front
Exists independently of both sending &
receiving processes
Always ready - No need to open/close
Data Transfer between unrelated
processes
No synchronization issues between
open & close
23© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Message Queue Usage
Shell Way
Create: ipcmk -Q [ -p <mode> ]
Get Information: ipcs [ -q [ -i id ] ]
Remove: ipcrm [ -Q <msgqkey> | -q <msgqid> ]
Programming Way in C (using sys calls)
Create/Access Message Queue: msgget()
Send Message: msgsnd()
Receive Message: msgrcv()
Other Message Queue Operations: msgctl()
Helper Function: ftok()
24© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Message Queue Operations
Creating / Connecting to Message Queue
int msgget(key_t key, int msg_flg);
Returns
Message Queue id on success
-1 on error (and sets errno)
key: System-wide unique id for a Msg Queue
Process connects to a particular message queue using its
creation key
msg_flg: operation | permissions
IPC_CREATE, IPC_EXCL
25© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
What is key?
key_t = long
Could be any number
But must be system-wide unique
Low probability but what if clashes?
Solutions
Use IPC_PRIVATE as the key
Always creates a new unique message queue (irrespective of flags)
But could be shared only with related processes
Use ftok() to generate the key
key_t ftok(const char *path, int id);
path: process readable file (for inode based info)
id: typically some character like 'A', etc
26© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Typical Message Format
struct msgbuf
{
long mtype; /* > 0 */
char mdata[1];
}
27© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Sending a Message
int msgsnd(int msgq_id, const void *msg_ptr,
size_t msg_sz, int msg_flg);
Returns: 0 on success; -1 on error (and sets errno)
msgq_id: Message Queue id returned by msgget()
msg_ptr: Pointer to the message to be sent
msg_sz: Size of the message data in bytes
msg_flg: Optional flag parameters
IPC_NOWAIT → May return -1 with error EAGAIN
28© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Receiving a Message
int msgrcv(int msgq_id, void *msg_ptr, size_t msg_sz, long int msg_type, int
msg_flg);
Returns
Number of bytes placed in the receive buffer
-1 on error (and sets errno)
msgq_id: Message Queue id returned by msgget()
msg_ptr: Pointer to the buffer for receiving the message
msg_sz: Size of the message data in bytes
msg_type: Allows reception priority implementation
== 0: Normal Operation
> 0: First message with msg_type is retrieved
< 0: First message with msg_type <= | msg_type | is retrieved
msg_flg: Controls behaviour when no matching message is found
IPC_NOWAIT, MSG_EXCEPT, MSG_NOERROR
29© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Message Queue Operations ...
Control Operations on the Message Queue like
Setting Message Queue Size
Deleting a Message Queue
Any many more
int msgctl(int msgq_id, int cmd, struct msqid_ds *buf);
Returns: 0 on success; -1 on error (and sets errno)
msgq_id: Message Queue id returned by msgget()
cmd
IPC_STAT – Get the message queue information into buf
IPC_SET – Set the various message queue info specified by buf
IPC_RMID – Remove the message queue (buf is ignored)
30© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Caution on
Deleting Message Queues
Invoking _exit() or exec* does not do it
Needs explicit removal
Using IPC_RMID cmd of msgctl()
Otherwise, may violate the system limit
Of total number of message queues
31© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Interesting Message Queue DS
struct msqid_ds
{
struct ipc_perm msg_perm; // Ownership & Permissions
time_t msg_stime; // Time of last sent message
time_t msg_rtime; // Time of last received message
time_t msg_ctime; // Time of last change
msgqnum_t msg_qnum; // Message Count in the Queue
msglen_t msg_qbytes; // Maximum Bytes allowed in the Queue
pid_t msg_lspid; // Last Sending Process Id
pid_t msg_lrpid; // Last Receiving Process Id
...
}
32© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Interesting Message Q DS ...
struct ipc_perm
{
key_t __key; // Key supplied to msgget()
uid_t uid; // Effective UID of owner
gid_t gid; // Effective GID of owner
uid_t cuid; // Effective UID of creator
gid_t cgid; // Effective GID of creator
unsigned short mode; // Permissions
...
};
33© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Let's try an Example
Two Programs on Two Shells
msg_send.c
msg_recv.c
Observe the various APIs
And their various invocations
34© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Standard Question
Would Msg Q meet all our requirements?
Obviously not. But what not?
Random Data “Sharing”
Without Data Copying
With Least Overheads
Immediate Change Reflections
That's where we go to the next topic ...
35© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Shared Memory
36© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
W's of Shared Memory
Rawest Communication Mechanism
Piece of Memory which is Shared
Between two or more processes
Fastest form of IPC
As no unnecessary copying of data
And no other overheads – not even synchronization :)
Synchronization is Users responsibility
As desired by him
Process Semaphores is the Mechanism provided
37© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Linux Memory Model
All accesses in Linux are through virtual addresses
Each Process has its “own” Virtual Address Space
Which is split into Virtual Pages
Each Process maintains a mapping table
From its Physical Pages to these Virtual Pages
For access to its actual data
And mappings of multiple processes can point to
the same physical page
Enabling the sharing of “actual” memory
38© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Shared Memory Usage
Shell Way
Create: ipcmk -M <size> [ -p <mode> ]
Get Information: ipcs [ -m [ -i id ] ]
Remove: ipcrm [ -M <shmkey> | -m <shmid> ]
Programming Way in C (using sys calls)
Physical Memory Allocation: shmget()
Mapping / Attaching to Virtual Memory: shmat()
Access through usual (Virtual) Address Dereferencing
Unmapping / Detaching from Virtual Memory: shmdt()
Physical Memory Deallocation & Other Shared Memory
Control Operations: shmctl()
39© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Physical Memory Allocation
Done by only one of the sharing Processes
int shmget(key_t key, size_t size, int shm_flg);
Returns
Shared Memory id on success
-1 on error (and sets errno)
key: System-wide unique id for a Shared Memory
Same as in Message Queue
Process gets a particular shared memory id using its creation key
size: Number of bytes to allocate or get for the shared memory
shm_flg: operation | permissions
IPC_CREATE, IPC_EXCL
40© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Shared Memory Attachment
Mapping to Process Virtual Address Space
Done by all the sharing Processes to Access the Shared Memory
void *shmat(int shm_id, const void *shm_addr, int shm_flg);
Returns
Virtual Start Address of the attached Shared Memory on success
MAP_FAILED i.e. (void *)(-1) on error (and sets errno)
shm_id: Shared Memory id returned by shmget()
shm_addr
Requested process virtual start address
NULL enables Kernel to choose one
shm_flg
SHM_RND: round down shm_addr to a multiple of the page size
SHM_RDONLY: shared memory will be only read, not written
Children created by fork() inherit attached shared segments
41© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Shared Memory Detachment
Unmapping from Process Virtual Address Space
Done by all the Processes, which did attach, or inherit
int shmdt(const void *shm_addr);
Returns: 0 on success; -1 on error (and sets errno)
shm_addr: Process virtual address map returned by
shmat()
Call to _exit() or exec*() automatically detaches
Detachment may deallocate the shared memory
If done by the last process
And already marked to deallocate
42© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Shared Memory Control Ops
Control Operations on the Shared Memory like
Physical Memory Deallocation for Shared Memory
Any others
int shmctl(int shm_id, int cmd, struct shmid_ds *buf);
Returns: 0 on success; -1 on error (and sets errno)
shm_id: Shared Memory id returned by shmget()
cmd
IPC_STAT – Get the shared memory information into buf
IPC_SET – Set the various shared memory info specified by buf
IPC_RMID – (Mark) Deallocate the physical memory (buf is
ignored)
43© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Caution on
Deallocating Shared Memory
Invoking _exit() or exec* does not do it
Needs explicit deallocation
Using IPC_RMID cmd of shmctl()
Otherwise, may violate the system limit
Of total number of shared memory segments
44© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Interesting Shared Memory DS
struct shmid_ds
{
struct ipc_perm shm_perm; // Ownership & Permissions
size_t shm_segsz; // Size of shared memory in bytes
time_t shm_atime; // Time of last attach
time_t shm_dtime; // Time of last detach
time_t shm_ctime; // Time of last change
pid_t shm_cpid; // Creator Process Id
pid_t shm_lpid; // Last Attaching/Detaching Process Id
shmatt_t shm_nattch; // Number of current attaches
...
}
45© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Let's try an Example
Two Programs on Two Shells
shm_write.c
shm_read.c
Observe the various APIs
And their various invocations
46© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Need for Synchronization
We already talked
Shared Memory has no Access Coordination
It has to be handled by us – the User
Moreover, now we observed
The issue with the Example
So, now its time to look into resolving it
That's where we go to the next topic ...
47© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Process Semaphores
48© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
W's of Process Semaphores
First, it isn't any form of IPC
But a mechanism for synchronization used by IPCs
Counter used to provide synchronized access
To a shared data object for multiple processes
Variable protected by Kernel
No direct access by the user
Counter
> 0 → Resource is available
== 0 → Resource is busy / in use
< 0 → Should never happen
49© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Typical Semaphore Usage
Semaphore ↔ Shared Resource
Accessing the Shared Resource
Check semaphore value
> 0 (Available) → Decrement by 1
== 0 (Busy) → Sleep until it is > 0 (and repeat check)
Access the Shared Resource
Once done, increment the semaphore value
At this point, sleeping processes are wakened up
For this to work correctly
Check (Test) & Decrement (Set) has to be atomic
A typical processor instruction available in Kernel
50© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Specialized Semaphores
Binary semaphore
Semaphore controlling a single resource “availability”
Possible values
0 → Unavailable
1 → Available
Typically initialized to 0
Mutex
Specialized Binary Semaphore
Used for a “Usable” rather than a “Consumable” Resource
Process using it, only releases it
Giving a notion of ownership
Typically initialized to 1
51© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Process Semaphore Usage
Shell Way
Create: ipcmk -S <nsems> [ -p <mode> ]
Get Information: ipcs [ -s [ -i id ] ]
Remove: ipcrm [ -S <semkey> | -s <semid> ]
Programming Way in C (using sys calls)
Semaphore Allocation/Access: semget()
Semaphore Deallocation & Other Semaphore Control
Operations: semctl()
Semaphore Usage Operations: semop()
52© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Process Semaphore Allocation
Done by all of the sharing Processes
int semget(key_t key, int nsems, int sem_flg);
Returns
Semaphore Array id on success
-1 on error (and sets errno)
key: System-wide unique id for a Semaphore Array
Same as in Message Queue & Shared Memory
Process gets access to a particular semaphore array using its creation
key
nsems: Number of semaphores to create or access in the Array
sem_flg: operation | permissions
IPC_CREATE, IPC_EXCL
53© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Semaphore Control Ops
Control Operations on the Semaphore like
Deleting a Semaphore Array
Any many more
int semctl(int sem_id, int sem_num, int cmd, ...);
Returns: 0 on success; -1 on error (and sets errno)
sem_id: Semaphore Array id returned by semget()
sem_num: Index of semaphore in the array
cmd
IPC_STAT – Get the semaphore information array into optional arg (sem_num is ignored)
IPC_SET – Set the various semaphore array info specified by optional arg (sem_num is
ignored)
IPC_RMID – Remove the semaphore array (sem_num is ignored)
SETVAL – Set sem_num'th semaphore value as specified by optional arg
...
54© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
The Optional Argument
union semun
{
int val; // Value for SETVAL
struct semid_ds *buf; // Buffer for IPC_STAT & IPC_SET
unsigned short *array; // Array for GETALL, SETALL
…
}
struct semid_ds
{
struct ipc_perm sem_perm; // Ownership & Permissions
time_t sem_otime; // Time of last semop
time_t sem_ctime; // Time of last change
unsigned short sem_nsems; // No of semaphores in the array
}
55© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Caution on
Deleting Process Semaphores
Invoking _exit() or exec* does not do it
Needs explicit removal
Using IPC_RMID cmd of semctl()
Otherwise, may violate the system limit
Of total number of process semaphores
56© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Initializing Process Semaphores
Two ways though both using semctl()
Initializing all in the array
cmd = SETALL
arg.array = Array of values to be set
Initializing one at time
sem_num = Semaphore number to be initialized
cmd = SETVAL
arg.val = Value to be set
57© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Semaphore Usage Ops
Usage Operations on the Semaphore like
Increment, Decrement, …
int semop(int sem_id, struct sembuf *sops, unsigned int nsops);
Returns: 0 on success; -1 on error (and sets errno)
sem_id
Semaphore Array id returned by semget()
sops
Array of operations to be performed
nsops
Number of elements in sops
58© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Operation Structure Decoded
struct sembuf
{
unsigned short sem_num; // Index of semaphore to be operated on
short sem_op; // Value to be added to the current semaphore value
short sem_flg; // Operation flags
}
Operation Specifics
sem_op > 0 → Value added & Processes waiting on it are signaled
sem_op < 0 and current semaphore value >= | sem_op | → Value added
sem_op < 0 and current semaphore value < | sem_op |
It would block / wait until the semaphore value becomes >= | sem_op |
Operation Flags
IPC_NOWAIT – Prevents the operation from blocking
Returns -1 with EAGAIN in the above blocking case
SEM_UNDO – Kernel automatically undoes the semaphore operation on process exit
59© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Let's try an Example
Two Programs on Two Shells
sem_one.c
sem_two.c
IPC used: Shared Memory
Observe the various APIs
And their various invocations
60© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Mapped Memory
61© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
W's of Mapped Memory
Shared Memory variant
Uses a shared disk file instead of shared physical memory
So, got a name in the File System like Named Pipes
Forms an association between a file and a process’s memory
So, the file’s contents are accessed like ordinary memory
How does it work?
It's like allocating a buffer to hold a file’s entire contents
Then, Reading the file into that buffer for access as memory
And, Writing the buffer back to the file, afterwards, if modified
Advantages & Usage
Fast Access to Files: Specially read
Program Loader is one of its popular user
62© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Memory Mapping a File
Done using the mmap() system call
void *mmap(void *addr, size_t len, int prot, int flags, int fd, off_t off);
Returns
Virtual Start Address of the mapped memory on success
MAP_FAILED i.e. (void *)(-1) on error (and sets errno)
addr (must be page aligned)
Requested process virtual start address for the mapping
NULL enables Kernel to choose one
len: Length of the map in bytes
prot: Protection on the mapped address range
PROT_READ, PROT_WRITE, PROT_EXEC (bitwise ORed), PROT_NONE
flags: Additional options (bitwise ORed)
fd: Open file descriptor of the file to be mapped
off: Offset in the file from where to map
63© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Interesting Flags for Mapping
MAP_FIXED: Use the “addr” to map the file or fail
MAP_PRIVATE: No write through to the actual file
MAP_SHARED
Complement of MAP_PRIVATE
Writes are immediately reflected in the underlying file
Useful as an IPC
MAP_ANONYMOUS (Shared memory between related processes)
Mapping not backed by any file. fd & off are ignored
Contents initialized to zero
MAP_LOCKED: Lock the region as by mlock()
MAP_NORESERVE: No swap reservation
Might lead to SIGSEGV on write, if no physical memory is available
64© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Cleaning Up the Act
Once done using the memory map, release it by
using munmap()
int munmap(void *addr, size_t length);
addr: Virtual Start Address returned by mmap()
length: Length of the mapped memory region
Even otherwise the Kernel automatically unmaps
mapped regions on process termination using
_exit() or exec*() calls
65© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Let's try an Example
Two Programs on Two Shells
mmap1.c
mmap2.c
66© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Map Access Synchronization
Synchronization Issues
Exist with Access of Mapped Memory
Similar to the Shared Memory case
Hence, similarly
User need to take care of it
Process Semaphores may be used
67© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
What all have we learnt?
W's of Inter Process Communication
Various IPC mechanisms in Linux
Pipes
FIFOs: Named Pipes
Message Queues
Shared & Mapped Memories
IPC Synchronization using
Process Semaphores
68© 2010-15 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Any Queries?

More Related Content

What's hot (20)

Process management os concept
Process management os conceptProcess management os concept
Process management os concept
 
Linux file system
Linux file systemLinux file system
Linux file system
 
System calls
System callsSystem calls
System calls
 
operating system structure
operating system structureoperating system structure
operating system structure
 
INTER PROCESS COMMUNICATION (IPC).pptx
INTER PROCESS COMMUNICATION (IPC).pptxINTER PROCESS COMMUNICATION (IPC).pptx
INTER PROCESS COMMUNICATION (IPC).pptx
 
Deadlock ppt
Deadlock ppt Deadlock ppt
Deadlock ppt
 
Inter Process Communication
Inter Process CommunicationInter Process Communication
Inter Process Communication
 
Cpu scheduling in operating System.
Cpu scheduling in operating System.Cpu scheduling in operating System.
Cpu scheduling in operating System.
 
Os unit 3 , process management
Os unit 3 , process managementOs unit 3 , process management
Os unit 3 , process management
 
Processes and threads
Processes and threadsProcesses and threads
Processes and threads
 
Deadlock Avoidance - OS
Deadlock Avoidance - OSDeadlock Avoidance - OS
Deadlock Avoidance - OS
 
Evolution of os
Evolution of osEvolution of os
Evolution of os
 
Semophores and it's types
Semophores and it's typesSemophores and it's types
Semophores and it's types
 
OS - Process Concepts
OS - Process ConceptsOS - Process Concepts
OS - Process Concepts
 
Os Threads
Os ThreadsOs Threads
Os Threads
 
Distributed Operating System_1
Distributed Operating System_1Distributed Operating System_1
Distributed Operating System_1
 
Message passing ( in computer science)
Message   passing  ( in   computer  science)Message   passing  ( in   computer  science)
Message passing ( in computer science)
 
directory structure and file system mounting
directory structure and file system mountingdirectory structure and file system mounting
directory structure and file system mounting
 
Socket Programming
Socket ProgrammingSocket Programming
Socket Programming
 
Semaphores
SemaphoresSemaphores
Semaphores
 

Viewers also liked

Inter process communication using Linux System Calls
Inter process communication using Linux System CallsInter process communication using Linux System Calls
Inter process communication using Linux System Callsjyoti9vssut
 
Sockets in unix
Sockets in unixSockets in unix
Sockets in unixswtjerin4u
 
Sun RPC (Remote Procedure Call)
Sun RPC (Remote Procedure Call)Sun RPC (Remote Procedure Call)
Sun RPC (Remote Procedure Call)Peter R. Egli
 
Remote procedure call on client server computing
Remote procedure call on client server computingRemote procedure call on client server computing
Remote procedure call on client server computingSatya P. Joshi
 
Rpc (Distributed computing)
Rpc (Distributed computing)Rpc (Distributed computing)
Rpc (Distributed computing)Sri Prasanna
 
RPC: Remote procedure call
RPC: Remote procedure callRPC: Remote procedure call
RPC: Remote procedure callSunita Sahu
 
Introduction to Remote Procedure Call
Introduction to Remote Procedure CallIntroduction to Remote Procedure Call
Introduction to Remote Procedure CallAbdelrahman Al-Ogail
 
Mobile Ad hoc Networks
Mobile Ad hoc NetworksMobile Ad hoc Networks
Mobile Ad hoc NetworksJagdeep Singh
 
Threads (operating System)
Threads (operating System)Threads (operating System)
Threads (operating System)Prakhar Maurya
 
remote procedure calls
  remote procedure calls  remote procedure calls
remote procedure callsAshish Kumar
 
Operating System-Threads-Galvin
Operating System-Threads-GalvinOperating System-Threads-Galvin
Operating System-Threads-GalvinSonali Chauhan
 
Interprocess Communication
Interprocess CommunicationInterprocess Communication
Interprocess CommunicationDeepak H L
 

Viewers also liked (19)

Inter process communication using Linux System Calls
Inter process communication using Linux System CallsInter process communication using Linux System Calls
Inter process communication using Linux System Calls
 
Sockets in unix
Sockets in unixSockets in unix
Sockets in unix
 
Sun RPC (Remote Procedure Call)
Sun RPC (Remote Procedure Call)Sun RPC (Remote Procedure Call)
Sun RPC (Remote Procedure Call)
 
Remote procedure call on client server computing
Remote procedure call on client server computingRemote procedure call on client server computing
Remote procedure call on client server computing
 
Rpc (Distributed computing)
Rpc (Distributed computing)Rpc (Distributed computing)
Rpc (Distributed computing)
 
RPC: Remote procedure call
RPC: Remote procedure callRPC: Remote procedure call
RPC: Remote procedure call
 
Ipc ppt
Ipc pptIpc ppt
Ipc ppt
 
Introduction to Remote Procedure Call
Introduction to Remote Procedure CallIntroduction to Remote Procedure Call
Introduction to Remote Procedure Call
 
Process scheduling
Process schedulingProcess scheduling
Process scheduling
 
5 Process Scheduling
5 Process Scheduling5 Process Scheduling
5 Process Scheduling
 
Process Scheduling
Process SchedulingProcess Scheduling
Process Scheduling
 
Mobile Ad hoc Networks
Mobile Ad hoc NetworksMobile Ad hoc Networks
Mobile Ad hoc Networks
 
RPC
RPCRPC
RPC
 
Threads (operating System)
Threads (operating System)Threads (operating System)
Threads (operating System)
 
remote procedure calls
  remote procedure calls  remote procedure calls
remote procedure calls
 
Process scheduling
Process schedulingProcess scheduling
Process scheduling
 
Operating System-Threads-Galvin
Operating System-Threads-GalvinOperating System-Threads-Galvin
Operating System-Threads-Galvin
 
Process Scheduling
Process SchedulingProcess Scheduling
Process Scheduling
 
Interprocess Communication
Interprocess CommunicationInterprocess Communication
Interprocess Communication
 

Similar to Inter Process Communication

Similar to Inter Process Communication (20)

Linux Network Management
Linux Network ManagementLinux Network Management
Linux Network Management
 
ipc.pptx
ipc.pptxipc.pptx
ipc.pptx
 
Network Drivers
Network DriversNetwork Drivers
Network Drivers
 
Processes
ProcessesProcesses
Processes
 
Introduction to Linux
Introduction to LinuxIntroduction to Linux
Introduction to Linux
 
System Calls
System CallsSystem Calls
System Calls
 
OSLec 4& 5(Processesinoperatingsystem).ppt
OSLec 4& 5(Processesinoperatingsystem).pptOSLec 4& 5(Processesinoperatingsystem).ppt
OSLec 4& 5(Processesinoperatingsystem).ppt
 
Introduction to Linux
Introduction to LinuxIntroduction to Linux
Introduction to Linux
 
Ch03
Ch03Ch03
Ch03
 
Chapter 3 - Processes
Chapter 3 - ProcessesChapter 3 - Processes
Chapter 3 - Processes
 
IPC mechanisms in windows
IPC mechanisms in windowsIPC mechanisms in windows
IPC mechanisms in windows
 
Activity 5
Activity 5Activity 5
Activity 5
 
Threads
ThreadsThreads
Threads
 
Distributed Memory Programming with MPI
Distributed Memory Programming with MPIDistributed Memory Programming with MPI
Distributed Memory Programming with MPI
 
Processes
ProcessesProcesses
Processes
 
Socket Programming TCP:IP PPT.pdf
Socket Programming TCP:IP PPT.pdfSocket Programming TCP:IP PPT.pdf
Socket Programming TCP:IP PPT.pdf
 
Linux Internals Part - 3
Linux Internals Part - 3Linux Internals Part - 3
Linux Internals Part - 3
 
Operating Systems
Operating SystemsOperating Systems
Operating Systems
 
Krzysztof Mazepa - Netflow/cflow - ulubionym narzędziem operatorów SP
Krzysztof Mazepa - Netflow/cflow - ulubionym narzędziem operatorów SPKrzysztof Mazepa - Netflow/cflow - ulubionym narzędziem operatorów SP
Krzysztof Mazepa - Netflow/cflow - ulubionym narzędziem operatorów SP
 
RTOS implementation
RTOS implementationRTOS implementation
RTOS implementation
 

More from Anil Kumar Pugalia (20)

File System Modules
File System ModulesFile System Modules
File System Modules
 
Kernel Debugging & Profiling
Kernel Debugging & ProfilingKernel Debugging & Profiling
Kernel Debugging & Profiling
 
System Calls
System CallsSystem Calls
System Calls
 
Embedded C
Embedded CEmbedded C
Embedded C
 
Embedded Software Design
Embedded Software DesignEmbedded Software Design
Embedded Software Design
 
Playing with R L C Circuits
Playing with R L C CircuitsPlaying with R L C Circuits
Playing with R L C Circuits
 
Audio Drivers
Audio DriversAudio Drivers
Audio Drivers
 
Video Drivers
Video DriversVideo Drivers
Video Drivers
 
Mobile Hacking using Linux Drivers
Mobile Hacking using Linux DriversMobile Hacking using Linux Drivers
Mobile Hacking using Linux Drivers
 
Shell Scripting
Shell ScriptingShell Scripting
Shell Scripting
 
References
ReferencesReferences
References
 
Functional Programming with LISP
Functional Programming with LISPFunctional Programming with LISP
Functional Programming with LISP
 
Power of vi
Power of viPower of vi
Power of vi
 
gcc and friends
gcc and friendsgcc and friends
gcc and friends
 
"make" system
"make" system"make" system
"make" system
 
Hardware Design for Software Hackers
Hardware Design for Software HackersHardware Design for Software Hackers
Hardware Design for Software Hackers
 
RPM Building
RPM BuildingRPM Building
RPM Building
 
Linux User Space Debugging & Profiling
Linux User Space Debugging & ProfilingLinux User Space Debugging & Profiling
Linux User Space Debugging & Profiling
 
Timers
TimersTimers
Timers
 
Synchronization
SynchronizationSynchronization
Synchronization
 

Recently uploaded

08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilV3cube
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 

Recently uploaded (20)

08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 

Inter Process Communication

  • 1. © 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Inter Process Communication
  • 2. 2© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. What to Expect? W's of Inter Process Communication Various IPC mechanisms in Linux Pipes FIFOs Message Queues Shared Memory & Process Semaphores
  • 3. 3© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Why separate IPC mechanisms? Processes are non-sharing entities But, we may need communication Already looked at one mechanism Signals But those are very basic Mostly asynchronous Connection-less No data communication Separate mechanisms are answer to all those
  • 4. 4© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. What is IPC? Inter Process Communication Mechanism whereby one process communicates with another process Communication = Exchange of Data Directions Uni-directional Bi-directional Multi-directional
  • 5. 5© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Example for IPC Print the filenames in a directory 'ls' outputs the filenames 'lpr' prints its input But ls & lpr are separate processes What are the solutions? Put into a file → ls > file; lpr < file Setup an IPC, say a pipe (|) → ls | lpr
  • 6. 6© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Types of IPC mechanisms Pipe: Allows the flow of data in one direction only Named Pipe: Pipe with a specific name Message Queues: Message passing using a queue Shared Memory & Semaphore Shared Memory allows the interchange of data through a defined area of memory Semaphore is used in solving problems associated with synchronization and avoiding race conditions during sharing Mapped Memory: Similar to shared memory, but use file instead of memory Why so many? Based on the requirements, flexibility & benefits
  • 7. 7© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Pipes
  • 8. 8© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. W's of a Pipe Connects 2 ends to allow transfer One-way Serial Communication Channel One end: Output (write end) Another end: Input (read end) Limited Capacity Provides automatic Synchronization Read blocks on no data Write blocks on full data
  • 9. 9© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Pipe Usage On Shell Using | In Programming / C Creation Using popen(), pclose() Using system call pipe() Communication as with any other fd Using system calls read(), write(), ...
  • 10. 10© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Pipe in a Process Pipe Creation: Kernel sets up two file descriptors 1st for Read: Path for obtaining the data 2nd for Write: Path for data input Pipe to communicate with itself !!! May be among threads of a process Process Kernelwrite read
  • 11. 11© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Making Sense with Pipes Info: Child process inherits parent's open file descriptors This Info + Pipe Creation = IPC within the family Final Critical Decision Remember pipes are half-duplex So, who communicates with whom? Parent Process Kernel Child Process in in outout
  • 12. 12© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Multi-Process Communication Usual system calls operating on file descriptors Send data to the pipe: write() Retrieve data from the pipe: read() Though calls like lseek(), don't work Parent Process Kernel Child Process in out write() read()
  • 13. 13© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Pipes Extras & Limitations Two-way Pipes Open two pipes Assign the file descriptors, appropriately pipe() call must PRECEDE a call to fork() Pipes are only for related processes That is processes with a related ancestry What about unrelated processes? There are special type of pipes called ...
  • 14. 14© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. FIFOs
  • 15. 15© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. W's of a FIFO A Pipe with a name in the file system Also called Named Pipe Properties identical to those of a Pipe including the Serial Communication which is now termed as First-In-First-Out Except that now processes can be unrelated Achieved by it being a device special file which persists irrespective of Process existence And any process can operate on it
  • 16. 16© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. FIFO Usage On Shell Creation: mknod, or mkfifo Communication: cat, echo, ... In Programming / C Creation System Call: mknod(), open(), close() Library Function: mkfifo(), fopen(), fclose() Communication System Calls: read(), write(), … Library Functions: fread(), fwrite, fputs, ...
  • 17. 17© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Experiment on Shell mkfifo /tmp/fifo ls -l /tmp/fifo cat < /tmp/fifo <See the text> Open another shell cat > /tmp/fifo <Type some text> rm /tmp/fifo
  • 18. 18© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Programming Examples With System Calls Writer: fifo_write.c Reader: fifo_read.c With Library Functions Writer: fifo_client.c Reader: fifo_server.c Use a shell for each of reader & writer
  • 19. 19© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Broken Pipe Typical error condition with pipes Read terminates while write is still on Writer receives the signal SIGPIPE the next time it tries to write() Default signal handler for SIGPIPE Prints "Broken Pipe" and exits Avoid abnormal exit by a user handler
  • 20. 20© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Is FIFO good enough? As long as FIFO meets our requirements May not be helpful for Out-of-order processing Non-blocking requirements Large storage communications Unknown opening/closing sequences Answer to that is ...
  • 21. 21© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Message Queues
  • 22. 22© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. W's of a Message Queue Process Communication by means of IPC messages Message sent goes & stays in an IPC message queue until another process reads it Like FIFOs Unlike FIFOs Typically follows FIFO Ways to pull certain urgent messages before they reach the front Exists independently of both sending & receiving processes Always ready - No need to open/close Data Transfer between unrelated processes No synchronization issues between open & close
  • 23. 23© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Message Queue Usage Shell Way Create: ipcmk -Q [ -p <mode> ] Get Information: ipcs [ -q [ -i id ] ] Remove: ipcrm [ -Q <msgqkey> | -q <msgqid> ] Programming Way in C (using sys calls) Create/Access Message Queue: msgget() Send Message: msgsnd() Receive Message: msgrcv() Other Message Queue Operations: msgctl() Helper Function: ftok()
  • 24. 24© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Message Queue Operations Creating / Connecting to Message Queue int msgget(key_t key, int msg_flg); Returns Message Queue id on success -1 on error (and sets errno) key: System-wide unique id for a Msg Queue Process connects to a particular message queue using its creation key msg_flg: operation | permissions IPC_CREATE, IPC_EXCL
  • 25. 25© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. What is key? key_t = long Could be any number But must be system-wide unique Low probability but what if clashes? Solutions Use IPC_PRIVATE as the key Always creates a new unique message queue (irrespective of flags) But could be shared only with related processes Use ftok() to generate the key key_t ftok(const char *path, int id); path: process readable file (for inode based info) id: typically some character like 'A', etc
  • 26. 26© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Typical Message Format struct msgbuf { long mtype; /* > 0 */ char mdata[1]; }
  • 27. 27© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Sending a Message int msgsnd(int msgq_id, const void *msg_ptr, size_t msg_sz, int msg_flg); Returns: 0 on success; -1 on error (and sets errno) msgq_id: Message Queue id returned by msgget() msg_ptr: Pointer to the message to be sent msg_sz: Size of the message data in bytes msg_flg: Optional flag parameters IPC_NOWAIT → May return -1 with error EAGAIN
  • 28. 28© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Receiving a Message int msgrcv(int msgq_id, void *msg_ptr, size_t msg_sz, long int msg_type, int msg_flg); Returns Number of bytes placed in the receive buffer -1 on error (and sets errno) msgq_id: Message Queue id returned by msgget() msg_ptr: Pointer to the buffer for receiving the message msg_sz: Size of the message data in bytes msg_type: Allows reception priority implementation == 0: Normal Operation > 0: First message with msg_type is retrieved < 0: First message with msg_type <= | msg_type | is retrieved msg_flg: Controls behaviour when no matching message is found IPC_NOWAIT, MSG_EXCEPT, MSG_NOERROR
  • 29. 29© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Message Queue Operations ... Control Operations on the Message Queue like Setting Message Queue Size Deleting a Message Queue Any many more int msgctl(int msgq_id, int cmd, struct msqid_ds *buf); Returns: 0 on success; -1 on error (and sets errno) msgq_id: Message Queue id returned by msgget() cmd IPC_STAT – Get the message queue information into buf IPC_SET – Set the various message queue info specified by buf IPC_RMID – Remove the message queue (buf is ignored)
  • 30. 30© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Caution on Deleting Message Queues Invoking _exit() or exec* does not do it Needs explicit removal Using IPC_RMID cmd of msgctl() Otherwise, may violate the system limit Of total number of message queues
  • 31. 31© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Interesting Message Queue DS struct msqid_ds { struct ipc_perm msg_perm; // Ownership & Permissions time_t msg_stime; // Time of last sent message time_t msg_rtime; // Time of last received message time_t msg_ctime; // Time of last change msgqnum_t msg_qnum; // Message Count in the Queue msglen_t msg_qbytes; // Maximum Bytes allowed in the Queue pid_t msg_lspid; // Last Sending Process Id pid_t msg_lrpid; // Last Receiving Process Id ... }
  • 32. 32© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Interesting Message Q DS ... struct ipc_perm { key_t __key; // Key supplied to msgget() uid_t uid; // Effective UID of owner gid_t gid; // Effective GID of owner uid_t cuid; // Effective UID of creator gid_t cgid; // Effective GID of creator unsigned short mode; // Permissions ... };
  • 33. 33© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Let's try an Example Two Programs on Two Shells msg_send.c msg_recv.c Observe the various APIs And their various invocations
  • 34. 34© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Standard Question Would Msg Q meet all our requirements? Obviously not. But what not? Random Data “Sharing” Without Data Copying With Least Overheads Immediate Change Reflections That's where we go to the next topic ...
  • 35. 35© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Shared Memory
  • 36. 36© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. W's of Shared Memory Rawest Communication Mechanism Piece of Memory which is Shared Between two or more processes Fastest form of IPC As no unnecessary copying of data And no other overheads – not even synchronization :) Synchronization is Users responsibility As desired by him Process Semaphores is the Mechanism provided
  • 37. 37© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Linux Memory Model All accesses in Linux are through virtual addresses Each Process has its “own” Virtual Address Space Which is split into Virtual Pages Each Process maintains a mapping table From its Physical Pages to these Virtual Pages For access to its actual data And mappings of multiple processes can point to the same physical page Enabling the sharing of “actual” memory
  • 38. 38© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Shared Memory Usage Shell Way Create: ipcmk -M <size> [ -p <mode> ] Get Information: ipcs [ -m [ -i id ] ] Remove: ipcrm [ -M <shmkey> | -m <shmid> ] Programming Way in C (using sys calls) Physical Memory Allocation: shmget() Mapping / Attaching to Virtual Memory: shmat() Access through usual (Virtual) Address Dereferencing Unmapping / Detaching from Virtual Memory: shmdt() Physical Memory Deallocation & Other Shared Memory Control Operations: shmctl()
  • 39. 39© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Physical Memory Allocation Done by only one of the sharing Processes int shmget(key_t key, size_t size, int shm_flg); Returns Shared Memory id on success -1 on error (and sets errno) key: System-wide unique id for a Shared Memory Same as in Message Queue Process gets a particular shared memory id using its creation key size: Number of bytes to allocate or get for the shared memory shm_flg: operation | permissions IPC_CREATE, IPC_EXCL
  • 40. 40© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Shared Memory Attachment Mapping to Process Virtual Address Space Done by all the sharing Processes to Access the Shared Memory void *shmat(int shm_id, const void *shm_addr, int shm_flg); Returns Virtual Start Address of the attached Shared Memory on success MAP_FAILED i.e. (void *)(-1) on error (and sets errno) shm_id: Shared Memory id returned by shmget() shm_addr Requested process virtual start address NULL enables Kernel to choose one shm_flg SHM_RND: round down shm_addr to a multiple of the page size SHM_RDONLY: shared memory will be only read, not written Children created by fork() inherit attached shared segments
  • 41. 41© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Shared Memory Detachment Unmapping from Process Virtual Address Space Done by all the Processes, which did attach, or inherit int shmdt(const void *shm_addr); Returns: 0 on success; -1 on error (and sets errno) shm_addr: Process virtual address map returned by shmat() Call to _exit() or exec*() automatically detaches Detachment may deallocate the shared memory If done by the last process And already marked to deallocate
  • 42. 42© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Shared Memory Control Ops Control Operations on the Shared Memory like Physical Memory Deallocation for Shared Memory Any others int shmctl(int shm_id, int cmd, struct shmid_ds *buf); Returns: 0 on success; -1 on error (and sets errno) shm_id: Shared Memory id returned by shmget() cmd IPC_STAT – Get the shared memory information into buf IPC_SET – Set the various shared memory info specified by buf IPC_RMID – (Mark) Deallocate the physical memory (buf is ignored)
  • 43. 43© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Caution on Deallocating Shared Memory Invoking _exit() or exec* does not do it Needs explicit deallocation Using IPC_RMID cmd of shmctl() Otherwise, may violate the system limit Of total number of shared memory segments
  • 44. 44© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Interesting Shared Memory DS struct shmid_ds { struct ipc_perm shm_perm; // Ownership & Permissions size_t shm_segsz; // Size of shared memory in bytes time_t shm_atime; // Time of last attach time_t shm_dtime; // Time of last detach time_t shm_ctime; // Time of last change pid_t shm_cpid; // Creator Process Id pid_t shm_lpid; // Last Attaching/Detaching Process Id shmatt_t shm_nattch; // Number of current attaches ... }
  • 45. 45© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Let's try an Example Two Programs on Two Shells shm_write.c shm_read.c Observe the various APIs And their various invocations
  • 46. 46© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Need for Synchronization We already talked Shared Memory has no Access Coordination It has to be handled by us – the User Moreover, now we observed The issue with the Example So, now its time to look into resolving it That's where we go to the next topic ...
  • 47. 47© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Process Semaphores
  • 48. 48© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. W's of Process Semaphores First, it isn't any form of IPC But a mechanism for synchronization used by IPCs Counter used to provide synchronized access To a shared data object for multiple processes Variable protected by Kernel No direct access by the user Counter > 0 → Resource is available == 0 → Resource is busy / in use < 0 → Should never happen
  • 49. 49© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Typical Semaphore Usage Semaphore ↔ Shared Resource Accessing the Shared Resource Check semaphore value > 0 (Available) → Decrement by 1 == 0 (Busy) → Sleep until it is > 0 (and repeat check) Access the Shared Resource Once done, increment the semaphore value At this point, sleeping processes are wakened up For this to work correctly Check (Test) & Decrement (Set) has to be atomic A typical processor instruction available in Kernel
  • 50. 50© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Specialized Semaphores Binary semaphore Semaphore controlling a single resource “availability” Possible values 0 → Unavailable 1 → Available Typically initialized to 0 Mutex Specialized Binary Semaphore Used for a “Usable” rather than a “Consumable” Resource Process using it, only releases it Giving a notion of ownership Typically initialized to 1
  • 51. 51© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Process Semaphore Usage Shell Way Create: ipcmk -S <nsems> [ -p <mode> ] Get Information: ipcs [ -s [ -i id ] ] Remove: ipcrm [ -S <semkey> | -s <semid> ] Programming Way in C (using sys calls) Semaphore Allocation/Access: semget() Semaphore Deallocation & Other Semaphore Control Operations: semctl() Semaphore Usage Operations: semop()
  • 52. 52© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Process Semaphore Allocation Done by all of the sharing Processes int semget(key_t key, int nsems, int sem_flg); Returns Semaphore Array id on success -1 on error (and sets errno) key: System-wide unique id for a Semaphore Array Same as in Message Queue & Shared Memory Process gets access to a particular semaphore array using its creation key nsems: Number of semaphores to create or access in the Array sem_flg: operation | permissions IPC_CREATE, IPC_EXCL
  • 53. 53© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Semaphore Control Ops Control Operations on the Semaphore like Deleting a Semaphore Array Any many more int semctl(int sem_id, int sem_num, int cmd, ...); Returns: 0 on success; -1 on error (and sets errno) sem_id: Semaphore Array id returned by semget() sem_num: Index of semaphore in the array cmd IPC_STAT – Get the semaphore information array into optional arg (sem_num is ignored) IPC_SET – Set the various semaphore array info specified by optional arg (sem_num is ignored) IPC_RMID – Remove the semaphore array (sem_num is ignored) SETVAL – Set sem_num'th semaphore value as specified by optional arg ...
  • 54. 54© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. The Optional Argument union semun { int val; // Value for SETVAL struct semid_ds *buf; // Buffer for IPC_STAT & IPC_SET unsigned short *array; // Array for GETALL, SETALL … } struct semid_ds { struct ipc_perm sem_perm; // Ownership & Permissions time_t sem_otime; // Time of last semop time_t sem_ctime; // Time of last change unsigned short sem_nsems; // No of semaphores in the array }
  • 55. 55© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Caution on Deleting Process Semaphores Invoking _exit() or exec* does not do it Needs explicit removal Using IPC_RMID cmd of semctl() Otherwise, may violate the system limit Of total number of process semaphores
  • 56. 56© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Initializing Process Semaphores Two ways though both using semctl() Initializing all in the array cmd = SETALL arg.array = Array of values to be set Initializing one at time sem_num = Semaphore number to be initialized cmd = SETVAL arg.val = Value to be set
  • 57. 57© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Semaphore Usage Ops Usage Operations on the Semaphore like Increment, Decrement, … int semop(int sem_id, struct sembuf *sops, unsigned int nsops); Returns: 0 on success; -1 on error (and sets errno) sem_id Semaphore Array id returned by semget() sops Array of operations to be performed nsops Number of elements in sops
  • 58. 58© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Operation Structure Decoded struct sembuf { unsigned short sem_num; // Index of semaphore to be operated on short sem_op; // Value to be added to the current semaphore value short sem_flg; // Operation flags } Operation Specifics sem_op > 0 → Value added & Processes waiting on it are signaled sem_op < 0 and current semaphore value >= | sem_op | → Value added sem_op < 0 and current semaphore value < | sem_op | It would block / wait until the semaphore value becomes >= | sem_op | Operation Flags IPC_NOWAIT – Prevents the operation from blocking Returns -1 with EAGAIN in the above blocking case SEM_UNDO – Kernel automatically undoes the semaphore operation on process exit
  • 59. 59© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Let's try an Example Two Programs on Two Shells sem_one.c sem_two.c IPC used: Shared Memory Observe the various APIs And their various invocations
  • 60. 60© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Mapped Memory
  • 61. 61© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. W's of Mapped Memory Shared Memory variant Uses a shared disk file instead of shared physical memory So, got a name in the File System like Named Pipes Forms an association between a file and a process’s memory So, the file’s contents are accessed like ordinary memory How does it work? It's like allocating a buffer to hold a file’s entire contents Then, Reading the file into that buffer for access as memory And, Writing the buffer back to the file, afterwards, if modified Advantages & Usage Fast Access to Files: Specially read Program Loader is one of its popular user
  • 62. 62© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Memory Mapping a File Done using the mmap() system call void *mmap(void *addr, size_t len, int prot, int flags, int fd, off_t off); Returns Virtual Start Address of the mapped memory on success MAP_FAILED i.e. (void *)(-1) on error (and sets errno) addr (must be page aligned) Requested process virtual start address for the mapping NULL enables Kernel to choose one len: Length of the map in bytes prot: Protection on the mapped address range PROT_READ, PROT_WRITE, PROT_EXEC (bitwise ORed), PROT_NONE flags: Additional options (bitwise ORed) fd: Open file descriptor of the file to be mapped off: Offset in the file from where to map
  • 63. 63© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Interesting Flags for Mapping MAP_FIXED: Use the “addr” to map the file or fail MAP_PRIVATE: No write through to the actual file MAP_SHARED Complement of MAP_PRIVATE Writes are immediately reflected in the underlying file Useful as an IPC MAP_ANONYMOUS (Shared memory between related processes) Mapping not backed by any file. fd & off are ignored Contents initialized to zero MAP_LOCKED: Lock the region as by mlock() MAP_NORESERVE: No swap reservation Might lead to SIGSEGV on write, if no physical memory is available
  • 64. 64© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Cleaning Up the Act Once done using the memory map, release it by using munmap() int munmap(void *addr, size_t length); addr: Virtual Start Address returned by mmap() length: Length of the mapped memory region Even otherwise the Kernel automatically unmaps mapped regions on process termination using _exit() or exec*() calls
  • 65. 65© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Let's try an Example Two Programs on Two Shells mmap1.c mmap2.c
  • 66. 66© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Map Access Synchronization Synchronization Issues Exist with Access of Mapped Memory Similar to the Shared Memory case Hence, similarly User need to take care of it Process Semaphores may be used
  • 67. 67© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. What all have we learnt? W's of Inter Process Communication Various IPC mechanisms in Linux Pipes FIFOs: Named Pipes Message Queues Shared & Mapped Memories IPC Synchronization using Process Semaphores
  • 68. 68© 2010-15 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Any Queries?