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

Introduction of tcp, ip & udp
Introduction of tcp, ip & udpIntroduction of tcp, ip & udp
Introduction of tcp, ip & udprahul kundu
 
Interprocess Communication
Interprocess CommunicationInterprocess Communication
Interprocess CommunicationDeepak H L
 
RPC: Remote procedure call
RPC: Remote procedure callRPC: Remote procedure call
RPC: Remote procedure callSunita Sahu
 
User datagram protocol (udp)
User datagram protocol (udp)User datagram protocol (udp)
User datagram protocol (udp)Ramola Dhande
 
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
 
Operating systems system structures
Operating systems   system structuresOperating systems   system structures
Operating systems system structuresMukesh Chinta
 
Introduction to System Calls
Introduction to System CallsIntroduction to System Calls
Introduction to System CallsVandana Salve
 
Operating system 24 mutex locks and semaphores
Operating system 24 mutex locks and semaphoresOperating system 24 mutex locks and semaphores
Operating system 24 mutex locks and semaphoresVaibhav Khanna
 
data-link layer protocols
data-link layer protocols  data-link layer protocols
data-link layer protocols BE Smârt
 
First fit , Best fit, Worst fit
First fit , Best fit, Worst fitFirst fit , Best fit, Worst fit
First fit , Best fit, Worst fitShahzeb Amjad
 
Threads (operating System)
Threads (operating System)Threads (operating System)
Threads (operating System)Prakhar Maurya
 
Open shortest path first (ospf)
Open shortest path first (ospf)Open shortest path first (ospf)
Open shortest path first (ospf)Respa Peter
 
Presentation Routing algorithm
Presentation Routing algorithmPresentation Routing algorithm
Presentation Routing algorithmBasit Hussain
 
Agreement Protocols, distributed File Systems, Distributed Shared Memory
Agreement Protocols, distributed File Systems, Distributed Shared MemoryAgreement Protocols, distributed File Systems, Distributed Shared Memory
Agreement Protocols, distributed File Systems, Distributed Shared MemorySHIKHA GAUTAM
 

What's hot (20)

TCP/IP MODEL
TCP/IP MODEL TCP/IP MODEL
TCP/IP MODEL
 
Introduction of tcp, ip & udp
Introduction of tcp, ip & udpIntroduction of tcp, ip & udp
Introduction of tcp, ip & udp
 
process creation OS
process creation OSprocess creation OS
process creation OS
 
Interprocess Communication
Interprocess CommunicationInterprocess Communication
Interprocess Communication
 
Distributed Operating System_1
Distributed Operating System_1Distributed Operating System_1
Distributed Operating System_1
 
RPC: Remote procedure call
RPC: Remote procedure callRPC: Remote procedure call
RPC: Remote procedure call
 
User datagram protocol (udp)
User datagram protocol (udp)User datagram protocol (udp)
User datagram protocol (udp)
 
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
 
Operating systems system structures
Operating systems   system structuresOperating systems   system structures
Operating systems system structures
 
Message passing in Distributed Computing Systems
Message passing in Distributed Computing SystemsMessage passing in Distributed Computing Systems
Message passing in Distributed Computing Systems
 
Shared memory
Shared memoryShared memory
Shared memory
 
Introduction to System Calls
Introduction to System CallsIntroduction to System Calls
Introduction to System Calls
 
Operating system 24 mutex locks and semaphores
Operating system 24 mutex locks and semaphoresOperating system 24 mutex locks and semaphores
Operating system 24 mutex locks and semaphores
 
data-link layer protocols
data-link layer protocols  data-link layer protocols
data-link layer protocols
 
Cache coherence
Cache coherenceCache coherence
Cache coherence
 
First fit , Best fit, Worst fit
First fit , Best fit, Worst fitFirst fit , Best fit, Worst fit
First fit , Best fit, Worst fit
 
Threads (operating System)
Threads (operating System)Threads (operating System)
Threads (operating System)
 
Open shortest path first (ospf)
Open shortest path first (ospf)Open shortest path first (ospf)
Open shortest path first (ospf)
 
Presentation Routing algorithm
Presentation Routing algorithmPresentation Routing algorithm
Presentation Routing algorithm
 
Agreement Protocols, distributed File Systems, Distributed Shared Memory
Agreement Protocols, distributed File Systems, Distributed Shared MemoryAgreement Protocols, distributed File Systems, Distributed Shared Memory
Agreement Protocols, distributed File Systems, Distributed Shared Memory
 

Viewers also liked

Viewers also liked (17)

Inter process communication
Inter process communicationInter process communication
Inter process communication
 
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)
 
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
 
Os Threads
Os ThreadsOs Threads
Os Threads
 
RPC
RPCRPC
RPC
 
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
 

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

Varsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
Varsha Sewlal- Cyber Attacks on Critical Critical InfrastructureVarsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
Varsha Sewlal- Cyber Attacks on Critical Critical Infrastructureitnewsafrica
 
React Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkReact Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkPixlogix Infotech
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsNathaniel Shimoni
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfpanagenda
 
Infrared simulation and processing on Nvidia platforms
Infrared simulation and processing on Nvidia platformsInfrared simulation and processing on Nvidia platforms
Infrared simulation and processing on Nvidia platformsYoss Cohen
 
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...panagenda
 
Digital Tools & AI in Career Development
Digital Tools & AI in Career DevelopmentDigital Tools & AI in Career Development
Digital Tools & AI in Career DevelopmentMahmoud Rabie
 
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...itnewsafrica
 
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...BookNet Canada
 
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxGenerative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxfnnc6jmgwh
 
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS:  6 Ways to Automate Your Data IntegrationBridging Between CAD & GIS:  6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integrationmarketing932765
 
Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)
Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)
Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)Mark Simos
 
Microsoft 365 Copilot: How to boost your productivity with AI – Part two: Dat...
Microsoft 365 Copilot: How to boost your productivity with AI – Part two: Dat...Microsoft 365 Copilot: How to boost your productivity with AI – Part two: Dat...
Microsoft 365 Copilot: How to boost your productivity with AI – Part two: Dat...Nikki Chapple
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Alkin Tezuysal
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentPim van der Noll
 
Generative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfGenerative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfIngrid Airi González
 
A Glance At The Java Performance Toolbox
A Glance At The Java Performance ToolboxA Glance At The Java Performance Toolbox
A Glance At The Java Performance ToolboxAna-Maria Mihalceanu
 
Landscape Catalogue 2024 Australia-1.pdf
Landscape Catalogue 2024 Australia-1.pdfLandscape Catalogue 2024 Australia-1.pdf
Landscape Catalogue 2024 Australia-1.pdfAarwolf Industries LLC
 
Accelerating Enterprise Software Engineering with Platformless
Accelerating Enterprise Software Engineering with PlatformlessAccelerating Enterprise Software Engineering with Platformless
Accelerating Enterprise Software Engineering with PlatformlessWSO2
 
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...itnewsafrica
 

Recently uploaded (20)

Varsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
Varsha Sewlal- Cyber Attacks on Critical Critical InfrastructureVarsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
Varsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
 
React Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkReact Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App Framework
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directions
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
 
Infrared simulation and processing on Nvidia platforms
Infrared simulation and processing on Nvidia platformsInfrared simulation and processing on Nvidia platforms
Infrared simulation and processing on Nvidia platforms
 
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
 
Digital Tools & AI in Career Development
Digital Tools & AI in Career DevelopmentDigital Tools & AI in Career Development
Digital Tools & AI in Career Development
 
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
 
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...
 
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxGenerative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
 
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS:  6 Ways to Automate Your Data IntegrationBridging Between CAD & GIS:  6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integration
 
Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)
Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)
Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)
 
Microsoft 365 Copilot: How to boost your productivity with AI – Part two: Dat...
Microsoft 365 Copilot: How to boost your productivity with AI – Part two: Dat...Microsoft 365 Copilot: How to boost your productivity with AI – Part two: Dat...
Microsoft 365 Copilot: How to boost your productivity with AI – Part two: Dat...
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
 
Generative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfGenerative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdf
 
A Glance At The Java Performance Toolbox
A Glance At The Java Performance ToolboxA Glance At The Java Performance Toolbox
A Glance At The Java Performance Toolbox
 
Landscape Catalogue 2024 Australia-1.pdf
Landscape Catalogue 2024 Australia-1.pdfLandscape Catalogue 2024 Australia-1.pdf
Landscape Catalogue 2024 Australia-1.pdf
 
Accelerating Enterprise Software Engineering with Platformless
Accelerating Enterprise Software Engineering with PlatformlessAccelerating Enterprise Software Engineering with Platformless
Accelerating Enterprise Software Engineering with Platformless
 
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
 

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?