OS textbooks
UNIX
- Youtube Unix intro
- The UNIX Time-Sharing System, Dennis M. Ritchie and Ken L.Thompson,. Bell System Technical Journal 57, number 6, part 2 (July-August 1978) pages 1905-1930. (local copy) You read this paper in 6.033.
- The Evolution of the Unix Time-sharing System, Dennis M. Ritchie, 1979.
- The C programming language (second edition) by Kernighan and Ritchie. Prentice Hall, Inc., 1988. ISBN 0-13-110362-8, 1998.
C programming
The classic book on C:
- The C programming language (second edition), Brian W. Kernighan and Dennis M. Ritchie. Prentice Hall, Inc., 1988. ISBN: 0-13-110362-8.
Programming Intel vmx
Although there are good summaries around the web, the relevant chapters of Volume 3c Part 3 of the Intel manual are the most comprehensive explanation of how to program this hardware.
x86 Assembly Language Programming
-
PC Assembly
Language, Paul A. Carter, November 2003. 188pp. (local PDF copy)
A clear description of x86 assembly language and assembly language in general, including some stuff you ideally know already. You might prefer to read this on line, rather than print it out; it's a quick read. Warning: This book uses "Intel" assembly syntax, in which instructions are written "
instr dst, src
"; we will use "AT&T" assembly syntax, in which they are written "instr src, dst
". You don't need to read the following sections, which will not be needed for class: 1.3.6-1.3.7, 1.4, 1.5, 5, 6, and 7.2. -
Brennan's
Guide to Inline Assembly, Brennan "Bas" Underwood. (local copy)
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.
-
Reference Manuals
-
Intel 80386 Programmer's Reference Manual, 1987 (HTML).
(local copy - HTML)
(local copy - PDF)
Much shorter than the current Intel Architecture manuals, but describes most of the processor features we'll use. The original was a flat text file that used the PC Line Drawing characters for diagrams; this, and many other versions, are available on the net. JOS uses the following 486-and-later features, which you can read about in the IA-32 manuals: The
%cr0
register'sWP
bit (Volume 3). -
IA-32
Intel Architecture Software Developer's Manuals, Intel, 2007. Local copies:
- Volume 1: Basic Architecture
- Volume 2A: Instruction Set Reference, A-M
- Volume 2B: Instruction Set Reference, N-Z
- Volume 3A: System Programming Guide, Part 1
- Volume 3B: System Programming Guide, Part 2
The latest and longest documents from Intel.
-
AMD64 Architecture Programmer's Manual
Covers both the "classic" 32-bit x86 architecture and the new 64-bit extensions supported by the latest AMD and Intel processors.
- Multiprocessor references:
-
Intel 80386 Programmer's Reference Manual, 1987 (HTML).
(local copy - HTML)
(local copy - PDF)
-
Tool Interface Standard (TIS) Executable and
Linking Format (ELF) Specification, Version
1.2
Our kernel runs ELF executables; this is the definitive standard for how these executables are constructed.
- GNU ld Command Language (for linker scripts)
- The STABS Debugging Format (for the debugging symbols used by our kernel)
x86 Emulation
- Bochs - An x86 platform and CPU emulator.
- QEMU - A new, much faster but less mature PC emulator. We now use qemu as the default JOS platform.
PC Hardware Progamming
-
General PC architecture information
- Phil Storrs PC Hardware book, Phil Storrs, December 1998.
- Bochs technical hardware specifications directory.
-
General BIOS and PC bootstrap
- BIOS Services and Software Interrupts, Roger Morgan, 1997.
- "El Torito" Bootable CD-ROM Format Specification, Phoenix/IBM, January 1995.
-
VGA display - kern/console.c
- VESA BIOS Extension (VBE) 3.0, Video Electronics Standards Association, September 1998. (local copy)
- VGADOC, Finn Thøgersen, 2000. (local copy - text) (local copy - ZIP)
- Free VGA Project, J.D. Neal, 1998.
- Keyboard and Mouse - kern/console.c
-
8253/8254 Programmable Interval Timer (PIT)
- inc/timerreg.h
- 82C54 CHMOS Programmable Interval Timer, Intel, October 1994. (local copy)
- Data Solutions 8253/8254 Tutorial, Data Solutions.
-
8259/8259A Programmable Interrupt Controller (PIC)
- kern/picirq.*
- 8259A Programmable Interrupt Controller, Intel, December 1988.
-
Real-Time Clock (RTC)
- kern/kclock.*
- Phil Storrs PC Hardware book, Phil Storrs, December 1998. In particular:
- CMOS Memory Map, Padgett Peterson, May 1996.
- M48T86 PC Real-Time Clock, ST Microelectronics, April 2004. (local copy)
-
16550 UART Serial Port - kern/console.c
- PC16550D Universal Asynchronous Receiver/Transmitter with FIFOs, National Semiconductor, 1995.
- Technical Data on 16550, Byterunner Technologies.
- Interfacing the Serial / RS232 Port, Craig Peacock, August 2001.
-
IEEE 1284 Parallel Port - kern/console.c
- Parallel Port Central, Jan Axelson.
- Parallel Port Background, Warp Nine Engineering.
- IEEE 1284 - Updating the PC Parallel Port, National Instruments.
- Interfacing the Standard Parallel Port, Craig Peacock, August 2001.
-
IDE hard drive controller - fs/ide.c
- AT Attachment with Packet Interface - 6 (working draft), ANSI, December 2001.
- Programming Interface for Bus Master IDE Controller, Brad Hosler, Intel, May 1994.
- The Guide to ATA/ATAPI documentation, Constantine Sapuntzakis, January 2002.
-
Sound cards
(not supported in 6.828 kernel,
but you're welcome to do it as a challenge problem!)
- Sound Blaster Series Hardware Programming Guide, Creative Technology, 1996.
- 8237A High Performance Programmable DMA Controller, Intel, September 1993.
- Sound Blaster 16 Programming Document, Ethan Brodsky, June 1997.
- Sound Programming, Inverse Reality.
- E100 Network Interface Card
- E1000 Network Interface Card