[Top] [Contents] [Index] [ ? ]

Table of Contents

1. Introduction
1.1 Getting Started
1.1.1 Source Tree Overview
1.1.2 Building Pintos
1.1.3 Running Pintos
1.1.4 Debugging versus Testing
1.2 Grading
1.2.1 Testing
1.2.2 Design
1.2.2.1 Design Document
1.2.2.2 Source Code
1.3 License
1.4 Acknowledgements
1.5 Trivia
2. A Tour Through Pintos
2.1 Loading
2.1.1 The Loader
2.1.2 Kernel Initialization
2.2 Threads Project
2.2.1 Thread Support
2.2.1.1 struct thread
2.2.1.2 Thread Functions
2.2.1.3 Thread Switching
2.2.2 Synchronization
2.2.2.1 Disabling Interrupts
2.2.2.2 Semaphores
2.2.2.3 Locks
2.2.2.4 Condition Variables
2.2.2.5 Memory Barriers
2.2.3 Interrupt Handling
2.2.3.1 Interrupt Infrastructure
2.2.3.2 Internal Interrupt Handling
2.2.3.3 External Interrupt Handling
2.2.4 Memory Allocation
2.2.4.1 Page Allocator
2.2.4.2 Block Allocator
2.3 User Programs Project
2.4 Virtual Memory Project
2.4.1 Hash Table
2.4.1.1 Data Types
2.4.1.2 Basic Functions
2.4.1.3 Search Functions
2.4.1.4 Iteration Functions
2.4.1.5 Hash Table Example
2.4.1.6 Auxiliary Data
2.4.1.7 Synchronization
2.5 File Systems Project
3. Project 1: Threads
3.1 Background
3.1.1 Understanding Threads
3.1.2 Source Files
3.1.2.1 devices code
3.1.2.2 lib files
3.1.3 Synchronization
3.1.4 Development Suggestions
3.2 Requirements
3.2.1 Design Document
3.2.2 Alarm Clock
3.2.3 Priority Scheduling
3.2.4 Advanced Scheduler
3.3 FAQ
3.3.1 Alarm Clock FAQ
3.3.2 Priority Scheduling FAQ
3.3.3 Advanced Scheduler FAQ
4. Project 2: User Programs
4.1 Background
4.1.1 Source Files
4.1.2 Using the File System
4.1.3 How User Programs Work
4.1.4 Virtual Memory Layout
4.1.4.1 Typical Memory Layout
4.1.5 Accessing User Memory
4.2 Suggested Order of Implementation
4.3 Requirements
4.3.1 Design Document
4.3.2 Process Termination Messages
4.3.3 Argument Passing
4.3.4 System Calls
4.3.5 Denying Writes to Executables
4.4 FAQ
4.4.1 Argument Passing FAQ
4.4.2 System Calls FAQ
4.5 80x86 Calling Convention
4.5.1 Program Startup Details
4.5.2 System Call Details
5. Project 3: Virtual Memory
5.1 Background
5.1.1 Source Files
5.1.2 Page Faults
5.1.2.1 Page Table Structure
5.1.2.2 Working with Virtual Addresses
5.1.2.3 Accessed and Dirty Bits
5.1.3 Disk as Backing Store
5.1.4 Memory Mapped Files
5.2 Requirements
5.2.1 Design Document
5.2.2 Page Table Management
5.2.3 Paging To and From Disk
5.2.4 Lazy Loading
5.2.5 Stack Growth
5.2.6 Memory Mapped Files
5.3 FAQ
5.3.1 Page Table and Paging FAQ
5.3.2 Memory Mapped File FAQ
6. Project 4: File Systems
6.1 Background
6.1.1 New Code
6.2 Requirements
6.2.1 Design Document
6.2.2 Indexed and Extensible Files
6.2.3 Subdirectories
6.2.4 Buffer Cache
6.2.5 Synchronization
6.3 FAQ
6.3.1 Indexed Files FAQ
6.3.2 Subdirectories FAQ
6.3.3 Buffer Cache FAQ
A. References
A.1 Hardware References
A.2 Software References
A.3 Operating System Design References
B. 4.4BSD Scheduler
B.1 Niceness
B.2 Calculating Priority
B.3 Calculating recent_cpu
B.4 Calculating load_avg
B.5 Summary
B.6 Fixed-Point Real Arithmetic
C. Coding Standards
C.1 Style
C.2 C99
C.3 Unsafe String Functions
D. Project Documentation
D.1 Sample Assignment
D.2 Sample Design Document
E. Debugging Tools
E.1 printf()
E.2 ASSERT
E.3 Function and Parameter Attributes
E.4 Backtraces
E.4.1 Example
E.5 gdb
E.6 Debugging by Infinite Loop
E.7 Modifying Bochs
E.8 Tips
F. Development Tools
F.1 Tags
F.2 CVS
F.2.1 Setting Up CVS
F.2.2 Using CVS
F.2.3 CVS Locking
F.2.4 Setting Up ssh
F.3 VNC
F.4 Cygwin


This document was generated by CS3204 on February, 2 2006 using texi2html