Site hébergé par : enix

The LXR Cross Referencer for SOS

source navigation ]
diff markup ]
identifier search ]
general search ]
Article:1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 6.5 ] [ 7 ] [ 7.5 ] [ 8 ] [ 9 ] [ 9.5 ]

002                     SOS: A Simple Operating System
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 !
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.
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
037  - clear separation of physical memory and virtual memory concepts,
038    even inside the kernel: no identity-mapping of the physical memory
039    inside the kernel (allows to move virtual mappings of kernel pages
040    at run-time, eg to free ISA DMA pages, and to avercome the 4G RAM
041    barrier)
042  - slab-type kernel memory allocation
043  - no swap, no reverse mapping
044  - VERY simple drivers: keyboard, x86 video memory, IDE disks
045  - logical devices: partitions, FAT/ext2 filesystem, Unix-style
046    mountpoints, hard/soft links
047  - basic network stack (ARP/IP/UDP)
048  - user-level features: ELF loader (no shared libraries), processes,
049    user threads (kernel-level scheduling only), mmap API, basic VFS
051 To understand where to look at for what, here is a brief description:
052  - Makefile: the (ONLY) makefile of the OS. Targets are basically
053    'all' and 'clean'
054  - bootstrap/ directory: code to load the kernel. Both the stuff
055    needed for a multiboot-compliant loader (eg grub) AND a bootsector
056    are provided.
057  - sos/ directory: the entry routine for the kernel (main.c), various
058    systemwide header files, a set of common useful C routines
059    ("nano-klibc"), and kernel subsystems (kernel memory management,
060    etc...)
061  - hwcore/ directory: Low-level CPU- and kernel-related routines
062    (interrupt/exception management, translation tables and segment
063    registers, ...)
064  - drivers/ directory: basic kernel drivers for various (non CPU)
065    devices (keyboard, x86 video memory, bochs 0xe9 port, ...). Used
066    mainly for debugging
067  - support/ directory: scripts and configuration files to build the
068    floppy images
069  - extra/ directory: a set of configuration files to be customized for
070    non-x86 host installations (yes, we primarily develop SOS on a ppc, for
071    the x86 target of course), or for grub-less installations. See
072    README file in this directory.
074 The code is licensed under the terms of the GNU GPL version 2 (see
075 LICENSE file).
077 Enjoy !
079                         David Decotigny, Thomas Petazzoni, the Kos team
086 --
087 David Decotigny
089 PS: Made with a Mac.

source navigation ] diff markup ] identifier search ] general search ]