Selected work

Systems project, 2024

Course operating system

Built major process, descriptor, and I/O subsystems in a two-person operating-systems project.

Every system call crosses a trust boundary.

The project exposed the contracts between user programs and a small MIPS-style kernel: every pointer, descriptor, process transition, and blocking operation had to be validated across that boundary.

What I owned

I implemented major kernel subsystems in a two-person university project. The teaching harness and shell were provided course infrastructure.

  • Process scheduling, process control blocks, fork, exec, exit, and wait.
  • System calls and validation at the user-kernel boundary.
  • File descriptors, console I/O, dup, dup2, blocking pipes, and semaphores.
  • A free-list allocator with coalescing in an earlier course lab.

Key decisions

Validate at the kernel boundary

User pointers and descriptors are untrusted. System-call handlers check them before they reach kernel state.

Block instead of spin

Pipes coordinate readers and writers with semaphores and a circular buffer rather than burning CPU while they wait.

How I tested it

  • Process creation and lifecycle behavior.
  • Descriptor duplication, console I/O, and pipe blocking semantics.
  • Allocator reuse and free-list coalescing in the earlier lab.

Built with: C, MIPS, Processes, Memory, IPC, Semaphores

A note on scope

The repository is private, two-person course work. This page describes my subsystems and separates the earlier allocator lab from the operating-system project.