process name-space model (not memory model) and user shell program. Clear separation between hardware independent (e.g. file managers) and hardware dependent (e.g. device drivers) layers. When compared with more modern operating systems: The kernel is written entirely in assembly language (OS-9/68K version only) and C (portable version to other architectures) using simple internal data structures, reducing flexibility and improvement scope while improving determinability required for real-time operating systems. Performance was also affected for some operations, but assembly language helped with the speed issue. Systems without a memory management unit (MMU) have no memory protection against illegal access, nor per-process memory protection, while systems with an MMU can have memory protection enabled. The module controlling the MMU can be included or omitted by the system integrator to enable or disable memory protection. This allows OS-9 to run on older systems which do not include an MMU. Older versions of OS-9 do not support POSIX threads, while all OS-9 supported processors support POSIX threads. No SMP support for multiple sockets, cores, or hardware threads in the same OS-9 instance (can run as a RTOS on one of the cores of dual core processors like Core Duo and Core 2 Duo, when Linux is running on the other core doing general purpose tasks). Task scheduling OS-9's real-time kernel allows multiple independent applications to execute simultaneously through task switching and inter-process communication facilities. All OS-9 programs run as processes containing at least one lightweight process (thread) but may contain an effectively unlimited number of threads. Within a process, these lightweight processes share memory, I/O paths, and other resources in accordance with the POSIX threads specification and API. OS-9 schedules the threads using a fixed-priority preemptive scheduling algorithm with round-robin scheduling within each priority. Time slicing is supported. The priority levels can be divided into a range that supports aging and a higher-priority range that uses strict priority scheduling. Each process can access any system resource by issuing the appropriate OS-9 service request. At every scheduling point, OS-9 compares the priority of the thread at the head of the active queue to the priority of the current thread. It context switches to the thread on the active queue if its priority is higher than the current processes' priority. Aging artificially increases the effective priority of threads in the active queue as time passes. At defined intervals, time slicing returns the current thread to the active