CS 213 Documents, Fall '00
Concurrent echo servers from Class 29
are complete versions of the concurrent servers (process-based,
thread-based, and select-based) that we discussed in class.
Tiny server source code (Class 27)
Tiny is a minimal Web server in C that serves both static and
dynamic content (via CGI programs).
- Tiny.tar contains the entire Tiny directory tree, including
tiny.c and adder.c. Untar by typing "tar xvf tiny.tar" in a clean directory.
Network code from Class 24
are complete versions of the echo client and server
that we discussed in class.
Threaded code examples from Classes 22 and 23
are complete versions of the threaded code we discussed in class.
Supplementary Info on Dynamic Memory Allocation (Classes 20 and 21)
P. Wilson, M. Johnstone, M. Neely, and D. Boles, "Dynamic
Storage Allocation: A Survey and Critical Review", International
Workshop on Memory Management, Kinross, Scotland, Sept, 1995.
Supplementary Info on Linking (Class 16)
- ELF object file format
Supplementary Information about Processor Design (Class 11)
- Microprocessor Report article on
branch prediction algorithms. Cited as reference  in Handout #3.
- Microprocessor Report article on Intel P6 microprocessor. This
later became known as the PentiumPro, and was the basis for the
Pentium II, Pentium III, and Celeron processors.
Supplementary information on buffer overflows (Class 07)
IA32 and Pentium III documentation
For this course, we will be using the Gnu GCC compiler to generate
code targeted to machines running Intel IA32 (popularly known as
``x86'') programs under Linux. GCC uses an assembler format known as
``GAS'' (for Gnu ASsembler). The documentation on this particular
combination of machine and assembler format is a bit spotty. Here are
some useful resources:
- Our own Handout #2 on
Machine-Level Representation of C Programs
- Some information extracted from the GCC info pages about GAS
format for IA32 (known in the GCC world as ``i386'') in text format. This documentation is
helpful if you are either familiar with the Intel/Microsoft assembly
format, or if you do much reading of the Intel manuals.
- Intel Architecture Software Developer's Manual
- Volume 1: Basic Architecture
Chapters 3--6 contain
useful information. Note that much of this documention is
irrelevant---we are only running in ``flat'' addressing mode, and GAS
does not support conditional moves, MMX, or SSE instructions. The
overall document is 369 pages long. You probably don't want to print
- Volume 2: Instruction Set Reference
Chapter 3 contains a detailed description of every instruction. Note
that they list the operands in the reverse order from their ordering
in GAS. This manual is 854 pages long. You definitely don't want to
print it out.
- Volume 3: System Programming
Contains lots of useful information on the interface between the
hardware and the operating system, including cache and TLB specs,
virtual memory, exceptions and interrupt handling, and processes.
- Intel Architecture Optimization: Reference Manual
Desrcibes how to write IA32 code that runs fast.
- Overview of the Linux kernel
Other documents of interest
Last modified: Wed Jan 31 16:43:48 EST 2001