87
Processes (Part II) Amir H. Payberah [email protected] Amirkabir University of Technology (Tehran Polytechnic) Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 1 / 58

Process Management - Part2

Embed Size (px)

Citation preview

Page 1: Process Management - Part2

Processes (Part II)

Amir H. [email protected]

Amirkabir University of Technology(Tehran Polytechnic)

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 1 / 58

Page 2: Process Management - Part2

Inter-Process Communication(IPC)

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 2 / 58

Page 3: Process Management - Part2

Cooperating Processes

I Processes within a system may be independent or cooperating.

• Independent process cannot affect or be affected by the executionof another process.

• Cooperating process can affect or be affected by other processes.

I Reasons for cooperating processes: information sharing, computa-tion speedup, ...

I Producer-Consumer model: producer process produces informationthat is consumed by a consumer process.

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 3 / 58

Page 4: Process Management - Part2

Cooperating Processes

I Processes within a system may be independent or cooperating.• Independent process cannot affect or be affected by the execution

of another process.

• Cooperating process can affect or be affected by other processes.

I Reasons for cooperating processes: information sharing, computa-tion speedup, ...

I Producer-Consumer model: producer process produces informationthat is consumed by a consumer process.

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 3 / 58

Page 5: Process Management - Part2

Cooperating Processes

I Processes within a system may be independent or cooperating.• Independent process cannot affect or be affected by the execution

of another process.• Cooperating process can affect or be affected by other processes.

I Reasons for cooperating processes: information sharing, computa-tion speedup, ...

I Producer-Consumer model: producer process produces informationthat is consumed by a consumer process.

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 3 / 58

Page 6: Process Management - Part2

Cooperating Processes

I Processes within a system may be independent or cooperating.• Independent process cannot affect or be affected by the execution

of another process.• Cooperating process can affect or be affected by other processes.

I Reasons for cooperating processes: information sharing, computa-tion speedup, ...

I Producer-Consumer model: producer process produces informationthat is consumed by a consumer process.

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 3 / 58

Page 7: Process Management - Part2

Cooperating Processes

I Processes within a system may be independent or cooperating.• Independent process cannot affect or be affected by the execution

of another process.• Cooperating process can affect or be affected by other processes.

I Reasons for cooperating processes: information sharing, computa-tion speedup, ...

I Producer-Consumer model: producer process produces informationthat is consumed by a consumer process.

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 3 / 58

Page 8: Process Management - Part2

Inter-Process Communication

I Cooperating processes require an interprocess communication (IPC)mechanism that will allow them to exchange data and information.

I Two models of IPC• Shared memory• Message passing

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 4 / 58

Page 9: Process Management - Part2

Inter-Process Communication

I Cooperating processes require an interprocess communication (IPC)mechanism that will allow them to exchange data and information.

I Two models of IPC• Shared memory• Message passing

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 4 / 58

Page 10: Process Management - Part2

Shared Memory

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 5 / 58

Page 11: Process Management - Part2

Shared Memory (1/3)

I An area of memory shared among the processes that wish to com-municate.

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 6 / 58

Page 12: Process Management - Part2

Shared Memory (2/3)

I It is resides in the address space of the process creating the shared-memory segment.

I Other processes must attach it to their address space for communi-cation.

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 7 / 58

Page 13: Process Management - Part2

Shared Memory (3/3)

I But, OS prevents one process from accessing another process’smemory.

I Shared memory requires that two or more processes agree to removethis restriction.

I The communication is under the control of the users processes notthe OS.

• Synchronization

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 8 / 58

Page 14: Process Management - Part2

Shared Memory (3/3)

I But, OS prevents one process from accessing another process’smemory.

I Shared memory requires that two or more processes agree to removethis restriction.

I The communication is under the control of the users processes notthe OS.

• Synchronization

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 8 / 58

Page 15: Process Management - Part2

Shared Memory (3/3)

I But, OS prevents one process from accessing another process’smemory.

I Shared memory requires that two or more processes agree to removethis restriction.

I The communication is under the control of the users processes notthe OS.

• Synchronization

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 8 / 58

Page 16: Process Management - Part2

Shared Memory - Producer-Consumer Model (1/3)

I Defining the buffer.• Unbounded buffer: no practical limit on the size of the buffer.• Bounded buffer: a fixed buffer size.

#define BUFFER_SIZE 10

typedef struct {

...

} item;

item buffer[BUFFER_SIZE];

int in = 0;

int out = 0;

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 9 / 58

Page 17: Process Management - Part2

Shared Memory - Producer-Consumer Model (2/3)

I Producer

item next_produced;

while (true) {

// produce an item in next produced

while (((in + 1) % BUFFER_SIZE) == out) {

// do nothing

}

buffer[in] = next_produced;

in = (in + 1) % BUFFER_SIZE;

}

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 10 / 58

Page 18: Process Management - Part2

Shared Memory - Producer-Consumer Model (3/3)

I Consumer

item next_consumed;

while (true) {

while (in == out) {

// do nothing

}

next_consumed = buffer[out];

out = (out + 1) % BUFFER_SIZE;

// consume the item in next consumed

}

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 11 / 58

Page 19: Process Management - Part2

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 12 / 58

Page 20: Process Management - Part2

A Taxonomy of Linux IPC Facilities

[Michael Kerrisk, The Linux Programming Interface, No Starch Press, 2010]

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 13 / 58

Page 21: Process Management - Part2

System V vs. POSIX IPC

I System V (System Five): one of the first commercial versions of theUnix OS.

I POSIX (Portable Operating System Interface): a family of standardsfor maintaining compatibility between OSs.

I Both have the same basic IPC tools, but they offer a slightly differentinterfaces to those tools.

I System V is fully supported on all Linux kernels.

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 14 / 58

Page 22: Process Management - Part2

System V vs. POSIX IPC

I System V (System Five): one of the first commercial versions of theUnix OS.

I POSIX (Portable Operating System Interface): a family of standardsfor maintaining compatibility between OSs.

I Both have the same basic IPC tools, but they offer a slightly differentinterfaces to those tools.

I System V is fully supported on all Linux kernels.

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 14 / 58

Page 23: Process Management - Part2

System V vs. POSIX IPC

I System V (System Five): one of the first commercial versions of theUnix OS.

I POSIX (Portable Operating System Interface): a family of standardsfor maintaining compatibility between OSs.

I Both have the same basic IPC tools, but they offer a slightly differentinterfaces to those tools.

I System V is fully supported on all Linux kernels.

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 14 / 58

Page 24: Process Management - Part2

POSIX Shared Memory

I To use a POSIX shared memory object, we perform two steps:

1 Use the shm open() function to open an object with a specifiedname.

2 Pass the file descriptor obtained in the previous step in a call tommap() that maps the shared memory object into the process’s virtualaddress space.

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 15 / 58

Page 25: Process Management - Part2

Creating Shared Memory Objects

I shm open() creates and opens a new shared memory object or opensan existing object.

I mmap() creates a new mapping in the virtual address space of thecalling process.

#include <fcntl.h>

#include <sys/stat.h>

#include <sys/mman.h>

int shm_open(const char *name, int oflag, mode_t mode);

void *mmap(void *addr, size_t length, int prot, int flags, int fd,

off_t offset);

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 16 / 58

Page 26: Process Management - Part2

Removing Shared Memory Objects

I shm unlink() removes a shared memory object.

#include <sys/mman.h>

int shm_unlink(const char *name);

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 17 / 58

Page 27: Process Management - Part2

Producer-Consumer via Shared Memory (1/2)

I Producer

int SIZE = 4096;

char *my_shm = "/tmp/myshm";

char *write_msg = "hello";

char *addr;

int fd;

// create the shared memory object

fd = shm_open(my_shm, O_CREATE | O_RDWR, 0666);

// configuare the size of the shared memory object

ftruncate(fd, SIZE);

// memory map to the shared memory object

addr = mmap(NULL, SIZE, PROT_WRITE, MAP_SHARED, fd, 0);

// write to the shared object

sprintf(addr, "%s", write_msg);

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 18 / 58

Page 28: Process Management - Part2

Producer-Consumer via Shared Memory (2/2)

I Consumer

int SIZE = 4096;

char *my_shm = "/tmp/myshm";

char *addr;

int fd;

// open the shared memory object

fd = shm_open(my_shm, O_RDONLY, 0666);

// memory map to the shared memory object

addr = mmap(NULL, SIZE, PROT_READ, MAP_SHARED, fd, 0);

// read from to the shared object

printf("%s", (char *)addr);

// remove the shared memory object

shm_unlink("my_shm");

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 19 / 58

Page 29: Process Management - Part2

Message Passing

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 20 / 58

Page 30: Process Management - Part2

Message Passing (1/2)

I Processes communicate with each other without resorting to sharedvariables.

I Useful in a distributed environment: processes on different comput-ers.

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 21 / 58

Page 31: Process Management - Part2

Message Passing (2/2)

I Two operations: send(message) and receive(message).

I If processes p and q wish to communicate, they need to:• Establish a communication link between them.• Exchange messages via send and receive.

I Implementation of communication link:• Physical links, e.g., shared memory, hardware bus, network• Logical links

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 22 / 58

Page 32: Process Management - Part2

Message Passing (2/2)

I Two operations: send(message) and receive(message).

I If processes p and q wish to communicate, they need to:• Establish a communication link between them.• Exchange messages via send and receive.

I Implementation of communication link:• Physical links, e.g., shared memory, hardware bus, network• Logical links

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 22 / 58

Page 33: Process Management - Part2

Logical Links

I Naming: direct or indirect communication

I Synchronization: synchronous or asynchronous communication

I Buffering: automatic or explicit buffering

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 23 / 58

Page 34: Process Management - Part2

Naming (1/3)

I With direct communication, processes must name each other ex-plicitly:

• send(p, message): sends a message to process p.• receive(q, message): receives a message from process q.

I Properties of communication link:• A link is associated with exactly two processes.• Between each pair of processes, there exists exactly one link.

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 24 / 58

Page 35: Process Management - Part2

Naming (1/3)

I With direct communication, processes must name each other ex-plicitly:

• send(p, message): sends a message to process p.• receive(q, message): receives a message from process q.

I Properties of communication link:• A link is associated with exactly two processes.• Between each pair of processes, there exists exactly one link.

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 24 / 58

Page 36: Process Management - Part2

Naming (2/3)

I With indirect communication the messages are sent to and receivedfrom mailboxes or ports.

• send(A, message): sends a message to mailbox A.• receive(A, message): receives a message from mailbox A.

I Properties of communication link:• A link is established only if processes share a common mailbox.• A link may be associated with more than two processes.• Each pair of processes may share several communication links.

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 25 / 58

Page 37: Process Management - Part2

Naming (2/3)

I With indirect communication the messages are sent to and receivedfrom mailboxes or ports.

• send(A, message): sends a message to mailbox A.• receive(A, message): receives a message from mailbox A.

I Properties of communication link:• A link is established only if processes share a common mailbox.• A link may be associated with more than two processes.• Each pair of processes may share several communication links.

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 25 / 58

Page 38: Process Management - Part2

Naming (3/3)

I Mailbox sharing• p1, p2, and p3 share mailbox A.• p1 sends; p2 and p3 receive.• Who gets the message?

I 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.

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 26 / 58

Page 39: Process Management - Part2

Naming (3/3)

I Mailbox sharing• p1, p2, and p3 share mailbox A.• p1 sends; p2 and p3 receive.• Who gets the message?

I 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.

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 26 / 58

Page 40: Process Management - Part2

Synchronization (1/2)

I Message passing may be either blocking or non-blocking.

I Blocking is considered synchronous.• Blocking send: the sender is blocked until the message is received.• Blocking receive: the receiver is blocked until a message is available.

I Non-blocking is considered asynchronous.• Non-blocking send: the sender sends the message and continue.• Non-blocking receive: the receiver receives a valid message, or null

message.

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 27 / 58

Page 41: Process Management - Part2

Synchronization (1/2)

I Message passing may be either blocking or non-blocking.

I Blocking is considered synchronous.• Blocking send: the sender is blocked until the message is received.• Blocking receive: the receiver is blocked until a message is available.

I Non-blocking is considered asynchronous.• Non-blocking send: the sender sends the message and continue.• Non-blocking receive: the receiver receives a valid message, or null

message.

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 27 / 58

Page 42: Process Management - Part2

Synchronization (1/2)

I Message passing may be either blocking or non-blocking.

I Blocking is considered synchronous.• Blocking send: the sender is blocked until the message is received.• Blocking receive: the receiver is blocked until a message is available.

I Non-blocking is considered asynchronous.• Non-blocking send: the sender sends the message and continue.• Non-blocking receive: the receiver receives a valid message, or null

message.

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 27 / 58

Page 43: Process Management - Part2

Synchronization (2/2)

I Producer-consumer model

// producer

// message: next_produced;

while (true) {

// produce an item in next produced

send(next_produced);

}

// consumer

// message: next_consumed;

while (true) {

receive(next_consumed);

// consume the item in next consumed

}

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 28 / 58

Page 44: Process Management - Part2

Buffering

I Queue of the messages attached to the link.

I Implemented in one of three ways:• Zero capacity: no messages are queued on a link. Sender must wait

for receiver.• Bounded capacity: finite length of n messages Sender must wait if

link full.• Unbounded capacity: infinite length. Sender never waits.

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 29 / 58

Page 45: Process Management - Part2

Buffering

I Queue of the messages attached to the link.

I Implemented in one of three ways:• Zero capacity: no messages are queued on a link. Sender must wait

for receiver.• Bounded capacity: finite length of n messages Sender must wait if

link full.• Unbounded capacity: infinite length. Sender never waits.

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 29 / 58

Page 46: Process Management - Part2

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 30 / 58

Page 47: Process Management - Part2

A Taxonomy of Linux IPC Facilities

[Michael Kerrisk, The Linux Programming Interface, No Starch Press, 2010]

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 31 / 58

Page 48: Process Management - Part2

Data Message vs. Data Stream (1/2)

I Message oriented protocols send data in distinct chunks or groups.• The receiver of data can determine where one message ends and

another begins.

I Stream protocols send a continuous flow of data.

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 32 / 58

Page 49: Process Management - Part2

Data Message vs. Data Stream (1/2)

I Message oriented protocols send data in distinct chunks or groups.• The receiver of data can determine where one message ends and

another begins.

I Stream protocols send a continuous flow of data.

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 32 / 58

Page 50: Process Management - Part2

Data Message vs. Data Stream (2/2)

I Example with mobile phones: text messages would be a messageoriented protocol, and a phone call is stream oriented.

I UDP is a message oriented protocol, and TCP is a stream orientedprotocol.

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 33 / 58

Page 51: Process Management - Part2

Data Message vs. Data Stream (2/2)

I Example with mobile phones: text messages would be a messageoriented protocol, and a phone call is stream oriented.

I UDP is a message oriented protocol, and TCP is a stream orientedprotocol.

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 33 / 58

Page 52: Process Management - Part2

Message Passing IPC Facilities

I Data stream:• Pipe• FIFO (named pipe)• Stream socket

I Data message:• Message queue• Datagram socket

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 34 / 58

Page 53: Process Management - Part2

Pipe

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 35 / 58

Page 54: Process Management - Part2

Pipe

I Pipes allow two processes to communicate in standard producer-consumer fashion.

• The producer writes to the write-end, and the consumer reads fromthe read-end.

I Pipes are unidirectional, allowing only one-way communication.

I Require parent-child relationship between communicating processes.

ls | wc -l

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 36 / 58

Page 55: Process Management - Part2

Pipe

I Pipes allow two processes to communicate in standard producer-consumer fashion.

• The producer writes to the write-end, and the consumer reads fromthe read-end.

I Pipes are unidirectional, allowing only one-way communication.

I Require parent-child relationship between communicating processes.

ls | wc -l

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 36 / 58

Page 56: Process Management - Part2

Pipe

I Pipes allow two processes to communicate in standard producer-consumer fashion.

• The producer writes to the write-end, and the consumer reads fromthe read-end.

I Pipes are unidirectional, allowing only one-way communication.

I Require parent-child relationship between communicating processes.

ls | wc -l

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 36 / 58

Page 57: Process Management - Part2

Pipe

I Pipes allow two processes to communicate in standard producer-consumer fashion.

• The producer writes to the write-end, and the consumer reads fromthe read-end.

I Pipes are unidirectional, allowing only one-way communication.

I Require parent-child relationship between communicating processes.

ls | wc -l

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 36 / 58

Page 58: Process Management - Part2

Creating a Pipe

I The pipe() system call creates a new pipe.

I It returns two open file descriptors in the array fd: fd[0] to readfrom the pipe, and fd[1] to write to the pipe.

#include <unistd.h>

int pipe(int fd[2]);

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 37 / 58

Page 59: Process Management - Part2

Parent-Child Communication Through a Pipe (1/2)

int BUFFER_SIZE = 25;

char write_msg[BUFFER_SIZE] = "hello";

char read_msg[BUFFER_SIZE];

int fd[2];

pipe(fd); // Create the pipe

switch (fork()) {

case -1: // fork error

break;

case 0: // Child

close(fd[1]); // Close unused write end

read(fd[0], read_msg, BUFFER_SIZE);

printf("read %s", read_msg);

break;

default: // Parent

close(fd[0]) // Close unused read end

write(fd[1], write_msg, strlen(write_msg) + 1);

break;

}

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 38 / 58

Page 60: Process Management - Part2

Parent-Child Communication Through a Pipe (2/2)

[Michael Kerrisk, The Linux Programming Interface, No Starch Press, 2010]

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 39 / 58

Page 61: Process Management - Part2

FIFO

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 40 / 58

Page 62: Process Management - Part2

FIFO (Named Pipe)

I FIFO is similar to a pipe, but it has a name within the file systemand is opened in the same way as a regular file.

I Communication is bidirectional.

I No parent-child relationship is necessary.

I Several processes can use a FIFO for communication.

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 41 / 58

Page 63: Process Management - Part2

FIFO (Named Pipe)

I FIFO is similar to a pipe, but it has a name within the file systemand is opened in the same way as a regular file.

I Communication is bidirectional.

I No parent-child relationship is necessary.

I Several processes can use a FIFO for communication.

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 41 / 58

Page 64: Process Management - Part2

FIFO (Named Pipe)

I FIFO is similar to a pipe, but it has a name within the file systemand is opened in the same way as a regular file.

I Communication is bidirectional.

I No parent-child relationship is necessary.

I Several processes can use a FIFO for communication.

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 41 / 58

Page 65: Process Management - Part2

FIFO (Named Pipe)

I FIFO is similar to a pipe, but it has a name within the file systemand is opened in the same way as a regular file.

I Communication is bidirectional.

I No parent-child relationship is necessary.

I Several processes can use a FIFO for communication.

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 41 / 58

Page 66: Process Management - Part2

Creating a FIFO

I The mkfifo() function creates a new FIFO.

#include <sys/stat.h>

int mkfifo(const char *pathname, mode_t mode);

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 42 / 58

Page 67: Process Management - Part2

Producer-Consumer via FIFO (1/2)

I Producer

char *my_fifo = "/tmp/myfifo";

char *write_msg = "hello";

int fd;

// Create the FIFO (named pipe)

mkfifo(my_fifo, 0666);

// Write "hello" to the FIFO

fd = open(my_fifo, O_WRONLY);

write(fd, write_msg, strlen(write_msg));

close(fd);

// Remove the FIFO

unlink(my_fifo);

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 43 / 58

Page 68: Process Management - Part2

Producer-Consumer via FIFO (2/2)

I Consumer

int MAX_SIZE = 100;

char *my_fifo = "/tmp/myfifo";

char buf[MAX_SIZE];

int fd;

// Open the FIFO

fd = open(my_fifo, O_RDONLY);

// Read the message from the FIFO

read(fd, buf, MAX_SIZE);

printf("Received: %s\n", buf);

// Close the FIFO

close(fd);

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 44 / 58

Page 69: Process Management - Part2

Message Queue

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 45 / 58

Page 70: Process Management - Part2

Message Queue

I Message queues allows processes to exchange data in the form ofmessages.

I In message queue the consumer receives whole messages, as writtenby the producer.

• It is not possible to read part of a message and leave the remainderin the queue, or to read multiple messages at a time.

• In pipes, the consumer can read an arbitrary number of bytes at atime, irrespective of the size of data blocks written by the producer.

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 46 / 58

Page 71: Process Management - Part2

Message Queue

I Message queues allows processes to exchange data in the form ofmessages.

I In message queue the consumer receives whole messages, as writtenby the producer.

• It is not possible to read part of a message and leave the remainderin the queue, or to read multiple messages at a time.

• In pipes, the consumer can read an arbitrary number of bytes at atime, irrespective of the size of data blocks written by the producer.

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 46 / 58

Page 72: Process Management - Part2

Creating a Message Queue

I mq open() creates a new message queue or opens an existing queue.

#include <fcntl.h>

#include <sys/stat.h>

#include <mqueue.h>

mqd_t mq_open(const char *name, int oflag, ...

/* mode_t mode, struct mq_attr *attr */ );

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 47 / 58

Page 73: Process Management - Part2

Closing a Message Queue

I mq close() closes the message queue descriptor mqdes.

#include <mqueue.h>

int mq_close(mqd_t mqdes);

I mq unlink() removes the message queue identified by name.

#include <mqueue.h>

int mq_unlink(const char *name);

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 48 / 58

Page 74: Process Management - Part2

Message Queue Attributes

I Specifies attributes of a message queue.

struct mq_attr {

long mq_flags; // Message queue description flags

long mq_maxmsg; // Maximum number of messages on queue

long mq_msgsize; // Maximum message size (in bytes)

long mq_curmsgs; // Number of messages currently in queue

};

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 49 / 58

Page 75: Process Management - Part2

Retrieving and Modifying a Message Queue Attributes

I mq getattr() returns a mq attr structure of the message queue.

#include <mqueue.h>

int mq_getattr(mqd_t mqdes, struct mq_attr *attr);

I mq setattr() sets attributes of the message queue.

#include <mqueue.h>

int mq_setattr(mqd_t mqdes, const struct mq_attr *newattr,

struct mq_attr *oldattr);

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 50 / 58

Page 76: Process Management - Part2

Sending and Receiving Messages

I mq send() adds the message msg ptr to the message queue.

#include <mqueue.h>

int mq_send(mqd_t mqdes, const char *msg_ptr, size_t msg_len,

unsigned int msg_prio);

I mq receive() removes the oldest message from the message queue.

#include <mqueue.h>

ssize_t mq_receive(mqd_t mqdes, char *msg_ptr, size_t msg_len,

unsigned int *msg_prio);

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 51 / 58

Page 77: Process Management - Part2

Message Notification

I A way for asynchronous communications.

I A process can request a notification of message arrival and thenperforms other tasks until it is notified.

I The mq notify() registers the calling process to receive a notifica-tion when a message arrives on the empty queue.

#include <mqueue.h>

int mq_notify(mqd_t mqdes, const struct sigevent *notification);

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 52 / 58

Page 78: Process Management - Part2

Linux Message Queue Pattern

[http://www.linuxpedia.org/index.php?title=Linux POSIX Message Queue]

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 53 / 58

Page 79: Process Management - Part2

Producer-Consumer via Message Queue (1/2)

I Producer

char *my_mq = "/mymq";

char *write_msg = "hello";

mqd_t mqd;

// Open an existing message queue

mqd = mq_open(my_mq, O_WRONLY);

// Write "hello" to the message queue

mq_send(mqd, write_msg, strlen(write_msg), 0);

// Close the message queue

mq_close(mqd);

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 54 / 58

Page 80: Process Management - Part2

Producer-Consumer via Message Queue (2/2)

I Consumer

#define MQ_MODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)

int MAX_SIZE = 100;

int MAX_NUM_MSG = 10;

char *my_mq = "/mymq";

char buf[MAX_SIZE];

mqd_t mqd;

struct mq_attr attr;

// Form the queue attributes

attr.mq_maxmsg = MAX_NUM_MSG;

attr.mq_msgsize = MAX_SIZE;

// Create message queue

mqd = mq_open(my_mq, O_RDONLY | O_CREAT, MQ_MODE, &attr);

// Read the message from the message queue

mq_receive(mqd, buf, MAX_NUM_MSG, NULL);

printf("Message: %s\n", buf);

// Close the message queue

mq_close(mqd);

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 55 / 58

Page 81: Process Management - Part2

Summary

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 56 / 58

Page 82: Process Management - Part2

Summary

I Inter-Process Communication: shared memory vs. message passing

I Message passing: data messages vs. stream

I Data stream: pipe, FIFO

I Data message: message queue

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 57 / 58

Page 83: Process Management - Part2

Summary

I Inter-Process Communication: shared memory vs. message passing

I Message passing: data messages vs. stream

I Data stream: pipe, FIFO

I Data message: message queue

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 57 / 58

Page 84: Process Management - Part2

Summary

I Inter-Process Communication: shared memory vs. message passing

I Message passing: data messages vs. stream

I Data stream: pipe, FIFO

I Data message: message queue

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 57 / 58

Page 85: Process Management - Part2

Summary

I Inter-Process Communication: shared memory vs. message passing

I Message passing: data messages vs. stream

I Data stream: pipe, FIFO

I Data message: message queue

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 57 / 58

Page 86: Process Management - Part2

Summary

I Inter-Process Communication: shared memory vs. message passing

I Message passing: data messages vs. stream

I Data stream: pipe, FIFO

I Data message: message queue

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 57 / 58

Page 87: Process Management - Part2

Questions?

Amir H. Payberah (Tehran Polytechnic) Processes 1393/7/5 58 / 58