MH (short for murgiahack) is a microkernel under active development. It is aimed at supporting modern hardware and to provide security and isolation to underlying processes.
MH is built for modularity and ease of experimentation. It is meant to be used as a stepping stone for building modular systems. It achieves this by having only one building block, a I/O device, and by providing mechanisms for userspace programs to create, discover and use these devices.
Furthermore it is possible to express naturally the hardware present in the machine with the same abstraction, thus requiring no special interface to assign hardware to userspace programs.
Overview of a MH System
In a system running MH, each process has its own local bus. The kernel
mantains a global list of devices.
If it has enough permissions, a process can add a device to its own local bus and use it.
There are three broad kinds of devices:
- User devices. These are devices created by processes, and it's the only inter-process communication mechanism present in the system.
- Kernel Devices. These are special devices created by the kernel, used to provide kernel services to a process – timers, memory allocation, etc.
- Hardware Devices. This is a mapping from real hardware to I/O devices. A special hardware device is the platform device, which gives access to the whole machine to a process.
The Process-Device interface
A process and a device communicate using three mechanisms:
- IO ports. Similar to Intel I/O space, a process can write, or read, an inline value to a specified port of the device. The meaning assigned to these action is device specific.
- DMA. A device can read or write directly to a process space. An I/O MMU mechanism is present so a device can only access memory explicitely exported by the process.
- IRQs. A device can send interrupts to a process.
The MH Process/Device Interface
You can take a look at my FOSDEM2016 slides, the murgiahack experiment, for more (outdated) information.