Thursday, July 30, 2009
at
2:39 AM
|
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
* 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.
* Asymmetric variant
- receive (id, message) – receive a message from any
Process, pid stored in id
Indirect Communication
*Messages are directed and received from mailboxes (als
Referred to as ports).
- Each mailbox has a unique id.
- Processes can communicate only if they share a mailbox.
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 communications
Links.
- Link may be unidirectional or bi-directional.
* Operations
- create a new mailbox
- send and receive messages through mailbox
- destroy a mailbox
* Primitives are defined as:
Send (A, message) – send a message to mailbox A
Receive (A, message) – receive a message from mailbox A
* Mailbox sharing
- P1, P2, and P3 share mailbox A.
- P1, sends; P2 and P3 receive.
- Who gets the message?
* 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.
* locking 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.
1. Zero capacity – 0 messages
Sender must wait for receiver (rendezvous).
2. Bounded capacity – finite length of nmessages
Sender must wait if link full.
3. Unbounded capacity – infinite length
Sender never waits.
Exercise: Read about Mach and Windows 2000
Producer consumer example
In computer science the producer-consumer problem (also known as the bounded-buffer problem) is a classical example of a multi-process synchronization problem. The problem describes two processes, the producer and the consumer, who share a common, fixed-size buffer. The producer's job is to generate a piece of data, put it into the buffer and start again. At the same time the consumer is consuming the data (i.e. removing it from the buffer) one piece at a time. The problem is to make sure that the producer won't try to add data into the buffer if it's full and that the consumer won't try to remove data from an empty buffer.The solution for the producer is to go to sleep if the buffer is full. The next time the consumer removes an item from the buffer, it wakes up the producer who starts to fill the buffer again. In the same way, the consumer goes to sleep if it finds the buffer to be empty. The next time the producer puts data into the buffer, it wakes up the sleeping consumer. The solution can be reached by means of inter-process communication, typically using semaphores. An inadequate solution could result in a deadlock where both processes are waiting to be awakened.
* Processes must name each other explicitly:
- Send (P, message) – send a message to process P
- receive (Q, message) – receive a message from process Q
* 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.
* Asymmetric variant
- receive (id, message) – receive a message from any
Process, pid stored in id
Indirect Communication
*Messages are directed and received from mailboxes (als
Referred to as ports).
- Each mailbox has a unique id.
- Processes can communicate only if they share a mailbox.
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 communications
Links.
- Link may be unidirectional or bi-directional.
* Operations
- create a new mailbox
- send and receive messages through mailbox
- destroy a mailbox
* Primitives are defined as:
Send (A, message) – send a message to mailbox A
Receive (A, message) – receive a message from mailbox A
* Mailbox sharing
- P1, P2, and P3 share mailbox A.
- P1, sends; P2 and P3 receive.
- Who gets the message?
* 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.
* locking 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.
1. Zero capacity – 0 messages
Sender must wait for receiver (rendezvous).
2. Bounded capacity – finite length of nmessages
Sender must wait if link full.
3. Unbounded capacity – infinite length
Sender never waits.
Exercise: Read about Mach and Windows 2000
Producer consumer example
In computer science the producer-consumer problem (also known as the bounded-buffer problem) is a classical example of a multi-process synchronization problem. The problem describes two processes, the producer and the consumer, who share a common, fixed-size buffer. The producer's job is to generate a piece of data, put it into the buffer and start again. At the same time the consumer is consuming the data (i.e. removing it from the buffer) one piece at a time. The problem is to make sure that the producer won't try to add data into the buffer if it's full and that the consumer won't try to remove data from an empty buffer.The solution for the producer is to go to sleep if the buffer is full. The next time the consumer removes an item from the buffer, it wakes up the producer who starts to fill the buffer again. In the same way, the consumer goes to sleep if it finds the buffer to be empty. The next time the producer puts data into the buffer, it wakes up the sleeping consumer. The solution can be reached by means of inter-process communication, typically using semaphores. An inadequate solution could result in a deadlock where both processes are waiting to be awakened.
Posted by
Roger
Labels:
os 4
0 comments:
Post a Comment