OSD Home
Blank Phantom's Questions For an OS Designer
http://phantom.urbis.net.il/bphantom/OS_Design_Qs.html
Why write an OS
- Research: high reliability, high performance, real-time,
distributed computing, object-oriented, highly portable OS,
replacement/competitor for commercial OS, new architecture (e.g.
exokernel, SASOS), other.
- Learn about: multitasking, memory protection, writing a standard
C library (libc), device drivers, filesystems, applications, other.
- Available operating systems are unsatisfactory.
- Create an OS that tries to teach OS design.
- Fame and glory; world domination :)
Design decisions
- Portable OS or use x86-only features: 4 privilege rings
(versus 2 on most machines), segment-based address translation and
memory protection (versus paging), task-switching using TSSes (versus
stack-swapping).
- Kernel architecture: monolithic kernel, microkernel, exokernel,
SASOS, other.
- Multitasking: none, cooperative, preemptive.
- Threads: none, scheduled preemptively by kernel or cooperatively
by application, same address space as parent task, separate address space
with shared memory, or entirely separate address space.
- Multiprocessing: uniprocessor, tightly-coupled multiprocessing
(e.g. Symmetric MultiProcessing, SMP), loosely-coupled multiprocessing
(distributed computing, like Beowulf clusters or Amoeba)
- Multiuser (multitasking + security)
- Host OS for development: DOS, MS-Windows, Linux, Be, other.
- Language used to implement OS: C, C++, assembly language, Ada,
homebrew, other.
- Executable file format. A related decision: support dynamic
linking or not? (The ELF and PE formats simplify dynamic linking.)
- Libraries for high-level languages: GNU glibc, Cygnus Newlib,
homebrew, other.
- Backward compatability: same syscalls as other OSes? Same
library functions? Compatability layer? Microkernel 'personalities'?
- Code 'em or modem? Write your own code or use source from
other projects? Is the other code easy to understand? Does it do what
you want? Can you stomach the licensing?