Joined: Thu Aug 11, 2005 11:00 pm Posts: 1110 Location: Tartu, Estonia
|
I spent some time thinking about this topic and went through the wiki Expanded Main Page as it is right now, and I also thought what might be helpful for people who would like to get a deeper understanding of OS development and its advanced topics, while also keeping the interest of newcomers. I came up with some structure (note that this is not a complete list, but just a collection of ideas / example, what could be put in which category), so please feel free to comment, criticize, improve or write your own - Preliminaries:
- Introduction
- Required knowledge
- Beginner mistakes
- Where to get help, how to ask smart questions...
- FAQ
- ...
- OSDev Theory / Concepts:
- Goals of an OS: resource management, API, access rights, protection...
- API concepts: user / kernel mode, system calls, IPC, shared memory, virtual file system...
- Computer architectures: Turing, von Neumann...
- Scheduling primitives: processes, threads, fibers...
- Thread states & transitions: running, ready to run, blocked...
- Memory management concepts: virtual memory, address spaces, paging, swap...
- Synchronization primitives: semaphore, mutex, spinlock, lock-free algorithm, CAS...
- Synchronization problems: deadlock, priority inversion...
- Security problems: attack types, prevention strategies, stack protection, address space randomization...
- ...
- OSDev Design / Implementation:
- Kernel types: monolithic, micro, nano, exo...
- Task models: monotasking, multitasking, real time...
- Scheduling algorithms: round robin, priority based...
- Physical memory allocators: bitmap, stack, buddy...
- Virtual memory & heap management: slab allocator, next fit, best fit...
- Paging / swap strategies: least recently used...
- How other OSs handle(d) things: Linux, Windows, Mac OS, Minix, L4, DOS...
- ...
- OSDev tools:
- Tool chains: cross compiler, linker, assembler...
- Image creation: ISO images, hard disk / USB drive / SD card images, how to copy...
- Build / project management: makefiles, CMake, autotools...
- Simulators / emulators / debuggers: bochs, QEMU, VMWare, VirtualBox, Simics, SimNow!...
- Testing: test suites & tools, memory usage monitors, static code analysis, code coverage...
- Automated builds & continuous integration: service providers, setups...
- ...
- Standards:
- Binary / executable / object file formats: ELF, PE, COFF, A.Out...
- API / ABI: POSIX, System V, calling conventions...
- File systems: Ext2/3/4, FAT, NTFS...
- Hardware abstractions: UEFI, ACPI...
- Network layers and protocols: Ethernet, IP, TCP, UDP...
- ...
- Hardware:
- CPU architectures and ISAs: x86, x86_64, ARM, MIPS, PowerPC, M68K...
- Computer types: IBM compatible PC, Raspberry PI, Beagleboard, gaming consoles, mobile devices...
- Boot process: boot sector, boot loader, multiboot...
- Buses and interfaces: ISA, PCI, USB, SCSI, ATA, serial, parallel, I2C...
- Interrupts: PIC, I/O APIC, local APIC, MSI, NMI...
- Clocks and timers: RTC, PIT, APIC timer, HPET...
- Human interface devices: keyboard, mouse, joystick...
- Video: graphics cards, monitors, VGA, VESA...
- Peripherals: printers, scanners, network cards, sound devices...
- ...
- Practical help & troubleshooting:
- Bare bones tutorials & "Hello world!"
- OSDev using C / C++ / Pascal / Ada / D / C# / Rust / Haskell...
- Troubleshooting
- "Help! XYZ doesn't work!"
- ...
Also, I wouldn't list all the subtopics on the main page, but just the first and second level categories ("OSDev Theory / Concepts" -> "Scheduling Primitives", but not "Threads"), at least not fully expanded, to get a better overview of which topics are covered. Otherwise people might just read the top of the page or miss important information. Also it would prevent "bottom topics" to fall completely out of sight. These categories could also nicely make use of wiki categories whenever appropriate.
_________________ Programmers' Hardware Database // GitHub user: xenos1984; OS project: NOS
|
|