This page provides a general description of XOS with
emphasis on the changes in the current major version (version 4).
XOS is a general purpose protected mode operating
system for the x86 32-bit PC architecture (also referred to as IA-32).
XOS was originally written when the only available x86 32-bit PCs
had a 16MHz 80386 CPU and, at most, 1MB of RAM, and was designed to
be usable in that environment. To keep it small and fast, the
kernel was written in assembler, although most of the associated
user mode programs were written in C. The available execution
environment has changed quite a bit since then and XOS has been
expanded and we have added new features such as additional CPU power
and memory have become
available. It still has a strong focus on efficiency and has NOT
grown uncontrollably as have most other systems.
The current version of XOS can be run in as little as
2MB (yes, that's MB) of RAM, although performance, especially with
modern large disks, is much better with at least 10MB. XOS does use
a disk cache and, with large disks, this should be on the order of
10 to 20MB. XOS will use up to 4GB (minus the hardware space). XOS
does not support general virtual memory, mainly because it has
never been needed for the applications where XOS has been used. It
supports "virtual allocation", which is mainly used to allocate
stack space automatically.
Most XOS programs are small. Even the ported OpenWatcom
C compiler loads in about 750KB. Real graphics mode applications
run in a few MB.
XOS provides a flexible method for loading extensions
to the kernel which are known as LKEs (Loadable Kernel Extensions).
This includes device drivers but is not limited to that. Most
device drivers are implemented as LKEs. A mechanism is provided
for loading LKEs into a temporary RAM-disk at boot time using the
bootstrap before switching to protected mode. This allows even the
drivers for the boot disk to be loaded as LKEs.
XOS provides a flexible system for allocating memory,
allowing multiple discontiguous blocks of allocated memory.
XOS provides an advanced signal (as the term is used
with Unix) capability which provides multiple priority levels. It
is patterned after a multi-level hardware interrupt system and
queues signals until all higher priority signals have been delivered
XOS supports multiple execution threads in a process,
both "heavy weight" preemptively scheduled threads and "light weight"
non-preemptively scheduled threads (sometimes called fibers).
XOS supports both blocking and non-blocking IO for
most devices. The only exceptions are the console display (which
is CPU bound) and the sound (HDA) device which uses a different
continuous stream API.
Version 4.5.0 is basically a development release. We
have taken so long to get a "final" version ready that we decided
to release what we have, even though it is not really complete.
We hope to have a more complete version ready in a few months.
There are a number of major changes in this
Version 4.5.0 of XOS is NOT binary compatible with
previous versions. This is mainly due to the change to a flat
memory model and to a small number of other API changes.
The internal structure of XOS has been significantly
changed, mainly to allow writing kernel level code in C. This is
a major departure from the previous XOS philosophy. It is now felt
that with current generation C compilers and current CPU speeds,
there is no need to worry that much about the efficiency of the
kernel code. In the current version about 10 to 15% of the kernel
code (both resident and LKE) has been rewritten in C. The eventual
goal is to rewrite virtually all of the kernel level code in C.
Only the flat memory model is supported. The previous
version of XOS provided extensive support for segmented memory,
supporting both 16-bit and 32-bit segments. Over time it has become
obvious that this is not very useful. Other than supporting a few
very old DPMI programs, there is no demand at all for support of
16-bit segments. There is also virtually no need to use multiple
32-bit segments. Given that almost all other systems do not support
any kind of segmentation (including the 64-bit x86 architecture),
this change was inevitable.
DOS compatibility is NOT supported. There is limited
support for execution in V86 mode, which is currently only used to
call VESA BIOS real mode functions for graphic display modes.
Given that there is almost no demand for the support of DOS
programs, this change was also inevitable. There are still enough
hooks in place that support for DOS compatibility could be put
back in without too much work if necessary.
DOS style single character disk names are not
supported. Such single character names can still be assigned with
the assign command but are not supported as a specical case
as in prevous versions.
There have been some signficant changes in the API
for searching directories. This was done mainly to simplify the
kernel code by removing some features that were never fully
A VGALib style graphics library is included, which can
be used to create programs using a graphical user interface. This
includes support for PCL3GUI "win-printers". The intent is
eventually to use this library to implement a graphics server that
will implement a GUI desktop.
USB 2.0 is supported. There are low level drivers for
the EHCI, UHCI, and OHCI controllers. There are high level drivers
for mass storage devices (bulk transfer only protocol), keyboards,
and mice, and there is a general purpose bulk transfer/interrupt
driver that has been used with a LabJack and other custom devices.
XOS can be booted and run from a USB disk.
The HDA sound interface is supported.
Multiple pre-emptively scheduled execution threads per
process are supported.
Floppy and optical disks are not supported.
This is only due to lack of the resources needed to
update the drivers to support the new internal structure of this
version. We hope that this can be added soon.
Environment strings are not supported. Again, this is
due to a lack of resources. None of our current projects require
environment strings (there is a simple kluge in the command
shell to provide a command search list), but this will be corrected
IP networking is not supported. This is a major
embarrassment and is also due to lack of resources to update the
drivers. Finishing this is currently a very high priority as it
is needed for a planned project.
Shared memory is not supported. No current projects
need this, so it has not been implemented in the current version.
The hooks for supporting it are still there and it will probably
be added reasonably soon.
Serial ports (COM ports) are not supported. The
previous version had extensive support for several types of
serial ports but, so far, we have not needed this in the current
version. The basic class level support is still there, but
none of the low level drivers have been updated. This will be done
if we ever need a serial port again.
Serial and PS2 mice are not supported in this version.
It would be fairly simple to update this but we don't see much
reason to do that. USB mice are supported.
This version (4.5.0) represents a major rewrite of
the previous version. It adds many new capabilities and drops a
few features (mainly DOS compatibility and support of multiple
segments). There are also a couple of major unfinished areas
(support for IP networking and for floppy and optical disks).
These should be available in a future version soon.