Back to main page
The Fiasco µ-Kernel
Site Navigation:

Quick links:

Fiasco FAQ

Questions answered in this FAQ

General µ-kernel-related questions Questions about Fiasco Common Problems

Questions and Answers

There are so many kernels already... Why on earth are you writing another kernel?
The DROPS project is based on L4, so we need an L4-compatible µ-kernel. However, L4/x86 has some shortcomings which make it unsuitable as a base in the long term (non-availability, not easily maintainable); so we're developing a compatible replacement. Retargeting DROPS to a different kernel would be more work than just writing a new L4-compatible kernel. (hohmuth 98/10/06)

What is a µ-kernel?
A µ-kernel, or microkernel, is an operating system kernel which provides only essential services such as tasks, threads, inter-process communication (IPC), and memory management primitives. All servers -- including device drivers -- run in user mode and are treated by the µ-kernel just like any other application. Since each server runs in its own address space, all these objects are protected from each other.

This design has a number of sofware-technological advantages:

  • Servers for different APIs, file systems, and even different operating system personalities can coexist in one system.
  • The system is very flexible. For a given application, only selected servers need to be added to the system. Modified servers can be tested online; they do not require building or booting a new kernel and do not affect the running system.
  • Server or device driver malfunction is isolated to the tasks they are running in.
  • Interdependencies between the servers of a system can be restricted so that the trusted computing base for security-critical applications can be reduced.
  • The mechanisms provided by the µ-kernel (IPC, multithreading) can be used by all servers and applications.
  • A clean µ-kernel interface enforces a more modular system structure.

Please also see the answer to the next question. (hohmuth 98/10/07)

What does a µ-kernel-based system look like?
The DROPS project is an example for a µ-kernel-based system.

View an image of the structure of the DROPS system

In DROPS, real-time (multimedia) and time-sharing components coexist on one system. In DROPS, a port of the Linux kernel to L4, L4Linux, provides a standard time-sharing API; it is binary-compatible to Linux (i.e., it runs unmodified Linux binaries). L4Linux not only runs on L4/x86, but also on Fiasco.

Real-time applications use servers which are independent from L4Linux. However, L4Linux applications can use these servers, too, in time-sharing mode via stub drivers in the L4Linux server.

Because of its better support for real-time applications, Fiasco is intended to replace L4/x86 in the DROPS system. (hohmuth 98/10/07)

What is new in the Fiasco µ-kernel?
Fiasco is the first L4-compatible kernel which supports real-time applications: The kernel is preemptible at virtually any time, guaranteeing low activation latencies for threads with high priorities. Because it is constructed around non-blocking synchronization strategies, in-kernel deadlocks and priority inversion are prevented while at the same time programming the kernel becomes easier.

Other than that, Fiasco is just another implementation of the L4 µ-kernel interface. It is a second-generation µ-kernel, faithfully following the L4 design principles: Improving performance by careful kernel design, and providing only mechanisms for application writers, but not imposing mandantory policies. (hohmuth 98/10/07)

So you have written your kernel in C++. Doesn't that mean that it is slow?
No. When using C++ carefully, C++ programs are not slower than programs written in C. C++ just saves a lot of typing effort.

Of course, Fiasco will never reach L4/x86 for low-level benchmarks, because L4/x86 has been written in hand-optimized assembler code. But beating L4/x86 is not the point of Fiasco; the point is to provide a fast, maintainable, readable, and freely-distributable implementation of the L4 interface. (hohmuth 98/10/07)

What hardware does Fiasco run on?
Fiasco runs on PCs with any x86 CPU from i486 up. A Pentium-class CPU is recommended. Fiasco doesn't yet support SMP, although we currently work on an SMP port.

Fiasco can also be configured to run inside Bochs and Plex86.

Fiasco requires 2 MB RAM and currently manage up to 1GB RAM. (hohmuth 2001/11/06, update: adam 2004/04/20)

Why doesn't Fiasco run on i386s?
Fiasco needs page-table-based write protection in kernel mode (WP bit in CR0 register is set), which is available only in i486s and up.

Linux emulates this mode by explicitly checking for write protection before writing to user memory. A similar hack could be added to Fiasco aswell. (hohmuth 01/05/08)

Do you plan to port the GNU Hurd to the Fiasco µ-kernel?
No, we don't. However, there is a group that has started to work on an L4 port for the Hurd. Please visit their website. (hohmuth 01/11/02)

Do you know that in the Italian language, the word ``Fiasco'' means ``terrible failure''?
Yes, I do. Thank you for the kind warning.

Here is some news for you: ``Fiasco'' means ``terrible failure'' in almost any language, including English, Spanish, Portuguese, and German (where it is actually spelled ``Fiasko'').

I can't get the serial communication between my test machine and my development host to work. What's wrong?
Maybe the communication speeds of the two serial interfaces don't match (check your terminal settings or your .gdbinit file, respectively, and check the Fiasco boot command line), or the current data rate is just too high for your hardware? The default rate is 115200 bits per second. The manpage describes how to change this setting for Fiasco. (hohmuth 98/10/20)

How do I need to configure Fiasco to run in Bochs or Plex86?
Bochs' and Plex86's PC emulation is limited; however you can configure Fiasco to run despite these limitations.

For Plex86:

  • In kern/config.cpp, set pic_prio_modify to CONST_FALSE.
For Bochs:
  • In kern/config.cpp, set pic_prio_modify to CONST_FALSE (as with Plex86).
  • Additionally, set hlt_works_ok to CONST_FALSE, and set broken_cpuid to CONST_TRUE.
  • You may need this patch for Bochs to get the CMPXCHG8B instruction going.
(hohmuth 2001/11/07)

When I start Fiasco, I get the error message "failed assertion: `size != PAGE_SIZE'".
This is a known bug in an older version of Fiasco. Either upgrade to the latest version (available via SVN), or work around the problem by adding the flag -nopentium to the command line of Rmgr in your menu.lst file. (hohmuth 2001/11/07)

Last modified: Thu Mar 29 2007, 10.49:01 CEST

Team Fiasco