RMoX is an experimental/research occam-pi/CSP based operating-system for (currently) Pentium based PCs.
Version: 0.1.3RMoX is an experimental/research occam-pi/CSP based operating-system for (currently) Pentium based PCs.
Operating System: Linux
CSP provides a solid foundation for describing and reasoning about parallel systems and their interactions.
The occam-pi language is an enhanced version of occam (based on CSP), that adds ideas from the pi-calculus to provide a dynamic and flexible environment for building such concurrent systems.
Traditional occam was designed for Transputers (as developed by Inmos Ltd. and later SGS Thompson, now ST Microelectronics), which had a very finite memory, and no provision for features such as virtual memory (although the T9000 did provide a limited form of fault/memory protection). Transputers were primarily targetted at embedded-systems and therefore the use of such features would have been limited (especially considering the silicon cost).
The use of occam on modern computing systems has motivated substantial language development -- both at the language level and in the capabilities of the run-time system. As a result, occam-pi now provides support for facilities such as: data, channel and process mobility; multi-level process priority; extended synchronisation; and numerous others.
Whilst occam-pi is sufficient to develop many components of an operating-system, some of the more architecture-specific low-level operations remain tricky (and perhaps not best done in occam-pi). RMoX contains various "base-layers", one is selected depending on how you wish to use RMoX (e.g. user-mode in the host OS, or standalone).
Any hardware interaction is performed either by RMoX's device-drivers or the "base-layer". The base-layer provides an abstract interface to the hardware and can be changed depending on the desired use of RMoX.
The main functions of the base-layer are to provide the bootstrap, discovery and initialisation of certain hardware (e.g. the MMU), access to physical memory, interrupts and IO/memory-mapped devices. The various base-layers are:
Minlinux base-layer: this is a stripped-down version of the Linux kernel (2.4 series) that essentially replaces the traditional "init" task with the RMoX system. This replaces the Flux OSKit used previously.
Linux26 base-layer: this is a minimal configuration and wrappers for Linux 2.6, that loads the RMoX system as a module when booted (unconditionally transferring control to it). This approach is slightly cleaner than the minlinux base-layer as it does not require any modifications to the Linux 2.6 kernel tree.
Raw base-layer: this is an experimental base-layer written in assembler that performs basic initialisation before transferring control to RMoX.
User-mode base-layer: this provides a hardware abstraction for running RMoX in an existing Linux system as a normal user-mode application. This approach is particularly useful for debugging.
The run-time KRoC/CCSP kernel provides the scheduling and communication routines for occam-pi processes. This is essentially the same run-time kernel as used in KRoC/Linux, called CCSP. The version of CCSP currently in use is from pre-releases of the next KRoC/Linux version (1.4.0). Although the RMoX and "normal" versions of CCSP are built from the same source tree, what actually gets compiled is quite different (if RMoX is being built for non-user-mode; user-mode RMoX will get the standard KRoC run-time system).
Eventually we may do away with the Linux flavoured base-layers entirely, using the more specialised "raw" base-layer instead (largely in the interests of keeping the resulting system small). However, using a Linux base-layer makes much easier the task of machine startup -- in particular dealing with any hardware anomalies that the Linux community has already catered for (typically laptop computers). Another future possibility is a low-level infrastructure that sits on top of Xen, allowing RMoX to be run alongside other Xen-ported systems (primarily Linux, Windows-XP and Plan9).