The MachMicrokernel provides a simple InterProcessCommunication mechanism based on ports. Basically, a process can open a port, and other processes can then send messages to it which can be received by the owning process; a message is basically a block of bytes. Mach manages the ports, and provides guaranteed, in-order delivery, with large messages being handled efficiently by sharing pages between address spaces. There is a sophisticated permission mechanism which restricts the operations that processes can perform on ports.
See http://www.gnu.org/software/hurd/gnumach-doc/mach_4.html#SEC14