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