[Top] | [Contents] | [Index] | [ ? ] |
1. Introduction
1.1 Getting Started2. Project 0: Getting Real
1.1.1 Source Tree Overview1.2 Grading
1.1.2 Building Pintos
1.1.3 Running Pintos
1.1.4 Debugging versus Testing
1.2.1 Testing1.3 Legal and Ethical Issues
1.2.2 Design
1.2.2.1 Design Document
1.2.2.2 Source Code
1.4 Acknowledgements
1.5 Trivia
2.1 Background3. Project 1: Threads
2.1.1 PC Bootstrap2.2 Project 0 Requirements
2.1.2 The Boot Loader
2.1.3 The Kernel
2.2.1 Project 0 Design Document
2.2.2 Booting Pintos
2.2.3 Debugging
2.2.4 Kernel Monitor
3.1 Background4. Project 2: User Programs
3.1.1 Understanding Threads3.2 Project 1 Suggested Order of Implementation
3.1.2 Source Files
3.1.2.13.1.3 Synchronizationdevicescode
3.1.2.2libfiles
3.1.4 Development Suggestions
3.3 Requirements
3.3.1 Design Document3.4 FAQ
3.3.2 Alarm Clock
3.3.3 Priority Scheduling
3.3.4 Advanced Scheduler
3.4.1 Alarm Clock FAQ
3.4.2 Priority Scheduling FAQ
3.4.3 Advanced Scheduler FAQ
4.1 Background5. Project 3: Virtual Memory
4.1.1 Source Files4.2 Suggested Order of Implementation
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 Layout4.1.5 Accessing User Memory
4.3 Requirements
4.3.1 Design Document4.4 FAQ
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.1 Argument Passing FAQ4.5 80x86 Calling Convention
4.4.2 System Calls FAQ
4.5.1 Program Startup Details
4.5.2 System Call Details
5.1 Background6. Project 4: File Systems
5.1.1 Source Files5.2 Suggested Order of Implementation
5.1.2 Memory Terminology
5.1.2.1 Pages5.1.3 Resource Management Overview
5.1.2.2 Frames
5.1.2.3 Page Tables
5.1.2.4 Swap Slots
5.1.4 Managing the Supplemental Page Table
5.1.5 Managing the Frame Table
5.1.5.1 Accessed and Dirty Bits5.1.6 Managing the Swap Table
5.1.7 Managing Memory Mapped Files
5.3 Requirements
5.3.1 Design Document5.4 FAQ
5.3.2 Paging
5.3.3 Stack Growth
5.3.4 Memory Mapped Files
5.3.5 Accessing User Memory
6.1 BackgroundA. Reference Guide
6.1.1 New Code6.2 Suggested Order of Implementation
6.1.2 Testing File System Persistence
6.3 Requirements
6.3.1 Design Document6.4 FAQ
6.3.2 Indexed and Extensible Files
6.3.3 Subdirectories
6.3.4 Buffer Cache
6.3.5 Synchronization
6.4.1 Indexed Files FAQ
6.4.2 Subdirectories FAQ
6.4.3 Buffer Cache FAQ
A.1 LoadingB. 4.4BSD Scheduler
A.1.1 The LoaderA.2 Threads
A.1.2 Low-Level Kernel Initialization
A.1.3 High-Level Kernel Initialization
A.1.4 Physical Memory Map
A.2.1A.3 Synchronizationstruct thread
A.2.2 Thread Functions
A.2.3 Thread Switching
A.3.1 Disabling InterruptsA.4 Interrupt Handling
A.3.2 Semaphores
A.3.3 Locks
A.3.4 Monitors
A.3.4.1 Monitor ExampleA.3.5 Optimization Barriers
A.4.1 Interrupt InfrastructureA.5 Memory Allocation
A.4.2 Internal Interrupt Handling
A.4.3 External Interrupt Handling
A.5.1 Page AllocatorA.6 Virtual Addresses
A.5.2 Block Allocator
A.7 Page Table
A.7.1 Creation, Destruction, and ActivationA.8 Hash Table
A.7.2 Inspection and Updates
A.7.3 Accessed and Dirty Bits
A.7.4 Page Table Details
A.7.4.1 Structure
A.7.4.2 Page Table Entry Format
A.7.4.3 Page Directory Entry Format
A.8.1 Data Types
A.8.2 Basic Functions
A.8.3 Search Functions
A.8.4 Iteration Functions
A.8.5 Hash Table Example
A.8.6 Auxiliary Data
A.8.7 Synchronization
B.1 NicenessC. Coding Standards
B.2 Calculating Priority
B.3 Calculating recent_cpu
B.4 Calculating load_avg
B.5 Summary
B.6 Fixed-Point Real Arithmetic
C.1 StyleD. Project Documentation
C.2 C99
C.3 Unsafe String Functions
D.1 Sample AssignmentE. Debugging Tools
D.2 Sample Design Document
E.1F. Development Toolsprintf()
E.2ASSERT
E.3 Function and Parameter Attributes
E.4 Backtraces
E.4.1 ExampleE.5 GDB
E.5.1 Using GDBE.6 Triple Faults
E.5.2 Example GDB Session
E.5.3 FAQ
E.7 Modifying Bochs
E.8 Tips
F.1 TagsG. Installing Pintos
F.2 cscope
F.3 Git
F.4 VNC
G.1 Building Bochs for PintosBibliography
G.2 Hardware ReferencesLicense
G.3 Software References
G.4 Operating System Design References