C ARM Assembly Systems

Pintos OS & WACC Compiler

Operating system and compiler, both from scratch. Best in cohort of 230.

Teaching OS written in C. Thread scheduling, user programs, virtual memory with page fault handling, filesystem with buffer cache. A bug in the scheduler crashes the filesystem. A memory leak in VM corrupts user programs. Everything depends on everything else.

threads

Priority scheduling with donation, alarm clock, MLFQ

userprog

Argument passing, system calls, process execution

vm

Supplemental page table, frame table, swap, memory-mapped files

filesys

Indexed and extensible files, subdirectories, buffer cache

Compiler for the WACC language targeting ARM assembly. Lexer, recursive descent parser, semantic analyser, code generator. No parser generators. Handles expressions, control flow, functions, arrays, pairs, heap allocation, register allocation.

frontend

Lexer, recursive descent parser, AST, type checking

backend

ARM assembly generation, register allocation, stack frames

Both were team projects. I led both teams. The people I built these with are potential co-founders. PG says doing hard projects with good people is the precursor to doing a startup. I agree.