RX/286
From Ruud Koot
RX/286 is a microkernel designed around the Intel 80286's 16-bit segmented protected virtual address mode.
Contents |
[edit] Design
[edit] Memory management
Keep track of physical memory in circular doubly linked lists for block sizes of 2k aligned on 2k boundaries (for 8 ≤ k ≤ 16; e.g. blocks from 256 bytes through 65536 bytes.) Pointers are stored in the unallocated physical memory.
The full 16 MB address space is divided into 216 256 B pages. As segments are never larger than 64 kB it is not useful to track larger contagious regions of physical memory.
allocate takes O(1), although with a higher constant if:
- no pages of the correct size are available and a larger page needs to be split,
- the allocations is not of size 2k and the remaining space needs to be split into several new pages.
free takes O(1). Contagious smaller pages are not consolidated. This could be done by using a red-black tree instead of a linked list, but would increase the runtime of free to O(log n).
Memory can still get fragmented, so a defragmentation process and additional allocation heuristics would be useful.
It might be necessary to keep track of different regions of memory (memory below 1 MB, memory above 1 MB) and different kinds of memory (regular memory, device memory which should not be reallocatable if freed) and support for bank switched memory (like expanded memory and possible a swap file).
[edit] Protection
| Ring 0 | Hypervisor |
| Ring 1 | Supervisor |
| Ring 2 | Drivers |
| Ring 3 | Applications |
[edit] Task management
[edit] File system
[edit] Other operating systems
- Coherent 3.x
- Novell NetWare 286
- Microsoft OS/2 1.x
- Microsoft Windows 3.1 (in "standard mode")
- SCO Xenix 2.3.2
- Various Unices (INTERACTIVE UNIX, Microport System V/286, Venix)