001
002 SOS: A Simple Operating System
003
004
005 This is SOS, a Simple Operating System for i386-family
006 processors. This is as simple as possible to show a way to program a
007 basic Operating System on real common hardware (PC). The code should
008 be easily readable and understandable thanks to frequent comments, and
009 references to external documentation. We chose to implement the basic
010 features of an OS, thus making design decisions targetting towards
011 simplicity of understanding, covering most of the OS classical
012 concepts, but not aiming at proposing yet another full-fledged
013 competitive OS (Linux is quite good at it). However, for those who
014 would like to propose some enhancements, we are open to any code
015 suggestions (patches only, please). And yes, there might be bugs in
016 the code, so please send us any bug report, and/or patches !
017
018 The OS comes as a set of articles (in french) to be published in the
019 journal "Linux Magazine France". Each month, the part of the code
020 related to the current article's theme is released (see VERSION file),
021 and the resulting OS can be successfully compiled and run, by booting
022 it from a floppy on a real machine (tested AMD k7, Cyrix and Intel P4
023 pentiums), or through an x86 emulator (bochs or qemu). The resulting
024 OS is available as a multiboot compliant ELF kernel (sos.elf) and as a
025 floppy image (fd.img). It provides a very very very basic demo whose
026 aim is to understand how everything works, not to animate sprites on
027 the screen with 5:1 dolby sound.
028
029 The initial technical features and lack-of-features of the OS are:
030 - monolithic kernel, fully interruptible, non-preemptible (big kernel
031 lock), target machines = i386 PC or better
032 - compiles on any host where the gcc/binutils toolchain (target
033 i586-gnu) is available. Can be tested on real i486/pentium
034 hardware, or on any host that can run an i486/pentium PC emulator
035 (bochs or qemu)
036 - kernel loaded by grub, or by a sample bootsector (up to article 2
037 ONLY)
038 - clear separation of physical memory and virtual memory concepts,
039 even inside the kernel: no identity-mapping of the physical memory
040 inside the kernel (allows to move virtual mappings of kernel pages
041 at run-time, eg to free ISA DMA pages, and to avercome the 4G RAM
042 barrier)
043 - slab-type kernel memory allocation
044 - no swap, no reverse mapping
045 - VERY simple drivers: keyboard, x86 video memory, IDE disks
046 - logical devices: partitions, FAT filesystem, "hard-coded"
047 mountpoints only (~ MSDOS)
048 - no network stack
049 - user-level features: ELF loader (no shared libraries), processes,
050 user threads (kernel-level scheduling only), mmap API, basic VFS
051
052 To understand where to look at for what, here is a brief description:
053 - Makefile: the (ONLY) makefile of the OS. Targets are basically
054 'all' and 'clean'
055 - bootstrap/ directory: code to load the kernel. Both the stuff
056 needed for a multiboot-compliant loader (eg grub) AND a bootsector
057 are provided. The bootsector may only be used up to article 2.
058 - sos/ directory: the entry routine for the kernel (main.c), various
059 systemwide header files, a set of common useful C routines
060 ("nano-klibc"), and kernel subsystems (kernel memory management,
061 etc...)
062 - hwcore/ directory: Low-level CPU- and kernel-related routines
063 (interrupt/exception management, translation tables and segment
064 registers, ...)
065 - drivers/ directory: basic kernel drivers for various (non CPU)
066 devices (keyboard, x86 video memory, bochs 0xe9 port, ...). Used
067 mainly for debugging
068 - support/ directory: scripts and configuration files to build the
069 floppy images
070 - extra/ directory: a set of configuration files to be customized for
071 non-x86 host installations (yes, we primarily develop SOS on a ppc, for
072 the x86 target of course), or for grub-less installations. See
073 README file in this directory.
074
075 The code is licensed under the terms of the GNU GPL version 2 (see
076 LICENSE file).
077
078 Enjoy !
079
080 David Decotigny, Thomas Petazzoni, the Kos team
081 http://sos.enix.org/
082 http://david.decotigny.free.fr/
083 http://kos.enix.org/~thomas/
084 http://kos.enix.org/
085
086
087 --
088 David Decotigny
089
090 PS: Made with a Mac.