Project 2b: Scheduling and Virtual Memory in xv6

Important Dates

Questions about the project? Use piazza.

Due: Monday 10/25 (Grace period: 2 days).

Updates

Overview

The scheduling part of the project is described here. Please read the description carefully and watch this video.

The virtual memory part of the project is described here. Please read the description carefully and watch this video.

Differences

PLEASE READ: There are some differences in this project versus the descriptions above. Notably:

  • Your scheduler will not be a lottery scheduler; it will instead be a simpler deterministic proportional-share scheduler. Specifically, if a process has N tickets, instead of running one time slice and then switching to another process, it will run N time slices in a row before switching. The number of time slices in a row a process runs is set by the same call to settickets(). Thus, if there are two RUNNABLE processes (A and B, say) in the system, one that has 3 tickets (A) and one that has 1 (B), the running pattern will be AAABAAAB ... etc. Everything else about the project remains the same (there are two system calls to implement, you need to make a graph, etc.)
  • You only have to implement the null-pointer dereference part of the VM project. You do not have to implement the call to mprotect() / read-only code part of the project.

Notes

This project is the last one to be done by yourself this semester. Congratulations on making it this far! Copying code is considered cheating. Read this for more info on what is OK and what is not.

This project is to be done on the lab machines (listed here ), so you can learn more about programming in C on a typical UNIX-based platform (Linux).

The Code

The source code for xv6 (and associated README) can be found in ~cs537-1/public/xv6.tgz . Everything you need to build and run and even debug the kernel is in there.

Handing It In

The handin directory is ~cs537-1/handin/login/p2b where login is your login.

Copy all of your source files (but not .o files, please, or binaries!) into the p2b/ subdirectory. A simple way to do this is to copy everything into the destination directory directory, then type make to make sure it builds, and then type make clean to remove unneeded files.

Finally, in your p2b directory, please make a README file to describe what you did, and include your graph in there too, called graph.pdf (great name, huh?).