You are on page 1of 30

Operating

Systems
Lecture 8
Agenda for Today
 Review of previous lecture
 Interprocess communication (IPC)
and process synchronization
 UNIX/Linux IPC tools (pipe, named
pipe—FIFO, socket, message
queue, shared memory)
 Use of pipe

 Recap of the lecture


14 September 2019 © Copyright Virtual University of
Pakistan
Review of Lecture 7

 The wait and exec system calls


and sample code
 Cooperating processes

 Producer-consumer problem

14 September 2019 © Copyright Virtual University of


Pakistan
Interprocess
Communication (IPC)
 Mechanism for processes to
communicate and to synchronize
their actions.
 Message system – processes
communicate with each other
without resorting to shared
variables.
14 September 2019 © Copyright Virtual University of
Pakistan
Interprocess
Communication (IPC)
 IPC facility provides two operations:
 Send (message) – message size
fixed or variable
 Receive (message)

14 September 2019 © Copyright Virtual University of


Pakistan
Interprocess
Communication (IPC)
 If P and Q wish to communicate,
they need to:
 establish a communication link
between them
 exchange messages via
send/receive
14 September 2019 © Copyright Virtual University of
Pakistan
Interprocess
Communication (IPC)
 Implementation of communication
link
 physical (e.g., shared memory,
hardware bus)
 logical (e.g., logical properties)
14 September 2019 © Copyright Virtual University of
Pakistan
Implementation
Questions
 How are links established?
 Can a link be associated with more
than two processes?
 How many links can there be
between every pair of
communicating processes?
14 September 2019 © Copyright Virtual University of
Pakistan
Implementation
Questions
 What is the capacity of a link?
 Is the size of a message that the
link can accommodate fixed or
variable?
 Is a link unidirectional or bi-
directional?
14 September 2019 © Copyright Virtual University of
Pakistan
Direct Communication
 Processes must name each other
explicitly:
 send (P, message) – send a
message to process P
 Receive (Q, message) – receive
a message from process Q

14 September 2019 © Copyright Virtual University of


Pakistan
Direct Communication
 Properties of communication link
 Links are established automatically.
 A link is associated with exactly one
pair of communicating processes.
 Between each pair there exists
exactly one link.
 The link may be unidirectional, but is
usually bi-directional.
14 September 2019 © Copyright Virtual University of
Pakistan
Indirect Communication
 Messages are directed and
received from mailboxes (also
referred to as ports).
 Each mailbox has a unique id.
 Processes can communicate only if
they share a mailbox.

14 September 2019 © Copyright Virtual University of


Pakistan
Indirect Communication …
 Properties of communication link
 Link established only if processes
share a common mailbox
 A link may be associated with many
processes.
 Each pair of processes may share
several communication links.
 Link may be unidirectional
or bi-directional.
14 September 2019 © Copyright Virtual University of
Pakistan
Indirect Communication …
 Operations
 create a new mailbox
 send and receive messages through
mailbox
 destroy a mailbox
 Primitives are defined as:
send (A, message)
receive (A, message)
14 September 2019 © Copyright Virtual University of
Pakistan
Indirect Communication …

Mailbox sharing
 P1, P2, and P3 share mailbox A.
 P1, sends; P2 and P3 receive.
 Who gets the message?

14 September 2019 © Copyright Virtual University of


Pakistan
Indirect Communication …
Solutions
 Allow a link to be associated with
at most two processes.
 Allow only one process at a time
to execute a receive operation.
 Allow the system to select
arbitrarily the receiver. Sender is
notified who the receiver was.
14 September 2019 © Copyright Virtual University of
Pakistan
Synchronization
 Message passing may be either
blocking or non-blocking.
 Blocking is considered
synchronous
 Non-blocking is considered
asynchronous
 send and receive primitives may
be either blocking or non-blocking.
14 September 2019 © Copyright Virtual University of
Pakistan
Buffering
 Queue of messages attached to the
link; implemented in one of three ways.
Zero capacity – No messages
Sender must wait for receiver
Bounded capacity – n messages
Sender must wait if link full.
Unbounded capacity – infinite length
Sender never waits.
14 September 2019 © Copyright Virtual University of
Pakistan
UNIX/Linux IPC Tools
 Pipe
 Named pipe (FIFO)
 BSD Socket
 TLI
 Message queue
 Shared memory
 Etc.
14 September 2019 © Copyright Virtual University of
Pakistan
UNIX/Linux Pipe
 Important system calls
pipe, read, write, close
 pipe: Create a pipe for IPC
 read: Read from a pipe
 write: Write data to a pipe
 close: Close/destroy a pipe
14 September 2019 © Copyright Virtual University of
Pakistan
File Descriptors in
UNIX/Linux
 An integer returned by open()
system call
 Used as an index in the per
process file descriptor table
(PPFDT)
 Used in read, write, and close
calls
14 September 2019 © Copyright Virtual University of
Pakistan
File Descriptors in
UNIX/Linux
 Size of PPFDT is equal to the number
of files that a process can open
simultaneously (OPEN_MAX in
Linux—see <linux/limits.h>
 Used as an index in the per process
file descriptor table (PPFDT)
 Used in read, write, and close
calls
14 September 2019 © Copyright Virtual University of
Pakistan
UNIX/Linux Pipe
 Important characteristics of a pipe
 Stream of bytes
 Used as half-duplex channel
 Bounded buffer
 Maximum data written is PIPE_BUF
(defined in <sys/param.h> under
UNIX and in <linux/param.h> in
Linux)—5120 and 4096, respectively
14 September 2019 © Copyright Virtual University of
Pakistan
Synopsis of pipe
System Call

#include <unistd.h>
int pipe (int filedes[2]);

14 September 2019 © Copyright Virtual University of


Pakistan
Example

parent child
fork
P P

Read Write
end end

14 September 2019 © Copyright Virtual University of


Pakistan
Sample Code
/* Parent creates pipe, forks a child, child writes into
pipe, and parent reads from pipe */
#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
main()
{
int pipefd[2], pid, n, rc, nr, status;
char *testString
14 September 2019 = "Hello,
© Copyright world!\n“,
Virtual University
Pakistan
of buf[1024];
Sample Code
rc = pipe (pipefd);
if (rc < 0) {
perror("pipe");
exit(1);
}
pid = fork ();
if (pid < 0) {
perror("fork");
exit(1);
}
14 September 2019 © Copyright Virtual University of
Pakistan
Sample Code
if (pid == 0) { /* Child’s Code */
close(pipefd[0]);
write(pipefd[1], testString, strlen(testString));
close(pipefd[1]);
exit(0);
}

14 September 2019 © Copyright Virtual University of


Pakistan
Sample Code
/* Parent’s Code */
close(pipefd[1]);
n = strlen(testString);
nr = read(pipefd[0], buf, n);
rc = write(1, buf, nr);
wait(&status);
printf("Good work child!\n");
return(0);
14 September 2019 © Copyright Virtual University of
Pakistan
Recap of Lecture
 Review of previous lecture
 Interprocess communication (IPC)
and process synchronization
 UNIX/Linux IPC tools (pipe, FIFO,
socket, message queue, shared
memory, etc.)
 Use of UNIX pipe

 Recap of the lecture


14 September 2019 © Copyright Virtual University of
Pakistan

You might also like