You are on page 1of 11

Introduction

Basic Information
Introduction Avoid beginner mistakes Getting started What order should I make things in? What is a kernel--shell--GUI--etc.

Environment
How kernel, compiler, and C library work together Things you can not do with C Can I use some language other than C? Doing a kernel in C++ Doing a kernel in Pascal Doing a kernel in Basic Sample inline functions Using the Bios or not using the Bios ? ... Using inline assembly Understanding and relocating object files

Booting and Setup

Boot Sequence Diskless booting The BabyStep tutorial GDT For Dummies Interrupts For Dummies Getting Keyboard Input

Testing and debuging


so Troubleshooting How do I test and avoid crashing my disk while doing How do I use a debugger with my OS Is it possible to use Unit Testing with my OS

Design Considerations

Kernel Models
Monolithic Kernel Microkernel Exokernels and their kind Modular Kernel

Task Models
Monotasking Systems Multitasking Systems Real-Time Systems

Memory and Resource Management


Physical, Virtual, Paging, help?!? What segments are About? Managing address spaces Allocating and freeing memory Algorithms and tips for memory management File management Long term storage and file systems

Scheduling

Tasks, processes and threads Context switching Scheduling algorithms Multiprocessor scheduling Sleeping and waiting processes

Process Sychronization
Semaphores, mutexes, spinlocks et al. Signals

Inter-Process Communication
Message passing Shared memory Remote procedure calls

Resources
Books on OS Development Assembler language Some small kernels with source Fasm-TCC BareBones

C Bare Bones - a minimalistic example of how to get from GRUB into C space. C++ Bare Bones

Disk Image with preinstalled GRUB Chip Numbers, Acronyms and Things Links

Executable File Types


. ELF PE

Filesystems
FAT Details Ext2 Details SFS Details AmigaFFS Details

Hardware

CPU
AMD K6 writeback optimisations How can I tell CPU speed ? Model-specific register Sample inline functions Tell me about x86 64 bits CPU ... Processors of the IA32 architecture family What is v8086 mode? Where can I find information about ports? CPU Bugs

Memory
How do I determine the amount of RAM? Why cant I access all my memory?

IRQ's and Exceptions, PIC, NMI, APIC, OPIC Can I remap the PIC? Getting Keyboard Input Help!? I can't get interrupts working Interrupt service routines Interrupts for dummies So whats the NMI then?

Tell me about the APIC What is the PIC?

Video
Accelerated graphic cards How do I detect if I have a colour or monochrome monitor? How do I draw things in protected mode? About standard I/O in your kernel How do I move the cursor when I print? How do I output text to the screen in protected mode? VGA Links and Documentation Video signals and timing How do I program Bochs and QEMU's graphics device

Audio
Sound PC Speaker Sound Blaster 16

Storage devices
Harddisks ATAPI CDRom

DMA Floppy driver

Plug and Play


I heard you can do PNP calls with the BIOS in Protected Mode? Where can I find programming info on PNP?

PCI, USB and things like this ...


. AGP information And what about USB ? USB Information Where can I find programming info on PCI?

Network cards and communicating devices


3c90x 8254x Serial ports Ne2000 RTL8139 RTL8169 802.11

Non-ix86 Development
PowerPC MIPS Sparc

Tools Bootloaders
GRUB LILO XOSL - Extended Operating System Loader System Commander Boot Magic Rolling your own Bootloader and the necessary theory

Compilers
o o o o o GCC Cygwin MinGW and Dev-C++ DJGPP Building a GCC Cross-Compiler Porting GCC to Your OS

Calling conventions of GCC for x86 Systems Watcom C/C++ Visual C/C++ Other compilers

Assemblers
GNU as FASM NASM YASM

Differences Between AT&T and Intel assembler formats

Linkers
GNU ld ar

Emulators
Bochs (i386) PC emulator QEMU Microsoft Virtual PC

VMWare PC Emulator Virtual Box SimICS

Working with Disk Images


Useful tools ...under Linux, *BSDs and other unices ...under MacOS X ...under Windows

You might also like