A multi-tasking, multi-threaded, micro-kernel  



- implement floppy/hard drive drivers

- load an arbitrary sector from a drive


- implement FAT12/16/32 filesystem

- implement drive and filesystem type discovery

- load an arbitrary file from a drive

v 0.3.0

- strip BOOT.SYS to become a protected mode loader

--- remove interrupt handlers; dedicated handlers only

--- remove video; use VGA mode 3 only

--- simplify keyboard; alphanumeric keys only

--- remove timer, CMOS

--- simplify DMA

- use BOOT.SYS to load all device drivers dynamically


- upgrade shell with command interpreter and interactivity

- add shell commands for all system drivers

- upgrade shell to allow loading/execution of shell scripts


- create message-passing subsystem: a generic message server with a single entry-point which takes as arguments an integer representing the message and an array of void* representing parameters; and a message server registry, which take as arguments the ID of a message server and returns a handle to the server

- convert all device drivers to message servers

- convert all shell commands to use the message server architecture


- load an execute an arbitrary object file; requires:

--- a process model describing the entry point, size, etc.

--- a system-call interface to access the system servers

- use global kernel memory for all process memory

- use a call gate for the system-call interface

v 0.7.0

- create a scheduler to execute multiple processes simultaneously; use explicit context-switching

v 0.8.0

- use task-state segments to perform context-switching

- use local descriptor tables for each process

- load the LDT's with the same global kernel selectors

- adjust context-switching to use the LDT's


- allocate a dedicated memory space for each process, using a specified heap size and stack size

- adjust memory allocator to use the current process's memory space

- adjust all system servers to store all process-specific data using memory-allocator

- all LDT's will be preloaded with the call gate for the message server registry; when a system server is requested, the call gate for that service's message server will be placed in the LDT


- load and execute any number of arbitrary executable files, using a well-defined object code format