[Top] | [Contents] | [Index] | [ ? ] |
Table of Contents
1. Introduction
1.1 Getting Started2. Project 1: Threads
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 Document1.2.3 Project Submission
1.2.2.2 Source Code
1.4 Acknowledgements
1.5 Trivia
2.1 Background3. Project 2: User Programs
2.1.1 Understanding Threads2.2 Requirements
2.1.2 Source Files
2.1.2.12.1.3 Synchronizationdevicescode
2.1.2.2libfiles
2.1.4 Development Suggestions
2.2.1 Design Document2.3 FAQ
2.2.2 Alarm Clock
2.2.3 Priority Scheduling
2.2.4 Advanced Scheduler
2.3.1 Alarm Clock FAQ
2.3.2 Priority Scheduling FAQ
2.3.3 Advanced Scheduler FAQ
3.1 Background4. Project 3: Virtual Memory
3.1.1 Source Files3.2 Suggested Order of Implementation
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 Layout3.1.5 Accessing User Memory
3.3 Requirements
3.3.1 Design Document3.4 FAQ
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.1 Argument Passing FAQ3.5 80x86 Calling Convention
3.4.2 System Calls FAQ
3.5.1 Program Startup Details
3.5.2 System Call Details
4.1 Background5. Project 4: File Systems
4.1.1 Source Files4.2 Suggested Order of Implementation
4.1.2 Memory Terminology
4.1.2.1 Pages4.1.3 Resource Management Overview
4.1.2.2 Frames
4.1.2.3 Page Tables
4.1.2.4 Swap Slots
4.1.4 Managing the Supplemental Page Table
4.1.5 Managing the Frame Table
4.1.5.1 Accessed and Dirty Bits4.1.6 Managing the Swap Table
4.1.7 Managing Memory Mapped Files
4.3 Requirements
4.3.1 Design Document4.4 FAQ
4.3.2 Paging
4.3.3 Stack Growth
4.3.4 Memory Mapped Files
4.3.5 Accessing User Memory
5.1 BackgroundA. Reference Guide
5.1.1 New Code5.2 Suggested Order of Implementation
5.1.2 Testing File System Persistence
5.3 Requirements
5.3.1 Design Document5.4 FAQ
5.3.2 Indexed and Extensible Files
5.3.3 Subdirectories
5.3.4 Buffer Cache
5.3.5 Synchronization
5.4.1 Indexed Files FAQ
5.4.2 Subdirectories FAQ
5.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
This document was generated by Stephen Houser on August, 7 2018 using texi2html