[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.2 Grading
1.2.1 Testing
1.2.2 Design
1.2.2.1 Design Document
1.2.2.2 Source Code
1.3 Changes
1.4 Legal and Ethical Issues
1.5 Acknowledgements
1.6 Trivia
2. Project 1: Threads
2.1 Background
2.1.1 Understanding Threads
2.1.2 Understanding CPUs
2.1.3 Source Files
2.1.3.1 devices code
2.1.3.2 lib files
2.1.4 Synchronization
2.1.5 Development Suggestions
2.2 Requirements
2.2.1 Design Document
2.2.2 Alarm Clock
2.2.3 Fair Scheduler
2.2.4 Load Balancer
2.3 Test Overview
2.4 FAQ
2.4.1 Alarm Clock FAQ
2.4.2 Fair Scheduler FAQ
2.4.3 Load Balancer FAQ
3. Project 2: User Programs
3.1 Background
3.1.1 Source Files
3.1.2 Using the File System
3.1.3 How User Programs Work
3.1.4 Virtual Memory Layout
3.1.4.1 Typical Memory Layout
3.1.5 Accessing User Memory
3.2 Suggested Order of Implementation
3.3 Requirements
3.3.1 Design Document
3.3.2 Process Termination Messages
3.3.3 Argument Passing
3.3.4 System Calls
3.3.5 Denying Writes to Executables
3.4 FAQ
3.4.1 Argument Passing FAQ
3.4.2 System Calls FAQ
3.5 80x86 Calling Convention
3.5.1 Program Startup Details
3.5.2 System Call Details
4. Project 3: Virtual Memory
4.1 Background
4.1.1 Source Files
4.1.2 Memory Terminology
4.1.2.1 Pages
4.1.2.2 Frames
4.1.2.3 Page Tables
4.1.2.4 Swap Slots
4.1.3 Resource Management Overview
4.1.4 Managing the Supplemental Page Table
4.1.5 Managing the Frame Table
4.1.5.1 Accessed and Dirty Bits
4.1.6 Managing the Swap Table
4.1.7 Managing Memory Mapped Files
4.2 Suggested Order of Implementation
4.3 Requirements
4.3.1 Design Document
4.3.2 Paging
4.3.3 Stack Growth
4.3.4 Memory Mapped Files
4.3.5 Accessing User Memory
4.4 FAQ
5. Project 4: File Systems
5.1 Background
5.1.1 New Code
5.1.2 Testing File System Persistence
5.2 Suggested Order of Implementation
5.3 Requirements
5.3.1 Design Document
5.3.2 Indexed and Extensible Files
5.3.3 Subdirectories
5.3.4 Buffer Cache
5.3.5 Synchronization
5.4 FAQ
5.4.1 Indexed Files FAQ
5.4.2 Subdirectories FAQ
5.4.3 Buffer Cache FAQ
A. Reference Guide
A.1 Loading
A.1.1 The Loader
A.1.2 Low-Level Kernel Initialization
A.1.3 High-Level Kernel Initialization
A.1.4 Physical Memory Map
A.2 Struct CPU
A.3 Threads
A.3.1 struct thread
A.3.2 Thread Functions
A.3.3 Thread Switching
A.4 Synchronization
A.4.1 Atomic Operations
A.4.2 Disabling Interrupts
A.4.3 Spinlocks
A.4.4 Semaphores
A.4.5 Locks
A.4.6 Monitors
A.4.6.1 Monitor Example
A.4.7 Optimization Barriers
A.5 Interrupt Handling
A.5.1 Interrupt Infrastructure
A.5.2 Internal Interrupt Handling
A.5.3 External Interrupt Handling
A.6 Memory Allocation
A.6.1 Page Allocator
A.6.2 Block Allocator
A.7 Virtual Addresses
A.8 Page Table
A.8.1 Creation, Destruction, and Activation
A.8.2 Inspection and Updates
A.8.3 Accessed and Dirty Bits
A.8.4 Page Table Details
A.8.4.1 Structure
A.8.4.2 Page Table Entry Format
A.8.4.3 Page Directory Entry Format
A.9 Hash Table
A.9.1 Data Types
A.9.2 Basic Functions
A.9.3 Search Functions
A.9.4 Iteration Functions
A.9.5 Hash Table Example
A.9.6 Auxiliary Data
A.9.7 Synchronization
B. Completely Fair Scheduler
B.1 Niceness
B.2 Computing Weights
B.3 Calculating Virtual Runtime vruntime
B.4 Calculating ideal_runtime
B.5 Handling I/O bound threads
B.6 Summary
B.7 Load Balancing
C. Coding Standards
C.1 Style
C.2 C99
C.3 Unsafe String Functions
D. Debugging Tools
D.1 printf()
D.2 ASSERT
D.3 Function and Parameter Attributes
D.4 Backtraces
D.4.1 Example
D.5 GDB
D.5.1 Using GDB
D.5.2 Example GDB Session
D.5.3 Debugging User Programs
D.5.4 FAQ
D.6 Triple Faults
D.7 Modifying Bochs
D.8 Tips
E. Development Tools
E.1 Tags
E.2 cscope
E.3 git
E.4 Cygwin
F. Installing Pintos
Bibliography
F.1 Hardware References
F.2 Software References
F.3 Operating System Design References
License


This document was generated by Godmar Back on January, 19 2022 using texi2html