Mach was one of the first micro-kernels. It was a project of Carnegie-Mellon university to implement a fairly new theory. It came with a lot of new concepts:
Mach was the first micro-kernel to be successful, taken and improved by OSF/1 and other research groups. It was the base of MachOS, a mono-server operating system (with the UX server running on top of the Mach microkernel and providing BSD compatibility).
Mach does quite a lot of things for a micro-kernel:
GNU Mach was derived from OSF Mach. The last stable version is 1.3, and should be the last of the 1.x branch. The new 2.0 version, might be released sometime in the future, uses the OSKit framework for device drivers (allowing nearly all drivers from Linux 2.2 to be ported easily).
IPC with Mach is based on ports. A port is kernel managed entity which can be seen as a message queue, with one task having a ``receive right'' on the port, and any number of tasks having ``send rights'' to the port. The task having the receive right can read the messages sent by the tasks having send rights. Receive rights can be given to another task, and send rights can be given, destroyed or duplicated (rights are sent across tasks using IPCs). There is also a special ``send once'' right, which can be used only once, and is often used when waiting for an answer.
Communication across ports is asynchronous: a sending thread is not blocked until the receiving task received the message. This implies that all IPC messages must be copied (either logically or physically) inside the kernel and queued there, which slows down the IPC a lot.