Lab X: challenges

The goal of this lab is to have fun and explore more advanced systems topics. You have the following options:

  • Finish at least two challenge problems from labs 1–5.
  • Do lab 6 to extend your JOS for running a web server.
  • Work on a project of your choice that involves your JOS. It must be of the same scope as the above options or larger. See a list of suggested project ideas below.

Check out the cool lab X demos from 2015!

Deliverables

  • Nov 18: submit a short proposal on what you plan to do for lab X.
  • Dec 09: demo in class - strongly encouraged. Due to time constraints, higher priority will be given to your own projects.
  • Dec 12: submit your code and a short write-up; in the write-up, describe the problems/project and why you chose them, challenges you faced (if any), your solution, and anything interesting that you would like to share.

Project ideas

If you are doing your own project, try to make sure your goals are reasonable; perhaps set a minimum goal that’s definitely achievable and a more ambitious goal if things go well.

Here’s a list of ideas to get you started thinking. Feel free to pursue your own ideas.

  • Make JOS run on ARM CPUs. It would be cool to run your JOS on a Raspberry Pi!
  • Make JOS run on x86-64 CPUs. This includes redoing the virtual memory system to use 4-level pages tables.
  • Rewrite the JOS kernel or user-space programs (e.g., the web server in lab 6) in Go or Rust. You may need to add necessary runtime support for programs written in these languages.
  • Build a virtual machine monitor that can run multiple JOS instances, using x86 virtualization support.
  • Implement virtio drivers in JOS. For example, you can then replace the disk driver with virtio-blk, or implement a NIC driver using virtio-net.
  • Do something useful with Intel’s Software Guard Extensions (SGX), Trusted Execution Technology (TXT), or Transactional Synchronization Extensions (TSX).
  • Implement ideas (e.g., packet filter) from the papers on exokernel, proof-carrying code, or Jitk.
  • Use file system ideas from soft updates, journaling, copy-on-write, LFS, or another advanced file system.
  • A window system for JOS, including graphics driver and mouse.