University of Wisconsin–Madison · M.S. Computer Science
Coursework.
Papers I've read, projects I've built, and assignments I've worked through as part of my graduate coursework. Cards marked with a reflection contain my personal notes on the work.
Semester
Course
Type
22 entries
Exterminate All Operating System Abstractions
Dawson R. Engler, M. Frans Kaashoek · 1995
A position paper arguing that traditional OS abstractions (files, processes, sockets) harm performance, reliability, and adaptability by preventing applications from tailoring resource management. Advocates lowering the OS interface to bare hardware — the seed idea for the Exokernel architecture — where the kernel only securely multiplexes hardware while library OSes implement policy.
The Structure of the "THE"-Multiprogramming System
Edsger W. Dijkstra · 1968
Introduces layered OS design using the THE system as a case study: hardware sits at layer 0, memory management at layer 1, process abstraction at layer 2, I/O device management at layer 3, and the user program at layer 4. Each layer is verified independently, and semaphores appear here as a formal synchronization primitive for the first time.
Sharing and Protection in a Single-Address-Space Operating System
Jeffrey S. Chase, Henry M. Levy, Michael J. Feeley, Edward D. Lazowska · 1994
Presents Opal, a single-address-space OS for 64-bit architectures that decouples addressability from protection. Rather than isolating processes in separate address spaces, Opal uses segments and capabilities to grant fine-grained protection within one shared 64-bit address space, enabling efficient pointer-based sharing without expensive context switches.
Policy/Mechanism Separation in Hydra
R. Levin, E. Cohen, W. Corwin, F. Pollack, W. Wulf · 1975
Establishes policy/mechanism separation as a foundational OS design principle, demonstrated through the Hydra kernel at CMU. The kernel provides only mechanisms (scheduling, paging, protection); all policy is delegated to higher-level components. The paper shows this concretely for three subsystems: CPU scheduling, paging, and protection, proving that a minimal kernel can support diverse policies without modification.
Arrakis: The Operating System is the Control Plane
Simon Peter, Jialin Li, Irene Zhang, Dan R. K. Ports, Doug Woos, Arvind Krishnamurthy, Thomas Anderson, Timothy Roscoe · 2014
Arrakis splits the OS into a control plane (the kernel, for configuration and resource allocation) and a data plane (user space, for all I/O). Applications use SR-IOV hardware virtualization to access network and storage devices directly without kernel involvement on the critical path. Redis achieves 2–5× throughput improvement and 9× latency reduction over Linux.
Virtual Memory Primitives for User Programs
Andrew W. Appel, Kai Li · 1991
Exposes five low-level virtual memory primitives (trap, prot1, protn, unprot, dirty) to user programs, enabling user-level implementations of garbage collection, persistent stores, shared virtual memory, and data-compression paging — without kernel modifications. The paper demonstrates that VM hardware, usually hidden behind the OS, is a rich substrate for user-level systems software.
Coordinated and Efficient Huge Page Management with Ingens
Youngjin Kwon, Hangchen Yu, Simon Peter, Christopher J. Rossbach, Emmett Witchel · 2016
Ingens treats memory contiguity as a first-class OS resource and tracks actual page utilization before promoting to huge pages. Linux's Transparent Huge Pages (THP) often promotes eagerly, causing bloat and stalls; Ingens coordinates promotion with access patterns to deliver up to 18% throughput improvement and 41% reduction in tail latency.
Borrowed-Virtual-Time (BVT) Scheduling: Supporting Latency-Sensitive Threads in a General-Purpose Scheduler
Kenneth J. Duda, David R. Cheriton · 1999
BVT lets latency-sensitive threads 'borrow' virtual time from the future by warping their effective virtual time backward, letting them preempt other threads immediately upon waking. The borrowed time is repaid later, so long-run fairness is maintained while interactive threads get sub-millisecond scheduling response.
SEDA: An Architecture for Well-Conditioned, Scalable Internet Services
Matt Welsh, David Culler, Eric Brewer · 2001
SEDA (Staged Event-Driven Architecture) structures internet services as a pipeline of event-driven stages connected by queues. Each stage has a thread pool and a controller that dynamically adjusts concurrency based on queue depth, enabling graceful degradation under overload without thread-per-request overhead.
The Scalable Commutativity Rule: Designing Scalable Software for Multicore Processors
Austin T. Clements, M. Frans Kaashoek, Nickolai Zeldovich, Robert T. Morris, Eddie Kohler · 2013
Establishes a theoretical principle: whenever interface operations commute (their results are order-independent for any interleaving), there exists an implementation with conflict-free memory accesses that scales to many cores. Introduces COMMUTER to generate commutativity conditions from specs and evaluates against POSIX and the sv6 kernel.
Hyperkernel: Push-Button Verification of an OS Kernel
Luke Nelson, Helgi Sigurbjarnarson, Kaiyuan Zhang, Dylan Johnson, James Bornholt, Emina Torlak, Xi Wang · 2017
Hyperkernel encodes OS kernel handlers as finite, loop-free SMT queries and uses Z3 to automatically verify isolation: a process can only access its own memory. The 'push-button' approach requires no manual proof annotations — if Z3 discharges the queries, the kernel is verified. Hyperkernel verifies a complete, bootable OS in under a minute.
F2FS: A New File System for Flash Storage
Changman Lee, Dongho Sim, Joo-Young Hwang, Sangyeun Cho · 2015
F2FS is a log-structured file system designed around NAND flash characteristics: sequential writes for performance, multi-head logging to avoid GC pressure, and a node address table (NAT) that eliminates LFS's wandering-tree update problem. Now the default filesystem for Android devices.
RacerX: Effective, Static Detection of Race Conditions and Deadlocks
Dawson Engler, Ken Ashcraft · 2003
RacerX uses flow-sensitive interprocedural static analysis to infer locking disciplines and flag violations as potential race conditions or deadlocks. It found hundreds of bugs in Linux, FreeBSD, and commercial OS kernels, including 12 serious previously-unknown races, demonstrating that static analysis can surface concurrency bugs at scale without running the code.
Fuss, Futexes and Furwocks: Fast Userlevel Locking in Linux
Hubertus Franke, Rusty Russell, Matthew Kirkwood · 2002
Introduces futexes (fast userspace mutexes), the synchronization primitive underlying pthreads on Linux today. In the uncontended case, locking and unlocking are pure userspace atomic operations with no kernel involvement. Only when a thread must actually wait does it make a syscall, minimizing kernel overhead for the common case.
CONVEROS: Practical Model Checking for Verifying Rust OS Kernel Concurrency
Ruize Tang et al. · 2025
Applies model checking to verify concurrency correctness in the Asterinas Rust OS kernel using PlusCal specifications. CONVEROS uncovered 20 bugs across 12 critical concurrency modules — including deadlocks and atomicity violations — with a specification-to-code ratio of 0.3–2.3, demonstrating that model checking is practical for production-scale Rust kernels.
BTRFS: The Linux B-Tree Filesystem
Ohad Rodeh, Josef Bacik, Chris Mason · 2013
Describes BTRFS's copy-on-write B-tree structure that supports snapshots, checksums, transparent compression, and built-in RAID — all in a single filesystem. COW guarantees that an in-progress write never overwrites live data, enabling crash-consistent snapshots at near-zero cost and self-healing through per-block checksums.
WiscKey: Separating Keys from Values in SSD-Conscious Storage
Lanyue Lu, Thanumalayan Sankaranarayana Pillai, Andrea C. Arpaci-Dusseau, Remzi H. Arpaci-Dusseau · 2016
WiscKey redesigns LSM-tree key-value stores for SSDs by keeping only keys in the tree and storing values in a separate append-only log. This eliminates value write amplification during compaction while exploiting SSD's cheap random reads. Achieves up to 8× faster sequential loads and 3.6× faster random lookups than LevelDB.
Adaptive Huge-Page Subrelease for Non-moving Memory Allocators in Warehouse-Scale Computers
Martin Maas, Chris Kennelly, Khanh Nguyen, Darryl Gove, Kathryn S. McKinley, Paul Turner · 2021
Addresses the tension between keeping memory as huge pages (for TLB performance) and releasing memory back to the OS (for efficiency at warehouse scale). Introduces adaptive subrelease — breaking up huge pages only when demand warrants — that maintains 98% huge-page coverage vs. 87% without it, while still returning memory promptly. Deployed in Google's TCMalloc.
SCONE: Secure Linux Containers with Intel SGX
Sergei Arnautov, Bohdan Trach, Franz Gregor, Thomas Knauth, André Martin, Christian Priebe, Joshua Lind, Divya Muthukumaran, Dan O'Keeffe, Mark L. Stillwell, David Goltzsche, Dave Eyers, Rüdiger Kapitza, Peter Pietzuch, Christof Fetzer · 2016
SCONE runs Linux containers inside Intel SGX enclaves, protecting application memory and secrets from a compromised host OS or hypervisor. To avoid expensive enclave transitions on every syscall, it uses shielded execution with asynchronous system call forwarding and transparent I/O encryption, achieving 0.6×–1.2× native throughput.
Erebor: A Drop-In Sandbox Solution for Private Data Processing in Untrusted Confidential Virtual Machines
Xiao Zhang et al. · 2025
Erebor provides intra-kernel privilege isolation inside confidential VMs, preventing an untrusted guest OS kernel from accessing sensitive application data. The sandbox is drop-in compatible with existing cloud deployments and imposes only 4.5%–13.2% performance overhead, extending confidential computing guarantees to the guest OS threat model.
Towards a Machine Learning-Assisted Kernel with LAKE
Henrique Fingler, Isha Tarte, Hungchen Yu, Ariel Szekeres, Sanketh Vedula, Avishay Traeger, Ronen Kat, Emmett Witchel · 2023
LAKE enables ML inference inside the OS kernel, allowing subsystems like I/O scheduling and memory management to make data-driven decisions. It introduces a kernel-space ML runtime with support for hardware accelerators and achieves 95% inference speedup for I/O latency prediction while avoiding the cost of user-kernel context switches for inference.
Kleio: A Hybrid Memory Page Scheduler with Machine Intelligence
Georgios Doudali, Sergey Blagodurov, Abhinav Vishnu, Dimitrios Nikolopoulos, Christos Antonopoulos · 2019
Kleio manages page placement in tiered memory systems (DRAM + NVM or HBM + DDR) by combining history-based heuristics with a recurrent neural network for access-pattern prediction. It reduces the performance gap with an oracle page scheduler by 80%, deploying the RNN selectively to amortize inference cost.