Chapter 10 Message Passing.

Slides:



Advertisements
Similar presentations
Processes Management.
Advertisements

– R 7 :: 1 – 0024 Spring 2010 Parallel Programming 0024 Recitation Week 7 Spring Semester 2010.
Concurrency Important and difficult (Ada slides copied from Ed Schonberg)
1 Concurrency Concurrency can occur at four levels: 1.Machine instruction level – may have both an adder and a multiplier that are used at the same time.
Concurrency: message passing1 ©Magee/Kramer 2 nd Edition Chapter 10 Message Passing.
Concurrency: monitors & condition synchronization1 ©Magee/Kramer 2 nd Edition Chapter 5 Monitors & Condition Synchronization.
Concurrency: monitors & condition synchronization1 ©Magee/Kramer 2 nd Edition COMP60611 Fundamentals of Parallel and Distributed Systems Lecture 8b Monitors.
Informationsteknologi Wednesday, September 26, 2007 Computer Systems/Operating Systems - Class 91 Today’s class Mutual exclusion and synchronization 
Enforcing Mutual Exclusion Message Passing. Peterson’s Algorithm for Processes P0 and P1 void P0() { while( true ) { flag[ 0 ] = false; /* remainder */
Introduction in algorithms and applications Introduction in algorithms and applications Parallel machines and architectures Parallel machines and architectures.
Slides for Chapter 6: Operating System support From Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edition 3, © Addison-Wesley.
Threads ICW Lecture 10 Tom Chothia. Last Time XML JDOM XPATH.
1 Semaphores Special variable called a semaphore is used for signaling If a process is waiting for a signal, it is suspended until that signal is sent.
Inter Process Communication:  It is an essential aspect of process management. By allowing processes to communicate with each other: 1.We can synchronize.
Synchronization in Java Fawzi Emad Chau-Wen Tseng Department of Computer Science University of Maryland, College Park.
02/02/2004CSCI 315 Operating Systems Design1 Interprocesses Communication Notice: The slides for this lecture have been largely based on those accompanying.
Asynchronous Message Passing EE 524/CS 561 Wanliang Ma 03/08/2000.
02/01/2010CSCI 315 Operating Systems Design1 Interprocess Communication Notice: The slides for this lecture have been largely based on those accompanying.
Concurrency - 1 Tasking Concurrent Programming Declaration, creation, activation, termination Synchronization and communication Time and delays conditional.
On the Duality of Operating System Structures Hugh C. Lauer Xerox Corporation Roger M. Needham Cambridge University Presented By: Ashwini Kulkarni.
12/1/98 COP 4020 Programming Languages Parallel Programming in Ada and Java Gregory A. Riccardi Department of Computer Science Florida State University.
Java Threads 11 Threading and Concurrent Programming in Java Introduction and Definitions D.W. Denbo Introduction and Definitions D.W. Denbo.
Concurrency: dynamic systems1 ©Magee/Kramer 2 nd Edition Chapter 9 Dynamic Systems.
CSC321 §6 Modelling Processes using FSP 1 Chapter 6 Modelling Processes using FSP.
Semaphores, Locks and Monitors By Samah Ibrahim And Dena Missak.
1 Concurrency Architecture Types Tasks Synchronization –Semaphores –Monitors –Message Passing Concurrency in Ada Java Threads.
Internet Software Development Controlling Threads Paul J Krause.
3.1 Silberschatz, Galvin and Gagne ©2009Operating System Concepts with Java – 8 th Edition Chapter 3: Processes.
CSC321 Concurrent Programming: §5 Monitors 1 Section 5 Monitors.
1 Concurrency: Mutual Exclusion and Synchronization Chapter 5.
ICS 313: Programming Language Theory Chapter 13: Concurrency.
Computer Architecture and Operating Systems CS 3230: Operating System Section Lecture OS-4 Process Communication Department of Computer Science and Software.
Concurrency Control 1 Fall 2014 CS7020: Game Design and Development.
Multi-Threading in Java
13-1 Chapter 13 Concurrency Topics Introduction Introduction to Subprogram-Level Concurrency Semaphores Monitors Message Passing Java Threads C# Threads.
Channels. Models for Communications Synchronous communications – E.g. Telephone call Asynchronous communications – E.g. .
CSC321 §8 Implementing FSP Models in Java 1 Section 8 Implementing FSP Models in Java.
Chapter 5 Concurrency: Mutual Exclusion and Synchronization Operating Systems: Internals and Design Principles, 6/E William Stallings Patricia Roy Manatee.
Threads in Java Two ways to start a thread
Threaded Programming in Python
Chapter 3: Process Concept
“Language Mechanism for Synchronization”
Advanced Topics in Concurrency and Reactive Programming: Asynchronous Programming Majeed Kassis.
Condition Synchronization
Processes Overview: Process Concept Process Scheduling
CGS 3763 Operating Systems Concepts Spring 2013
Threads and Concurrency in Java: Part 2
Lecture 12 Concepts of Programming Languages
Concurrency: Mutual Exclusion and Synchronization
Monitors Chapter 7.
Inter Process Communication (IPC)
Slides for Chapter 6: Operating System support
Multithreading.
Midterm review: closed book multiple choice chapters 1 to 9
Channels.
Monitors Chapter 7.
Concurrency: Mutual Exclusion and Process Synchronization
Subject : T0152 – Programming Language Concept
Process Description and Control
Monitors Chapter 7.
Concurrency, Processes and Threads
Computer Science 312 Concurrent Programming I Processes and Messages 1.
Channels.
Channels.
Parallel programming in Java
Monitors and Inter-Process Communication
Software Engineering and Architecture
COT 5611 Operating Systems Design Principles Spring 2014
Processes August 10, 2019 OS:Processes.
Presentation transcript:

Chapter 10 Message Passing

Concepts: synchronous message passing - channel asynchronous message passing - port - send and receive / selective receive rendezvous bidirectional comms - entry - call and accept ... reply Models: channel : relabelling, choice & guards port : message queue, choice & guards entry : port & channel Practice: distributed computing (disjoint memory) threads and monitors (shared memory)

10.1 Synchronous Message Passing - channel Sender send(e,c) Receiver v=receive(c) Channel c one-to-one send(e,c) - send the value of the expression e to channel c. The process calling the send operation is blocked until the message is received from the channel. v = receive(c) - receive a value into local variable v from channel c. The process calling the receive operation is blocked waiting until a message is sent to the channel. cf. distributed assignment v = e

synchronous message passing - applet A sender communicates with a receiver using a single channel. The sender sends a sequence of integer values from 0 to 9 and then restarts at 0 again. Channel<Integer> chan = new Channel<Integer>(); tx.start(new Sender(chan,senddisp)); rx.start(new Receiver(chan,recvdisp)); Instances of ThreadPanel Instances of SlotCanvas

Java implementation - channel public class Channel<T> extends Selectable { T chan_ = null; public synchronized void send(T v) throws InterruptedException { chan_ = v; signal(); while (chan_ != null) wait(); } public synchronized T receive() block(); clearReady(); //part of Selectable T tmp = chan_; chan_ = null; notifyAll(); //should be notify() return(tmp); The implementation of Channel is a monitor that has synchronized access methods for send and receive. Selectable is described later.

Java implementation - sender class Sender implements Runnable { private Channel<Integer> chan; private SlotCanvas display; Sender(Channel<Integer> c, SlotCanvas d) {chan=c; display=d;} public void run() { try { int ei = 0; while(true) { display.enter(String.valueOf(ei)); ThreadPanel.rotate(12); chan.send(new Integer(ei)); display.leave(String.valueOf(ei)); ei=(ei+1)%10; ThreadPanel.rotate(348); } } catch (InterruptedException e){}

Java implementation - receiver class Receiver implements Runnable { private Channel<Integer> chan; private SlotCanvas display; Receiver(Channel<Integer> c, SlotCanvas d) {chan=c; display=d;} public void run() { try { Integer v=null; while(true) { ThreadPanel.rotate(180); if (v!=null) display.leave(v.toString()); v = chan.receive(); display.enter(v.toString()); } } catch (InterruptedException e){}

model range M = 0..9 // messages with values up to 9 SENDER = SENDER[0], // shared channel chan SENDER[e:M] = (chan.send[e]-> SENDER[(e+1)%10]). RECEIVER = (chan.receive[v:M]-> RECEIVER). // relabeling to model synchronization ||SyncMsg = (SENDER || RECEIVER) /{chan/chan.{send,receive}}. LTS? How can this be modeled directly without the need for relabeling? message operation FSP model send(e,chan) ? v = receive(chan) ? chan.[e] chan.[v:M]

Sender Channels Sender c1 Sender[n] c2 cn selective receive How send(e,c) How should we deal with multiple channels? Sender send(e,c) Channels Sender[n] send(en,cn) c1 c2 cn select when G1 and v1=receive(chan1) => S1; or when G2 and v2=receive(chan2) => S2; … when Gn and vn=receive(chann) => Sn; end Select statement... How would we model this in FSP?

selective receive CARPARKCONTROL(N=4) = SPACES[N], ARRIVALS CARPARK CONTROL DEPARTURES arrive depart CARPARKCONTROL(N=4) = SPACES[N], SPACES[i:0..N] = (when(i>0) arrive->SPACES[i-1] |when(i<N) depart->SPACES[i+1] ). Interpret as channels ARRIVALS = (arrive->ARRIVALS). DEPARTURES = (depart->DEPARTURES). ||CARPARK = (ARRIVALS||CARPARKCONTROL(4) ||DEPARTURES). Implementation using message passing?

Java implementation - selective receive class MsgCarPark implements Runnable { private Channel<Signal> arrive,depart; private int spaces,N; private StringCanvas disp; public MsgCarPark(Channel<Signal> a, Channel<Signal> l, StringCanvas d,int capacity) { depart=l; arrive=a; N=spaces=capacity; disp=d; } … public void run() {…} Implement CARPARKCONTROL as a thread MsgCarPark which receives signals from channels arrive and depart.

Java implementation - selective receive public void run() { try { Select sel = new Select(); sel.add(depart); sel.add(arrive); while(true) { ThreadPanel.rotate(12); arrive.guard(spaces>0); depart.guard(spaces<N); switch (sel.choose()) { case 1:depart.receive();display(++spaces); break; case 2:arrive.receive();display(--spaces); } } catch InterrruptedException{} See Applet

10.2 Asynchronous Message Passing - port Sender send(e,c) Sender send(e,c) Receiver v=receive(p) Port p Sender[n] send(en,p) many-to-one send(e,p) - send the value of the expression e to port p. The process calling the send operation is not blocked. The message is queued at the port if the receiver is not waiting. v = receive(p) - receive a value into local variable v from port p. The process calling the receive operation is blocked if there are no messages queued to the port.

asynchronous message passing - applet Two senders communicate with a receiver via an “unbounded” port. Each sender sends a sequence of integer values from 0 to 9 and then restarts at 0 again. Port<Integer> port = new Port<Integer> (); tx1.start(new Asender(port,send1disp)); tx2.start(new Asender(port,send2disp)); rx.start(new Areceiver(port,recvdisp)); Instances of ThreadPanel Instances of SlotCanvas

Java implementation - port class Port<T> extends Selectable { Queue<T> queue = new LinkedList<T>(); public synchronized void send(T v){ queue.add(v); signal(); } public synchronized T receive() throws InterruptedException { block(); clearReady(); return queue.remove(); The implementation of Port is a monitor that has synchronized access methods for send and receive.

LTS? port model range M = 0..9 // messages with values up to 9 set S = {[M],[M][M]} // queue of up to three messages PORT //empty state, only send permitted = (send[x:M]->PORT[x]), PORT[h:M] //one message queued to port = (send[x:M]->PORT[x][h] |receive[h]->PORT ), PORT[t:S][h:M] //two or more messages queued to port = (send[x:M]->PORT[x][t][h] |receive[h]->PORT[t] ). // minimise to see result of abstracting from data values ||APORT = PORT/{send/send[M],receive/receive[M]}. LTS? What happens if send 4 values?

Safety? model of applet AsynchMsg ASENDER = ASENDER[0], port:PORT ARECEIVER S[1..2].port.send port.receive ASENDER = ASENDER[0], ASENDER[e:M] = (port.send[e]->ASENDER[(e+1)%10]). ARECEIVER = (port.receive[v:M]->ARECEIVER). ||AsyncMsg = (s[1..2]:ASENDER || ARECEIVER||port:PORT) /{s[1..2].port.send/port.send}. Safety?

Client Server 10.3 Rendezvous - entry Rendezvous is a form of request-reply to support client server communication. Many clients may request service, but only one is serviced at a time. Client Server req=accept(entry) res=call(entry,req) reply(entry,res) Request message Reply suspended perform service

Rendezvous res=call(e,req) - send the value req as a request message which is queued to the entry e. The calling process is blocked until a reply message is received into the local variable req. req=accept(e) - receive the value of the request message from the entry e into local variable req. The calling process is blocked if there are no messages queued to the entry. reply(e,res) - send the value res as a reply message to entry e. The model and implementation use a port for one direction and a channel for the other. Which is which?

rendezvous - applet Two clients call a server which services a request at a time. Entry<String,String> entry = new Entry<String,String> (); clA.start(new Client(entry,clientAdisp,"A")); clB.start(new Client(entry,clientBdisp,"B")); sv.start(new Server(entry,serverdisp)); Instances of ThreadPanel Instances of SlotCanvas

Java implementation - entry Entries are implemented as extensions of ports, thereby supporting queuing and selective receipt. The call method creates a channel object on which to receive the reply message. It constructs and sends to the entry a message consisting of a reference to this channel and a reference to the req object. It then awaits the reply on the channel. The accept method keeps a copy of the channel reference; the reply method sends the reply message to this channel.

Java implementation - entry class Entry<R,P> extends Port<R> { private CallMsg<R,P> cm; private Port<CallMsg<R,P>> cp = new Port<CallMsg<R,P>>();   public P call(R req) throws InterruptedException { Channel<P> clientChan = new Channel<P>(); cp.send(new CallMsg<R,P>(req,clientChan)); return clientChan.receive(); } public R accept() throws InterruptedException { cm = cp.receive(); return cm.request; public void reply(P res) throws InterruptedException { cm.replychan.send(res); private class CallMsg<R,P> { R request; Channel<P> replychan; CallMsg(R m, Channel<P> c) {request=m; replychan=c;} } } Do call, accept and reply need to be synchronized methods?

model of entry and applet We reuse the models for ports and channels … CLIENT() entry:ENTRY SERVER EntryDemo entry.accept entry.call[M] set M = {replyA,replyB} // reply channels ||ENTRY = PORT/{call/send, accept/receive}. CLIENT(CH='reply) = (entry.call[CH]->[CH]->CLIENT). SERVER = (entry.accept[ch:M]->[ch]->SERVER). ||EntryDemo = (CLIENT('replyA)||CLIENT('replyB) || entry:ENTRY || SERVER ). Action labels used in expressions or as parameter values must be prefixed with a single quote.

rendezvous Vs monitor method invocation What is the difference? … from the point of view of the client? … from the point of view of the server? … mutual exclusion? Which implementation is more efficient? … in a local context (client and server in same computer)? … in a distributed context (in different computers)?

Summary Concepts Models Practice synchronous message passing – channel asynchronous message passing – port - send and receive / selective receive rendezvous bidirectional comms - entry - call and accept ... reply Models channel : relabelling, choice & guards port : message queue, choice & guards entry : port & channel Practice distributed computing (disjoint memory) threads and monitors (shared memory)

Concepts Models Practice Course Outline Processes and Threads Concurrent Execution Shared Objects & Interference Monitors & Condition Synchronization Deadlock Safety and Liveness Properties Model-based Design Dynamic systems Message Passing Concepts Models Practice Concurrent Software Architectures Timed Systems