Date post: | 20-Dec-2015 |
Category: |
Documents |
View: | 230 times |
Download: | 1 times |
Synchronization and IPC 2
Interprocess Communication
• Wide Variety of interprocess communication (IPC) mechanisms– OS dependent
– Examples• Pipes• Sockets• Shared memory
• Depends on whether the communicating processes share all or part of an address space
Synchronization and IPC 3
Beyond Semaphores
• Semaphores can help solve many traditional synchronization problems, BUT:– Have no direct relationship to the data being
controlled– Difficult to use correctly; easily misused
• Global variables
• Proper usage requires superhuman attention to detail
• Another approach – use programming language support
Synchronization and IPC 4
Monitors• Programming language construct that supports controlled
access to shared data– Compiler adds synchronization automatically– Enforced at runtime
• Encapsulates– Shared data structures– Procedures/functions that operate on the data– Synchronization between processes calling those procedures
• Only one process active inside a monitor at any instant– All procedures are part of critical section
Hoare, C.A.R., “Monitors: An Operating System Structuring Concept,” Communications of ACM, vol. 17, pp. 549-557, Oct. 1974
Synchronization and IPC 5
Monitors• High-level synchronization allowing safe sharing of an
abstract data type among concurrent processes.monitor monitor-name{
shared variable declarationsprocedure body P1 (…) {
. . .}procedure body P2 (…) {
. . .} procedure body Pn (…) {
. . .} {
initialization code}
}
Synchronization and IPC 6
Monitors
shared data
operations (procedures)at most one process in monitor
at a time
Synchronization and IPC 7
Monitors
• Mutual exclusion– only one process can be executing inside at any time
– if a second process tries to enter a monitor procedure, it blocks until the first has left the monitor
• Once inside a monitor, process may discover it is not able to continue
• condition variables provided within monitor• processes can wait or signal others to continue
• condition variable can only be accessed from inside monitor
• wait’ing process relinquishes monitor temporarily
Synchronization and IPC 8
Monitors• To allow a process to wait within the monitor, a
condition variable must be declared, ascondition x, y;
• Condition variable can only be used with the operations wait and signal.– The operation
wait(x);means that the process invoking this operation is suspended until another process invokes
signal(x);– The signal operation resumes exactly one suspended
process. If no process is suspended, then the signal operation has no effect.
Synchronization and IPC 10
Monitorsmonitor ProducerConsumer {
condition full, empty;
integer count = 0;
/* function prototypes */
void insert(item i);
item remove();
}
void producer();
void consumer();
void producer() {
item i;
while (1) {
/* produce item i */ ProducerConsumer.insert(i);
}
}
void consumer() {
item i;
while (1) {
i = ProducerConsumer.remove();
/* consume item i */
}
}
Synchronization and IPC 11
Monitorsvoid insert (item i) {
if (count == N) wait(full);
/* add item i */
count = count + 1;
if (count == 1) then signal(empty);
}
item remove () {
if (count == 0) wait(empty);
/* remove item into i */
count = count - 1;
if (count == N-1) signal(full);
return i;
}
Synchronization and IPC 12
Monitors• Hoare monitors: signal(c) means
– run waiter immediately
– signaler blocks immediately• condition guaranteed to hold when waiter runs
• Mesa monitors: signal(c) means– waiter is made ready, but the signaler may continue
• waiter runs when signaler leaves monitor (or waits)
• condition is not necessarily true when waiter runs again
– being woken up is only a hint that something has changed
• must recheck conditional case
Synchronization and IPC 13
Monitors (Mesa)void insert (item i) {
while (count == N) wait(full);
/* add item i */
count = count + 1;
if (count == 1) then signal(empty);
}
item remove () {
while (count == 0) wait(empty);
/* remove item into i */
count = count - 1;
if (count == N-1) signal(full);
return i;
}
Synchronization and IPC 14
Synchronization
• Semaphores– Easy to add to any language– Much harder to use correctly
• Monitors– Easier to use and to get it right– Must have language support
• See• Lampson, B.W., and Redell, D. D., “Experience with
Processes and Monitors in Mesa,” Communications of ACM, vol. 23, pp. 105-117, Feb. 1980.
• Redell, D. D. et al. “Pilot: An Operating System for a Personal Computer,” Communications of ACM, vol. 23, pp. 81-91, Feb. 1980.
Synchronization and IPC 15
Interprocess Communication
• Common IPC mechanisms – shared memory – read/write to shared region
• shmget(), shmctl() in Unix
• Memory mapped files in WinNT/2000
– semaphores - signal notifies waiting process• Shared memory or not
– software interrupts - process notified asynchronously • signal ()
– pipes - unidirectional stream communication
– message passing - processes send and receive messages• Across address spaces
Synchronization and IPC 16
IPC – Software Interrupts
• Similar to hardware interrupt.• Processes interrupt each other • Asynchronous! Stops execution then restarts
– Keyboard driven – e.g. cntl-C
– An alarm scheduled by the process expires • Unix: SIGALRM from alarm() or settimer()
– resource limit exceeded (disk quota, CPU time...)
– programming errors: invalid data, divide by zero
Synchronization and IPC 17
IPC – Software Interrupts• SendInterrupt(pid, num)
– Send signal type num to process pid, – kill() in Unix– (NT doesn’t allow signals to processes)
• HandleInterrupt(num, handler)– type num, use function handler – signal() in Unix– Use exception handler in WinNT/2000
• Typical handlers:– ignore– terminate (maybe w/core dump)– user-defined
Synchronization and IPC 18
IPC - Pipes
• Pipes are a uni-directional stream communication method between 2 processes– Unix/Linux
• 2 file descriptors
• Byte stream
– Win/NT • 1 handle
• Byte stream and structured (messages)
Synchronization and IPC 19
IPC – Pipes#include <iostream.h>#include <unistd.h#include <stdlib.h>#define BUFFSIZE 1024char data[ ] = “whatever”int pipefd[2]; /* file descriptors for pipe ends */ /* NO ERROR CHECKING, ILLUSTRATION ONLY!!!!! */ main() {
char sbBuf[BUFFSIZE];
pipe(pipefd); if (fork() > 0 ) { /* parent, read from pipe */
close(pipefd[1]); /* close write end */ read(pipefd[0], sbBuf, BUFFSIZE); /* do something with the data */
}else { /* child, write data to pipe */
close(pipefd[0]); /* close read end */ write(pipefd[1], data, sizeof(DATA)); close(pipefd[1]);exit(0);
}}
Synchronization and IPC 20
IPC – Message Passing
• Communicate information from one process to another via primitives:send(dest, &message)
receive(source, &message)
• Receiver can specify ANY
• Receiver can block (or not)
• Applicable to multiprocessor systems
Synchronization and IPC 21
IPC – Message Passingvoid Producer() {
while (TRUE) {
/* produce item */
build_message(&m, item);
send(consumer, &m);
receive(consumer, &m); /* wait for ack */
}
}
void Consumer {
while(TRUE) {
receive(producer, &m);
extract_item(&m, &item);
send(producer, &m); /* ack */
/* consume item */
}
}
Synchronization and IPC 22
IPC – Message Passing– send ( )
• Synchronous– Returns after data is sent– Blocks if buffer is full
• Asynchronous– Returns as soon as I/O started– Done?
» Explicit check» Signal
– Blocks if buffer is full
– receive ()• Sync.
– Returns if there is a message– Blocks if not
• Async.– Returns if there is a message– Returns if no message
Synchronization and IPC 23
IPC – Message Passing
• Indirect Communication – mailboxes– Messages are sent to a named area – mailbox– Processes read messages from the mailbox– Mailbox must be created and managed– Sender blocks if mailbox is full– Many to many communication
Synchronization and IPC 24
IPC – Message Passing• Scrambled messages (checksum) • Lost messages (acknowledgements)• Lost acknowledgements (sequence no.)• Process unreachable (down, terminates)• Naming• Authentication• Performance (from copying, message
building
Synchronization and IPC 25
SummaryProcesses, Threads, Synchronization, IPC
• Process – fundamental unit of concurrency; exists in some form in all modern OS’s
• Threads – a special adaptation of process for efficiency in Unix, Windows, etc.
• Synchronization – many methods to keep processes from tripping over each other
• IPC – many methods for communication among processes
Responsible for all of Chapter 2 of Tannenbaum, except §2.4 (“Classical IPC Problems”)