Project 2: Processes and Scheduling

Important Dates And Notes

Questions about the project? Send them to .

Due: Friday 10/14 by 6pm.

You are allowed to have ONE partner for the Scheduling portion of this project. You nust do the Shell portion on your own. Your project partner must be in your discussion section; we consider your discussion section to be the one in which your handin directory exists (which we have moved if you requested a switch).

For future projects, you may change your project partner.

You should expect that for some future project (maybe Project 3, maybe others), you will need to implement the xv6 portion without a partner, so make sure you can do this work.

Copying code from other groups (whether from this semester or previous semesters) is considered cheating.


There are two parts to this project:

  • Shell: to be done on a linux machine, so you can learn more about programming in C on a typical UNIX-based platform (Linux). Before you begin, we highly recommend that you watch this video of a previous discussion section; note that the project specification has changed in some ways from this previous discussion section, but all of the discussion in the video remains relevant.
  • Scheduling: to be done in our xv6 OS hacking environment. Again, before you begin this part, carefully watch this video. You may want to watch this one several times! Again, you aren't implementing the exact same scheduler, but you still need to understand how the context switching code works.

Click on the above links to learn more about what you should do. READ EACH CAREFULLY!

Handing It In

Your handin directory is ~cs537-1/handin/DISCUSSION/LOGIN/p2 where DISCUSSION is your discussion section (e.g., 301, 302, 303, or 304) and LOGIN is your CS login.

For the C/Linux part of this project (the shell), you should turn the .c files you created. file. You should copy these .c files into your handin directory into the subdirectory called linux. You should also include a simple makefile , so we can simply type make and build your testable binary. The binary should be named mysh .

For the xv6 part of the project, copy all of your source files (but not .o files, please, or binaries!) into the xv6/ subdirectory of your p2 directory. 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. Remember to put your graph and workload descriptions in here as well.

Finally, into your p2 directory, put a README file. In there, describe what you did a little bit. The most important bit, at the top, however, should be the authorship of the project, particularly if you had a partner for Part B. Include both partner's full names, and both your CS and wisc logins to receive credit. We will only grade directories that have a README file in them.