xv6
- xv6 — a simple, Unix-like teaching operating system. Russ Cox, Frans Kaashoek and Robert Morris (free online book).
A very useful introduction to the organization and source code of the xv6 operating system. Reading it can significantly help you with the labs.
- xv6 code booklet. Code line numbers in the xv6 book above refer to code lines in this booklet.
OS Textbooks
C Programming
Intel and AMD manuals
- IntelĀ® 64 and IA-32 Architectures Software Developer Manuals.
Reference manual for Intel processors. Available in multiple forms (3 individual volumes or a combined book).
Volume 1 describes the basic architectures. Volume 2 contains the instruction sets. Volume 3 is a system programming guide.
- AMD64 Architecture Manuals.
Reference manual for AMD processors. Volume 2 (System Programming) is the main one to be used for this course.
Unix Programming
Linux Kernel Internals
Virtual Machines
x86 Assembly Language Programming
(Thanks to Eddie Kohler and MIT's 6.828 course for some of the mmaterial below.)
- PC Assembly Language. Paul A. Carter, November 2003.
A good description of x86 assembly language and assembly language in general, including some stuff you
ideally know already. You might prefer to read this online, rather than print it out; it's a quick read.
Warning: This book uses "Intel" assembly syntax, in which instructions are written as 'instr dst, src'.
GCC uses "AT&T" assembly syntax, in which they are written as 'instr src, dst'.
- Brennan's Guide to Inline Assembly. Brennan "Bas" Underwood.
A short and sweet description of how to use inline assembly instructions with GCC. Includes a description of the "AT&T"
assembly syntax used by GCC.
- IntelĀ® 64 and IA-32 Architectures Software Developer Manuals.
Reference manual for Intel processors. Available in multiple forms (3 individual volumes or a combined book).
Volume 1 describes the basic architectures. Volume 2 contains the instruction sets. Volume 3 is a system programming guide.
PC Hardware Programming
- General PC architecture information
- General BIOS and PC bootstrap
- VGA display - kern/console.c
- Keyboard and Mouse - kern/console.c
- 8253/8254 Programmable Interval Timer (PIT)
- inc/timerreg.h
- 8259/8259A Programmable Interrupt Controller (PIC)
- kern/picirq.*
- Real-Time Clock (RTC)
- kern/kclock.*
- 16550 UART Serial Port - kern/console.c
- IEEE 1284 Parallel Port - kern/console.c
- IDE hard drive controller - fs/ide.c
- Sound cards
(not supported in JOS,
but you're welcome to do it as a challenge problem!)
- E100 Network Interface Card