Halos has the following goals:
- To run the Jail VM
Provide the services necessary for the Jail virtual machine to run.
The Jail VM is being developed here
- To be POSIX/SUSv3 compliant
That does not mean "to provide all the tools that POSIX prescribes
for operating systems": it means "to provide the semantics for
system calls as prescribed by POSIX/SUSv3". The tools that will run
on Halos are outside the scope of this project
Note: Halos-the-kernel
provides nothing even close to
system calls. However, there will be a kernel-space driver that will
provide the necessary system calls for POSIX compliance..
- To develop a micro-kernel
Halos will be based on a micro-kernel architecture: it will provide:
- memory management for physical memory
- event management for hardware events (i.e. the
possibility to
register handlers for hardware events)
- all the necessary building blocks to add things
like:
- scheduling
- inter-process
communication
- driver development
- it will at
most provide a minimalist API for kernel services but all
drivers that can live in user-space, shall live in user-space. Note,
though, that you need a driver to be able to live in user-space...
- To target x86, PowerPC and SPARC (first)
These are the three platforms that are deployed on the widest
scale, and present the interesting challenge of being big-endian and
little-endian, not having the same atomic instructions, etc.
These are also the primary target architectures for the Jail
VM
- To be multi-boot compliant
at least on x86, be loadable by the GRUB
- To use Newlib as a libc
so as to not have to write a libc ourselves
The architecture
The kernel's life-cycle goes through three phases: bootstrapping,
initialization and running. Bootstrapping is basically the process of
being loaded by a boot loader such as GNU's GRUB. Initialization
basically means preparing the different subsystems for action and
running can either be a simple while (1); or a call into a scheduler.
The subsystems are:
- event handling
- physical memory management
- driver management
Did you note that there is no virtual memory, no scheduling, no
filesystem, no networking, no human interface, ... in there? That's
because Halos is a micro-kernel. Usually, with a micro-kernel we mean a
kernel that doesn't do much of anything other than inter-process
communication. Halos doesn't assume that there is such a thing as a
process (though it provides a convenience API for those that want to
use it, to make sure schedulers will be compatible with eachother at
least on that point). It doesn't assume that there is such a thing as a
file system, or a human interface, or a human being for that matter.
Halos provides the basic architecture to take control of the machine.
To do anything more than that, you need drivers - which it will be
happy to manage for you. Hence, some would say Halos is not a
micro-kernel: it's a nano-kernel. I'm fine with that - as long as you
get the meaning, all is well. |