Go to file
andy 47c9925e1c finish wzip, passed all tests 2023-07-05 08:45:19 -05:00
concurrency-mapreduce header nit 2018-04-20 09:30:20 -05:00
concurrency-pzip Details on compilation for pzip 2018-03-06 09:33:43 -06:00
concurrency-webserver Fix Typo 2021-06-10 11:08:15 +08:00
concurrency-xv6-threads clarity for return codes 2018-04-08 14:56:36 -05:00
filesystems-checker nit 2018-04-19 11:29:01 -05:00
filesystems-distributed more chapter info 2021-12-01 20:25:57 -06:00
initial-kv Minor example fix in readme 2021-09-09 02:33:54 +05:30
initial-memcached Update README.md 2022-09-11 10:44:59 -05:00
initial-reverse nit 2019-02-22 04:32:57 -06:00
initial-utilities finish wzip, passed all tests 2023-07-05 08:45:19 -05:00
initial-xv6 Update background.md 2020-07-18 08:02:45 -05:00
initial-xv6-tracer global clarity 2022-09-21 19:10:14 -05:00
processes-shell nit in README 2021-09-27 11:46:02 -05:00
scheduling-xv6-lottery Clarify return code on getpinfo() 2018-02-28 19:07:54 -06:00
tester updated color stuff to work more broadly 2021-09-05 12:54:43 -05:00
vm-xv6-intro Hint on cr3 update 2018-03-11 21:26:44 -05:00
INSTALL-xv6.md Update INSTALL-xv6.md 2019-06-17 21:37:16 -04:00
README.md shorten internal links for readability of markup 2019-05-01 09:17:50 -05:00

README.md

Projects for an Operating Systems Class

This repository holds a number of projects that can be used in an operating systems class aimed at upper-level undergraduates and (in some cases) beginning graduate students. They are based on years of teaching such a course at the University of Wisconsin-Madison.

Also (increasingly) available are some tests to see if your code works; eventually every project will have a set of tests available. The testing framework that is currently available is found here. A specific testing script, found in each project directory, can be used to run the tests against your code.

For example, in the initial utilities project, the relatively simple wcat program that you create can be tested by running the test-wcat.sh script. This could be accomplished by the following commands:

prompt> git clone https://github.com/remzi-arpacidusseau/ostep-projects
prompt> cd ostep-projects/initial-utilities/wcat
prompt> emacs -nw wcat.c 
prompt> gcc -o wcat wcat.c -Wall 
prompt> ./test-wcat.sh
test 1: passed
test 2: passed
test 3: passed
test 4: passed
test 5: passed
test 6: passed
test 7: passed
prompt> 

Of course, this sequence assumes (a) you use emacs (you should!), (b) your code is written in one shot (impressive!), and (c) that it works perfectly (well done!). Even for simple assignments, it is likely that the compile/run/debug cycle might take a few iterations.

C/Linux Projects

Initial Projects

These projects are meant to get you warmed up with programming in the C/UNIX environment. None are meant to be particularly hard, but should be enough so that you can get more comfortable programming.

Realize the best thing you can do to learn to program in any environment is to program a lot. These small projects are only the beginning of that journey; you'll have to do more on your own to truly become proficient.

  • Unix Utilities (cat, grep, zip/unzip)
  • Sort (text-based)
  • Sort (binary)
  • Reverse (very simple reverse program)

Processes and Scheduling

Virtual Memory

  • Memory Allocator

Concurrency

File Systems

Distributed Systems

Kernel Hacking Projects (xv6)

These projects all are to be done inside the xv6 kernel based on an early version of Unix and developed at MIT. Unlike the C/Linux projects, these give you direct experience inside a real, working operating system (albeit a simple one).

Read the install notes to see how to download the latest xv6 and install the tools you'll need.

Initial Projects

Processes and Scheduling

Virtual Memory

Concurrency

File Systems