
Figure 8: PCB structure for message passing
PROCEDURE send(dest, msga)
IF dest waiting for message from source
THEN copy mesga into dest.mesgb {receive buffer}
{i.e. copy message content from sender to
receiver}
schedule dest {state := ready & put in ready queue}
ELSE current.state = waiting {for receiver}
insert current at end of dest sender queue
END
END
PROCEDURE receive(source, msgb)
IF source in current.senderQ
THEN remove PCB from senderQ
copy source.msga to msgb
{i.e. copy message contents from sender to receiver
address space}
schedule source {state := ready & put in readyQ}
ELSE current.state := waiting {for sender}
END ;
What happens in asynchronous message passing ? How would that be implemented ?