: Proposal

Assigned:
Tuesday, Apr 18, 2017
Due:
Friday, Apr 21, 2017 by 10:30pm
Collaboration:
You may work individually or in groups of up to three students. You may use your classmates as a resource, but please cite them.

Overview

For the final project in this class, you will build on at least two of the core areas we covered in this course. Core areas are:

  • Virtualizing the CPU
  • Virtualizing Memory
  • Concurrency on the CPU
  • Concurrency on the GPU
  • Persistence
  • Distributed Systems (not covered, but acceptable)

The specific project is up to you, but you should be prepared to argue that your project bridges two or more areas of systems. If you are interested in a project that does not span two areas of the course I may still approve the project if it is sufficiently ambitious. If you are considering such a project, please talk to me about it as soon as possible.

Your project proposal must:

  1. Describe the purpose and impact of your system
  2. Explain how this system spans at least two of the above key areas
  3. Give a rough description of how you will implement your system

While you are not required to use figures in your proposal, they may make it easier to explain your plans. Your implementation description should describe the major components of the system, a rough timeline for the implementation, and discuss any potential challenges in the implementation. You may want to consider possible alternate solutions if your proposed strategy does not work. You should expect to have at least one but no more than three pages of single-spaced text with a reasonable font.

Project Ideas

Here are a few example projects that would meet the requirements. You are welcome to propose one of these projects if you like, but your proposal must address all three of the requirements above.

File Indexing
Scan the contents of files in a directory and its sub-directories to build an inverted index (mapping words/tokens to the files that contain them) in parallel. Use this index to search for files matching a given query. Bonus: use the inotify library to watch for file changes and update the index.
Networked Multiplayer Worm!
Use the POSIX sockets API to build a multiplayer worm game where players share the same board. You will need to decide which parts of the game to run on a server and which parts run on the clients.
GPU Galaxy or Raytracer
Port the galaxy or raytracer lab labs to run some of the parallel computations on the GPU. You may want to look at the SDL documentation to avoid copying the image data back from the GPU before displaying it.
Job Scheduler
Write a tool that will run system tasks at regular intervals. Read task descriptions from a configuration file (or files), and then start jobs at the specified intervals. This is similar to the cron utility available on many modern UNIX-like operating systems.
Working Set Visualization
Use the LD_PRELOAD trick from the malloc lab to figure out which memory is allocated to the program. Periodically, use mprotect to make memory inaccessible every once in a while, then use a signal handler to catch accesses to this memory. Each time you do this you learn which thread accessed which address. Record and analyze this information to learn how much memory in a real program is shared between threads, used primarily by one thread, frequently/infrequently accessed, or other properties of the program’s memory accesses.

Evaluation

Your project proposal will be evaluated using four criteria:

  1. Is the proposal written clearly using correct grammar and spelling?
  2. Does the proposal adequately describe the purpose of the proposed work?
  3. Does the proposed work span at least two key areas of this course?
  4. Is the proposed implementation plan sufficiently detailed?

In addition to the grade for your initial proposal, I will give proposal feedback by April 24th, 2017. You are required to address any critical issues with your proposal by April 26th at 10:30pm.