Hi,
I was looking at these. The wiki at
http://www.osdev.org/wiki/ contains very little (if you assume the reader is someone who has enough basic knowledge to be able to write an OS in the first place, then the only really useful pages are the one on MBRs. the resources/links page and the OS projects page). The wiki at
http://www.osdev.org/osfaq2/ has the opposite problem - so much information it's become a little hard to navigate.
I'd suggest starting a new wiki with a better structure, and then converting all of the old information (from both of the current wikis) to the new one.
I'd split everything 3 sections - "general theory", "80x86 hardware" (and possibly other architectures later), and "Other".
The general theory section would read like a text book, and contain subjects like:
- Kernel Models (monolithic, micro-kernel, exo-kernel, etc)
Booting
Physical Memory Management
Virtual Memory Management
Scheduling
Inter-Process Communication
File Systems
Networking
GUIs
Font Engines
Unicode
Languages
Testing and Debugging
etc
The 80x86 hardware section would possibly begin with a block diagram of "generic" hardware showing the CPU/s, bus, RAM, PCI host controller, LPC bridge, etc. Then it'd have a page describing each major component and what it connects to or pages relating to it, possibly in the form of nested lists like:
- CPU/s
- Real Mode
Protected Mode
Long Mode
Sgmentation
Paging
Exceptions
FPU/3dNow/MMX/SSE
Local APIC
CPU Identification
SMP
Multi-core
Hyper-threading
System Bus
Memory
"North bridge"
- Memory Controller
AGP/PCI Host Controller- Device Detection
Video Cards
Network Cards
IDE/ATAPI Controllers
SCSI Controllers
USB Controllers
Sound Cards
Bus Mastering
Messaging Signalled Iinterrupts
LPC Bridge- ISA Device Detection
PS/2 Keyboard & Mouse
Floppy Controller
Serial Ports
Parallel Ports
PIC Chips
I/O APICs
ISA DMA Controllers
PIT Timer Chip
RTC/CMOS
BIOS
The "Other" section would contain anything that doesn't fit anywhere above. For example, a page on how to build a cross-compiler for GCC, a page on GRUB, some information about emulators, a comparison of assemblers, advice for beginners, etc.
Information should go in the appropriate place, and you shouldn't have a page that combines general theory and architecture specific information. For example, for "booting" you might have some generic information in the "general theory" section which applies to every possible architecture, while the "80x86 hardware" section might have another page for "booting" that deals with how the BIOS starts the OS on 80x86 computers (or maybe 2 pages - one for "legacy" and one for "EFI"). The page in the general theory section could have links to relevant pages in the 80x86 hardware section.
For schedulers, the general theory page would contain a general discussion of how it's done, a comparison of scheduler types, algorithms, etc. This page would mention you need some sort of timer interrupt if you want pre-emption (but wouldn't give any details about the timer hardware) and might mention that some architectures have hardware support for task switching (but wouldn't give details for that either). In the 80x86 hardware section you'd have pages about the local APIC timer, PIT and RTC/CMOS pages, and a "hardware task switching mechanism for 80x86 CPUs" page.
The idea is that you'd be able to add other architectures, so that all of the information in the general theory section still applies, and you'd just create new links in the general theory section to the new hardware specific pages. For example, if someone creates a "Sparc" section with a "How Sparc machines boot" page, then you'd add links to it from the "booting" page in the general theory section. This also reduces the amount of duplicated work - for example, the "80x86 booting" page and the "Sparc booting" page don't need to contain any of the general theory.
Cheers,
Brendan