Figure 2: Definition of the IPC system call.

IPC(To, FromSpecifier, Timeouts) 

Arguments:                   Returns:
----------------------       -------------
ThreadId To
ThreadId FromSpecifier   ->  ThreadId From 
Word	 Timeouts


Argument Semantics:
---------------------
To == nilthread 
	-> IPC includes no send phase

To != nilthread 
	-> Destination thread and IPC includes a send phase	

FromSpecifier == nilthread 
	-> IPC includes no receive phase

FromSpecifier == anythread 
	-> Incoming messages are accepted from any thread or hardware interrupts and IPC includes a receive phase

FromSpecifier == anylocalthread 
	-> Incoming messages are accepted from any thread in the current address space and IPC includes a receive phase

FromSpecifier != (nilthread OR anythread OR anylocalthread)
	-> Incoming messages are only accepted from the specified thread and IPC includes a receive phase

Timeouts == RcvTimeout
	-> Receive phase waits until either a message transfer starts or the RcvTimeout expires. Ignored for send-only IPC.

Timeouts == SndTimeout
	-> If the send timeout expires before the message transfer could start then the IPC operation fails.

Return Semantics:
------------------
From <- Thread ID of the sender. The delivered thread IDs are always local unless they identify a thread running in a 			different address space.