Course overview

How to design Operating Systems

51 modules
216 lessons
—
Part 1

Course Setup and the Incremental Ladder

  1. Course Setup and the Incremental LadderSign in

  2. Why "Processes to Kernels"Sign in

  3. How to Use This CourseSign in

  4. The Incremental Ladder (Step 0 to Step 7)Sign in

  5. The Course LensesSign in

  6. Diagram Legend and Notation TypesSign in

Part 2

OS as a Resource Manager and Abstract Machine

  1. OS as a Resource Manager and Abstract MachineSign in

  2. Hardware vs OS vs ApplicationsSign in

  3. The OS as Provider of Virtual ResourcesSign in

  4. The OS as the Machine Below the Language RuntimeSign in

Part 3

Classic OS Abstractions

  1. Classic OS AbstractionsSign in

  2. Processes, Threads, Files, Sockets, DevicesSign in

  3. "Everything Is a File" and Other PhilosophiesSign in

  4. Tradeoffs in Abstraction BoundariesSign in

Part 4

Kernel Space vs User Space

  1. Kernel Space vs User SpaceSign in

  2. Protection Rings and Privilege LevelsSign in

  3. The System Call Boundary and Kernel Entry/ExitSign in

  4. Why Isolation Exists and What It EnablesSign in

Part 5

OS Architecture Families (Conceptual)

  1. OS Architecture Families (Conceptual)Sign in

  2. OS Architecture Families - Monolithic, Microkernel-ish, Hybrid, Exokernel-ishSign in

  3. Tradeoffs - Performance, Simplicity, Extensibility, SafetySign in

  4. Finding Your Place on the SpectrumSign in

Part 6

Diagramming OS Architectures

  1. Diagramming OS ArchitecturesSign in

  2. Process and Thread DiagramsSign in

  3. Memory Maps and Page Layout DiagramsSign in

  4. Driver Stacks, I/O Paths, and System Call FlowsSign in

Part 7

Processes as Executing Programs

  1. Processes as Executing ProgramsSign in

  2. Program vs Process; Code vs Running InstanceSign in

  3. Process Control Blocks (PCBs) and Basic MetadataSign in

  4. Process States: New, Ready, Running, Waiting, TerminatedSign in

Part 8

Threads and Concurrency within a Process

  1. Threads and Concurrency within a ProcessSign in

  2. Threads Sharing Address Space vs Separate ProcessesSign in

  3. User-Level vs Kernel-Level Threads (Conceptual)Sign in

  4. Thread Lifecycle and Scheduling HooksSign in

Part 9

Address Spaces and Layout

  1. Address Spaces and LayoutSign in

  2. Code, Data, Heap, Stack, and Kernel MappingsSign in

  3. Per-Process Address Space vs Shared Memory SegmentsSign in

  4. TLBs and Translation (Conceptual)Sign in

Part 10

Process Creation, Termination, and Hierarchies

  1. Process Creation, Termination, and HierarchiesSign in

  2. Fork-Like vs Spawn-Like ModelsSign in

  3. Parent-Child Relationships, Process Groups, and SessionsSign in

  4. Exit Codes, Zombies, Orphans, and ReapingSign in

Part 11

Virtual Memory Basics

  1. Virtual Memory BasicsSign in

  2. Pages, Frames, and MappingSign in

  3. Page Tables and Translation (Conceptual)Sign in

  4. Benefits - Isolation, Overcommit, and Flexible LayoutSign in

Part 12

Paging, Faults, and Swapping (Conceptual)

  1. Paging, Faults, and Swapping (Conceptual)Sign in

  2. Page Faults and Demand PagingSign in

  3. Swapping Pages to Disk (Conceptual)Sign in

  4. Replacement Policy and Thrashing AvoidanceSign in

Part 13

System Calls and Traps

  1. System Calls and TrapsSign in

  2. From Function Call to Syscall: The Mode SwitchSign in

  3. Syscall Interface Design: Numbers, Stubs, and Calling ConventionsSign in

  4. Validating Arguments and Returning ResultsSign in

Part 14

Core OS APIs

  1. Core OS APIsSign in

  2. Process Management: Create, Load, Exit, WaitSign in

  3. Memory Management APIs: Allocation, Mapping, and ProtectionSign in

  4. Basic I/O APIs: Open, Close, Read, WriteSign in

Part 15

CPU Scheduling Fundamentals

  1. CPU Scheduling FundamentalsSign in

  2. Scheduling Goals: Fairness, Throughput, Latency, ResponsivenessSign in

  3. Basic Scheduling Algorithms: FCFS, Round-Robin, PrioritySign in

  4. Preemption and Time SlicesSign in

Part 16

Multiprocessor and Multicore Scheduling

  1. Multiprocessor and Multicore SchedulingSign in

  2. Per-Core vs Global Run Queues (Conceptual)Sign in

  3. Load Balancing and CPU AffinitySign in

  4. Hyperthreading-Like Concepts (High-Level)Sign in

Part 17

Context Switching and Kernel Data Structures

  1. Context Switching and Kernel Data StructuresSign in

  2. Saving and Restoring Context (Registers and Stack Pointers)Sign in

  3. Ready Queues and Wait Queues (Runnable vs Blocked Work)Sign in

  4. Interrupts vs Scheduled Preemption (Who Triggers a Switch)Sign in

Part 18

Synchronization Primitives (Conceptual)

  1. Synchronization Primitives (Conceptual)Sign in

  2. Race Conditions, Critical Sections, and Mutual ExclusionSign in

  3. Locks, Mutexes, Semaphores, and Condition VariablesSign in

  4. Lock-Free and Wait-Free Patterns (High-Level)Sign in

Part 19

Deadlocks, Starvation, and Priority Inversion

  1. Deadlocks, Starvation, and Priority InversionSign in

  2. Conditions for Deadlock (Conceptual)Sign in

  3. Deadlock Avoidance and Detection StrategiesSign in

  4. Priority Inversion and Mitigation (Priority Inheritance, Conceptual)Sign in

Part 20

Concurrency Structures in the Kernel

  1. Concurrency Structures in the KernelSign in

  2. Per-CPU Structures vs Shared StructuresSign in

  3. Reader-Writer Patterns and Reference CountingSign in

  4. Balancing Fine-Grained Locking vs SimplicitySign in

Part 21

Files, Directories, and Namespaces

  1. Files, Directories, and NamespacesSign in

  2. File Descriptors and Path ResolutionSign in

  3. Directory Trees and Mount PointsSign in

  4. Multiple Filesystems in a Unified NamespaceSign in

Part 22

Block Devices, Buffers, and Caches

  1. Block Devices, Buffers, and CachesSign in

  2. Block Devices vs Character DevicesSign in

  3. Buffer Cache and Page Cache ConceptsSign in

  4. Read-Ahead, Write-Back, and Consistency TradeoffsSign in

Part 23

Filesystem Layout and Metadata (Conceptual)

  1. Filesystem Layout and Metadata (Conceptual)Sign in

  2. Inodes or Equivalent Metadata RecordsSign in

  3. Allocation Strategies for Data BlocksSign in

  4. Journaling vs Copy-on-Write vs Simple Layout (Conceptual)Sign in

Part 24

I/O Paths and VFS Layers

  1. I/O Paths and VFS LayersSign in

  2. Virtual Filesystem (VFS)-Like AbstractionSign in

  3. Pluggable Filesystem ModulesSign in

  4. From Syscall to Driver - The I/O StackSign in

Part 25

Special Files, Pipes, and Sockets

  1. Special Files, Pipes, and SocketsSign in

  2. Pipes and FIFOs as Kernel BuffersSign in

  3. Device Files Mapping to DriversSign in

  4. Sockets as Endpoint Abstractions for Network StacksSign in

Part 26

Storage Devices and Performance Considerations

  1. Storage Devices and Performance ConsiderationsSign in

  2. Storage Media as a Boundary (HDDs, SSDs, and Beyond)Sign in

  3. Alignment, Access Patterns, and WearSign in

  4. Kernel I/O Strategy (Batching, Queues, and Scheduling)Sign in

Part 27

Drivers as OS Extensions

  1. Drivers as OS ExtensionsSign in

  2. The Role of Drivers in the OSSign in

  3. Driver Models and Frameworks (Conceptual)Sign in

  4. Kernel-Mode vs User-Mode Drivers (Where Applicable)Sign in

Part 28

Interrupts and I/O Completion

  1. Interrupts and I/O CompletionSign in

  2. Interrupt Handling and Deferred ProcessingSign in

  3. Polled vs Interrupt-Driven I/OSign in

  4. Completion Queues and Notification to User SpaceSign in

Part 29

Buses, Enumerations, and Plug-and-Play

  1. Buses, Enumerations, and Plug-and-PlaySign in

  2. Peripheral Buses (Conceptual)Sign in

  3. Device Enumeration and Resource AssignmentSign in

  4. Handling Hot-Plug and Hot-Unplug EventsSign in

Part 30

Hardware Abstraction Layers

  1. Hardware Abstraction LayersSign in

  2. HALs for Portability Across HardwareSign in

  3. Abstracting Timers, Clocks, and Low-Level ResourcesSign in

  4. Pros and Cons of Thick vs Thin HALsSign in

Part 31

Power Management and Performance States

  1. Power Management and Performance StatesSign in

  2. Performance States and Idle States (Conceptual)Sign in

  3. OS Control Over Power vs Device-Level HeuristicsSign in

  4. Impact on Scheduling and Device BehaviorSign in

Part 32

Robustness and Driver Isolation Strategies

  1. Robustness and Driver Isolation StrategiesSign in

  2. Kernel Driver Failures vs User-Visible CrashesSign in

  3. Strategies for Containing Driver Faults (Conceptual)Sign in

  4. Testing and Validating Drivers as Part of OS ReliabilitySign in

Part 33

Users, Permissions, and Access Control

  1. Users, Permissions, and Access ControlSign in

  2. Users, Groups, and IdentitiesSign in

  3. File Permissions, ACLs, and CapabilitiesSign in

  4. Mapping the OS Security Model to System Design GoalsSign in

Part 34

Process Isolation and Protection Mechanisms

  1. Process Isolation and Protection MechanismsSign in

  2. Memory Protection With Address Spaces and PermissionsSign in

  3. Kernel vs User Memory Access Rules at the System Call BoundarySign in

  4. Preventing Cross-Process Interference Through Mediation and Controlled SharingSign in

Part 35

Sandboxing and Namespaces (Conceptual)

  1. Sandboxing and Namespaces (Conceptual)Sign in

  2. Per-Process Views of Shared ResourcesSign in

  3. Namespaces as Isolation MechanismsSign in

  4. Containers as Packaging Around OS Isolation FeaturesSign in

Part 36

Resource Accounting and Limits

  1. Resource Accounting and LimitsSign in

  2. Quotas on CPU, Memory, I/O, and Other ResourcesSign in

  3. Cgroup-Like Resource Grouping and Control (High-Level)Sign in

  4. Preventing Starvation and Denial-of-Service with Local ControlsSign in

Part 37

Authentication, Authorization, and Auditing Hooks

  1. Authentication, Authorization, and Auditing HooksSign in

  2. API Hooks for Auth/Authz Decisions (Conceptual)Sign in

  3. Logging and Audit Trails at the Kernel/User BoundarySign in

  4. Providing Primitives for Security ToolingSign in

Part 38

Secure Boot and Integrity (OS Perspective)

  1. Secure Boot and Integrity (OS Perspective)Sign in

  2. OS Role in Boot Integrity (In Cooperation with Lower Layers)Sign in

  3. Protecting System Binaries and ConfigurationSign in

  4. Runtime Integrity Monitoring (Conceptual)Sign in

Part 39

Init Systems and Service Management

  1. Init Systems and Service ManagementSign in

  2. System Startup - From Kernel Handoff to User SpaceSign in

  3. Init and Service Managers (Conceptual)Sign in

  4. Service Lifecycles, Restarts, and DependenciesSign in

Part 40

Shells, Terminals, and Command Environments

  1. Shells, Terminals, and Command EnvironmentsSign in

  2. The Shell as the User's Programming EnvironmentSign in

  3. Terminals, TTYs, and Pseudo-TerminalsSign in

  4. CLI and GUI as Two Faces of the Same Operating SystemSign in

Part 41

Package Management and Software Distribution

  1. Package Management and Software DistributionSign in

  2. Bundling Software for the OSSign in

  3. Dependency Management and VersioningSign in

  4. Repositories vs Manual DeploymentSign in

Part 42

Logs, Metrics, and Observability Tools

  1. Logs, Metrics, and Observability ToolsSign in

  2. Logging from Kernel and ServicesSign in

  3. Basic Observation Tools for a Running SystemSign in

  4. Tracing and Profiling Across the User-Kernel BoundarySign in

Part 43

Debugging and Development Tooling

  1. Debugging and Development ToolingSign in

  2. User-Level Debugging vs Kernel-Level DebuggingSign in

  3. System Call Tracing and Core DumpsSign in

  4. Tooling as Part of the OS ProductSign in

Part 44

Configuration, Policy, and System Management

  1. Configuration, Policy, and System ManagementSign in

  2. Centralized vs Distributed ConfigurationSign in

  3. Policy Layers for Security, Resource Use, and BehaviorSign in

  4. Admin Tooling to Configure the OS "Personality"Sign in

Part 45

Choosing an OS Architecture

  1. Choosing an OS ArchitectureSign in

  2. Monolithic vs Microkernel-ish vs Hybrid Tradeoffs, RevisitedSign in

  3. Use-Case Driven Design - Embedded, General-Purpose, and Specialized OS ChoicesSign in

  4. Constraints - Hardware, Performance, and Development Team RealitiesSign in

Part 46

Bootstrapping a New Kernel

  1. Bootstrapping a New KernelSign in

  2. Early Boot Bring-Up and the Minimal Kernel EnvironmentSign in

  3. The Initial Process, a Simple Scheduler, and Early Memory ManagementSign in

  4. Incrementally Layering Features Without Collapsing Failure DomainsSign in

Part 47

Building Out Core Subsystems

  1. Building Out Core SubsystemsSign in

  2. Iterating on Process and Thread ManagementSign in

  3. Adding Virtual Memory SophisticationSign in

  4. Integrating Device Drivers and I/O SubsystemsSign in

Part 48

Stability, Testing, and Release Engineering

  1. Stability, Testing, and Release EngineeringSign in

  2. Testing Strategies for a Kernel and OSSign in

  3. Compatibility and ABI Stability PoliciesSign in

  4. Release Cadence and Patching StrategiesSign in

Part 49

Ecosystem and Community

  1. Ecosystem and CommunitySign in

  2. Encouraging Driver and Application DevelopmentSign in

  3. Documentation, SDKs, and Sample Code as Interface ContractsSign in

  4. Governance Structures for Evolving an OS EcosystemSign in

Part 50

Long-Term Evolution and Portability

  1. Long-Term Evolution and PortabilitySign in

  2. Porting to New Hardware ArchitecturesSign in

  3. Deprecating Features and Managing LegacySign in

  4. Planning for Decades of EvolutionSign in

Part 51

Reference OS Design Patterns

  1. Reference OS Design PatternsSign in

  2. Reference Patterns - Embedded, Server, and Desktop OS ShapesSign in

  3. Mapping the Incremental Ladder Steps to a RoadmapSign in

  4. Design Checklists as Boundary ReviewsSign in

  5. Appendix A - Diagram Templates by StepSign in

  6. Appendix A - Concrete Diagram TemplatesSign in

  7. Appendix B - Mapping Concepts to OS Architecture FamiliesSign in

  8. Appendix B - Reading OS Documentation Through BoundariesSign in

  9. Appendix B - The Same Concepts Under Different NamesSign in

  10. Appendix C - Readiness as Failure-Domain DisciplineSign in

  11. Appendix C - "Are We Ready to Move from Step N to Step N+1?"Sign in

  12. Appendix C - From Toy Kernel to Operable PlatformSign in

  13. Appendix D - Glossary as a Contract ToolSign in

  14. Appendix D - Glossary of Core OS TermsSign in