Pintos

Systems Programming

UT Operating Systems course project. Starting from the bare Pintos kernel I implemented the core of a working operating system: loading and managing user processes, a system-call layer with validation on every user pointer, demand-paged virtual memory with swap, and file system support, with locks, semaphores and condition variables underneath. Developed on macOS against QEMU and debugged with gdb. The code stays private under academic integrity policy, but the design is mine to walk through.

user processessystem callsvirtual memoryfile systemuser/kernelboundary
Architecture sketch of the subsystems, not measured data.

Case study

Problem

UT's Operating Systems course starts from the bare Pintos teaching kernel. The job is to turn it into an operating system that can load and run user programs, which the kernel cannot trust.

My part

I implemented the kernel subsystems: process startup and management, system-call handling, page-fault resolution and page tables, and file system support.

Approach

Everything crosses one boundary. A system call arrives carrying user-supplied pointers, and each one is validated before the kernel uses it. Memory is demand-paged: a page is brought in on its first fault and can be evicted to swap. Locks, semaphores and condition variables coordinate the shared kernel state underneath, the file system included.

Evidence

The source stays private under the course's academic integrity policy; the design above is what I can discuss in detail. Developed on macOS against QEMU and debugged with gdb.

Limits

A teaching kernel, developed and run under QEMU emulation.

Skills

  • C
  • Operating Systems
  • Kernel
  • Virtual Memory
  • QEMU