Presenting Wingert OS

WIesbaden Next Generation Experimental Real-Time Operating System
   or, for recursive acronym aficionados:
WINGERT Is a New Great Embedded Real-Time Operating System

Wingert is a German word in Rhine-Hessian dialect for a vineyard, derived from the Old High German word wîngart literally translated wine garden.

What is Wingert OS?

Wingert OS is a research operating system designed as a platform to explore novel design patterns for embedded multicore systems with mixed-criticality requirements. Strongly influenced by microkernel designs like L4, we think that a kernel providing a minimal set of abstractions and fast context switches is crucial to achieve high performance and high reliability in mixed-criticality embedded systems.

We focus on safety critical embedded real-time applications by making deterministic system behavior a first class design requirement. We also incorporate partitioning to enforce strict separation of applications running on top of the kernel, and virtualization techniques to run general purpose operating systems like Linux at the same time.

We see Wingert OS as the ideal platform to implement and evaluate the latest research results in multiprocessor real-time scheduling theory and mixed-criticality system design.

Differences to other operating systems

From an operating system design point of view, the main distinctiveness of Wingert OS compared to other operating systems is the low-level abstraction model named "body and soul" instead of threads as the basic entity of execution. Having fork/join-operation as first class primitives allows us to efficiently leverage symmetric and asymmetric communication patterns.

Previous research results showed that fast symmetric communication with a fast context switch mechanism is the key to superior IPC performance (L4 family), but also that asymmetric communication patterns suit well to micro kernel systems (QNX, Mach).

In Wingert OS, we migrate a single kernel "soul" from user space "body" to "body" for fast synchronous communication. The invocation of a new body resembles an RPC call to a remote address space, while keeping a single entity in control of the execution flow and to reduce context switching overhead in the kernel. This concept is akin to the thread migration concept in Ford's modification to MACH and SUN's Spring kernel; and borrows from superior context switch times of single-stack-kernel usually found in embedded systems.

For asynchronous communication, we further reduce context switching by using a mechanism named "lazy forking" where we follow the forked path in the first place and keep the original forking context on hold until the forked path eventually blocks. Assuming there is no blocking point, the forked path returns the result and joins gracefully without any overhead.

We consider deterministic behavior to be a fundamental element that should be provided by all services offered by the kernel. This is the key condition to guarantee real-time behavior for any system constructed on top of the kernel. Therefore, we think of real-time scheduling and priority inversion as important issues that must be visible and understood at kernel level already. To solve priority inversion in drivers shared across multiple criticality levels, we implemented different scheduling policies at kernel level (global and partitioned EDF and FIFO scheduling) and combine these with a Criticality Inheritance Protocol.

We also propose Wingert OS as a platform to implement and benchmark latest research results: new scheduling algorithms and locking protocols. In contrast to other multiprocessor scheduling testbeds like LitmusRT, we start with a clean, minimal approach and add features as needed, and not by using a complex OS kernel in the hope that the kernel components provide real-time capabilities on their own already.

Summary

  • Minimal deterministic kernels with the right level of abstraction are the perfect basis to construct real-time systems.
  • A hierarchical design based on simple and deterministic levels is the key to construct mixed-criticality systems.
  • The concept of body and soul keeps synchronous communication fast and allows us to efficiently construct multi-level safety and security systems in user space.
  • Built-in fork/join-primitives allow to implement fast asynchronous communication patterns. This, for instance, is used to efficiently implement the runtime bits of the OpenMP framework.
  • We see Wingert OS as a testbed to implement latest results of real-time scheduling research, for new scheduling algorithms and locking protocols.