Xv6

From OSDev Wiki
Jump to: navigation, search

Originally Minix, just like Xv6, was designed for educational purposes. As years went by, Minix became more complex and more like a real OS, so that at version 3 being educational was not a goal anymore. So much that Tannebaum officially changed its focus to being fully functional. As a result, its codebase does not help beginners any more. Thankfully we still have Xv6, which remained a simple educational OS.

Contents

History

Xv6 is a re-implementation of the classic Dennis Richie's and Ken Thompson's UNIX V6 for MIT Operating System course. UNIX was originally written in K&R C for the PDP-11. Xv6 is a modernized version of that, written in ANSI C for the Intel x86 processor, keeping the original UNIX philosophy of simplicity.

Advantages

  • Very small codebase. As being educational, it focuses on how an OS should work instead of implementing everything. A single programmer can easily overview it's entire codebase.
  • K.I.S.S. Uses clear and simple algorithms only, most sources are no longer than few hundred lines.
  • Minimal Assembly. Most of the code is written in ANSI C.
  • Uses protected mode. It abstracts the x86 architecture away with minimal lines of code, and it does not rely on BIOS.
  • Fairly modern. It supports IOAPIC, LAPIC etc. It does not use obsolete devices such as floppies like other tutorials do.
  • Fairly sophisticated. It uses paging for virtual address spaces, and it is a multitasking OS with multiprocessing (SMP) support.
  • Fully functional. Unlike most tutorials and bare-bones, Xv6 really implements everything that has to be implemented in a working kernel.
  • Easy to understand. Has a great commentary book, that also points out which parts of the kernel should be refactored for a real-life OS and how.

Disadvantages

  • Unlike Minix, Xv6 is a monolithic kernel, which means OS layers are not separated.
  • Source is not separated either, furthermore kernel space code is mixed with user space code. Thankfully there's a list of files grouped by which module they belong. Everything not listed there is user space code.

External Links

Personal tools
Namespaces
Variants
Actions
Navigation
About
Toolbox