0% found this document useful (0 votes)
31 views30 pages

Djotio-Cours SE-Operating System Lecture 8 - 0

Uploaded by

jfotsa00
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
31 views30 pages

Djotio-Cours SE-Operating System Lecture 8 - 0

Uploaded by

jfotsa00
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 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


Review of Lecture 7

 The wait and exec system calls


and sample code
 Cooperating processes

 Producer-consumer problem
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.
Interprocess
Communication (IPC)
IPC facility provides two operations:
Send (message) – message size fixed
or variable
Receive (message)
Interprocess
Communication (IPC)
If P and Q wish to communicate, they
need to:
establish a communication link
between them
exchange messages via send/receive
Interprocess
Communication (IPC)
Implementation of communication link
physical (e.g., shared memory,
hardware bus)
logical (e.g., logical properties)
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?
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?
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
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.
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.
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.
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)
Indirect Communication …

Mailbox sharing
P1, P2, and P3 share mailbox A.
P1, sends; P2 and P3 receive.
Who gets the message?
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.
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.
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.
UNIX/Linux IPC Tools
Pipe
Named pipe (FIFO)
BSD Socket
TLI
Message queue
Shared memory
Etc.
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
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
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
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
Synopsis of pipe
System Call

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

parent child
fork
P P

Read Write
end end
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 = "Hello, world!\n“, buf[1024];
Sample Code
rc = pipe (pipefd);
if (rc < 0) {
perror("pipe");
exit(1);
}
pid = fork ();
if (pid < 0) {
perror("fork");
exit(1);
}
Sample Code
if (pid == 0) { /* Child’s Code */
close(pipefd[0]);
write(pipefd[1], testString, strlen(testString));
close(pipefd[1]);
exit(0);
}
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);
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

You might also like