• UNIX kernel is a “dumping ground for virtually every new feature or facility” • service operating system • multiprocessing • transparent distributed operation, message-passing • started on top of 4.3BSD code base
hold resources and run threads • threads are contexts of execution on processors • ports are unidirectional queues between tasks • messages are structured objects sent to ports
data — separate address spaces •no syscalls: a trap results in a message xfer •Everything is a server •even a filesystem •BSD code components turned into Mach servers •component failure does not take the system down
of APIs! • everything is a file, right • Implementation details are not defined! • Linux • BSD (Free, Net, Open, DragonFly) • Solaris (Illumos, SmartOS) • Darwin (XNU kernel) • definitely the most fun one
a Mach task • A task is a set of: • virtual address space (struct vmmap) • port namespace (struct ipc_space) • a set of execution thread states • A process extends that by: • UNIX credentials (pid, uid, etc) • file descriptor table • signals • ...
receive right •(it actually is a port identifier) •Many send/send-once rights •Capabilities associate with port namespaces •Namespaces associate with tasks •A thread within a task references a port by a local name (like FD)