The well known definition for operating system is ``the software that securely abstracts and multiplexes physical resources'' [#!tanenbaum87:_os!#]. By no means is it known that those resources should be contained in a single node. So, Why are our distributed operating systems based on microkernels which essentially multiplex just local resources?
Obviously system services can be later distributed when using a (centralized) microkernel. Indeed, that can be done even when using a monolithic system [#!pike90:_plan9!#]. But this will not solve the actual problem that the system is not being actually distributed and is not transparently multiplexing both local and remote resources.
Secondly, a major drawback of current distributed operating systems is
their lack of adaptability. It is known that adaptability can be
achieved using a minimal microkernel as a foundation for the operating
system
[#!engler94:_exo!#,#!cheriton94:_cache!#,#!bershad95:_extspin!#,#!ford96:_flux!#].
If the microkernel is centralized, adaptation of system services
for particular requirements may harm the distribution of those
services because they are distributed on top of the microkernel and
this distribution is not supported by the microkernel
itself. (e.g. a bad adaptation of the Mach netmsg server may
isolate the whole node and/or slow-down every system
application).
The reason is that user extensions may fail to preserve properties found in the distributed hardware and there will be no lower layer supporting them. If the microkernel is itself distributed, simple system extensions may still benefit from system distribution because the lower layer is distributed by itself. This problem can be noticed by the fact that it is necessary to modify and/or re-implement existing system services to add new distributed services to a typical microkernel based distributed system [#!carter94:_dsmwwa!#,#!tokuda90:_rtmach!#,#!takuro93:_rtipc!#].
The 2K Operating System is being built to explore the combination of distribution and adaptability. 2K is built from two main pieces:
We expect the combination of both elements to yield a simple easy-to-use distributed and flexible OS.
By adopting a strict architecture self-awareness philosophy, we will allow system and user modules to be conscious of its own physical and logical architecture. So, the system will be able to adapt itself optimizing its performance and reliability.
This document describes the object oriented redesign of the Off kernel
[#!ballesteros98:_offphd!#,#!ballesteros97:_offuk!#,#!offw3site!#], named
Off++, and is meant to be the starting point for its literate
implementation (see section
).
Off++ also adds new functionalities to the kernel in order to provide
basic support for 2K. These new functionalities include
support for architecture self-awareness, system object browsing and
inspection (see subsections
and
), and flexible user-defined domains (see
section
).
Multiple protection domains, multi-user operation, and multitasking are optional features which can be avoided in those nodes where they are not useful.