explaingit

remzi-arpacidusseau/ostep-projects

5,738CAudience · developerComplexity · 4/5Setup · moderate

TLDR

University-level operating systems course projects covering Unix utilities, shells, memory allocators, concurrent programs, and xv6 kernel modifications, all implemented in C on Linux, with automated test scripts.

Mindmap

mindmap
  root((ostep-projects))
    Linux track
      Unix utilities
      Simple shell
      Memory allocator
      Concurrent programs
    xv6 track
      Lottery scheduler
      Virtual memory
      Kernel threads
    Tools
      C language
      Automated tests
      Linux environment
    Companion
      OSTEP textbook
      UW-Madison course
Click or tap to explore — scroll the page freely

Code map

Detail Auto

An interactive map of this repo's files and how they connect — its source is parsed live in your browser. Click Visualize to build it.

filefunction / class

Things people build with this

USE CASE 1

Practice building Unix command-line tools from scratch in C as part of an OS course assignment.

USE CASE 2

Implement a shell with process management to understand how operating systems execute programs.

USE CASE 3

Modify the xv6 teaching OS kernel to add features like a lottery scheduler or null-pointer memory protection.

USE CASE 4

Complete a MapReduce or parallel web server project to learn concurrent programming in C.

Tech stack

CLinuxxv6

Getting it running

Difficulty · moderate Time to first run · 1h+

Requires Linux with GCC, xv6 projects also need the xv6 build toolchain installed.

In plain English

This repository contains a set of programming projects designed for an undergraduate operating systems course. The projects were developed over years of teaching at the University of Wisconsin-Madison. Students in such a course typically use this material to practice building real software that interacts directly with the operating system, working in the C programming language on Linux. The projects are organized into two tracks. The first track uses standard Linux and covers topics that appear in a typical OS curriculum: basic Unix command-line utilities (tools like cat and grep built from scratch), a simple shell that can run programs, a memory allocator, concurrent programs like a web server and a parallel compression tool, a MapReduce implementation, and a file system checker. These projects get progressively harder as the course advances through its major topics. The second track uses xv6, a small teaching operating system developed at MIT that is based on an early version of Unix. Working inside xv6 means students modify actual kernel code rather than just writing programs that run on top of an operating system. Projects in this track include adding a lottery scheduler, implementing null pointer protections in virtual memory, and building basic kernel-level threads. Each project directory includes test scripts so students can check whether their code produces the correct output. The testing framework runs automated tests and prints pass or fail for each one, giving quick feedback during the write, compile, and debug cycle. The repository is a companion to the textbook Operating Systems: Three Easy Pieces (often called OSTEP), written by the same author. Instructors can use these projects as homework assignments alongside that book.

Copy-paste prompts

Prompt 1
Help me implement the xv6 lottery scheduler project, walk me through adding random ticket-based process scheduling to the xv6 kernel in C.
Prompt 2
I'm working on the ostep-projects Unix shell assignment. Help me implement fork, exec, and pipe handling in C.
Prompt 3
Debug my memory allocator for the ostep-projects malloc project, I'm getting segfaults on calls to free().
Prompt 4
Explain how the ostep-projects concurrent web server assignment works and what race conditions I should watch out for.
Open on GitHub → Explain another repo

← remzi-arpacidusseau on gitmyhub — every repo by this author, as a profile.

Verify against the repo before relying on details.