If you are taking 6.828, you must do a project in a team of two to
pass 6.828. Some ideas for projects are below. The deadlines for
the project are as follows:
- Email idea to staff: Due, September 19, 2019
- Email proposal to staff: Due, October 3, 2019
- Email project status update: Due, October 31, 2019
- Email project status update: Due, November 14, 2019
- Code repository and short report Due, December 6, 2019
- Check-off and in-class demos, Week of December 9, 2019
Project ideas
- Build a virtual machine monitor that can run multiple guests (for
example, multiple instances of xv6), using trap-and-emulate.
- Make the xv6 file system implement high-performance logging in
the spirit of of Linux EXT3.
- Use file system ideas
from WAFL,
ZFS, or another advanced file system. For example, add file system as
it appeared at various points in the past. You'll probably want to
use some kind of copy-on-write for disk storage to keep space
consumption down.
- Build a
distributed shared memory (DSM) system, so that you can run
multi-threaded shared memory parallel programs on a cluster of
machines, using paging to give the appearance of real shared memory.
When a thread tries to access a page that's on another machine, the
page fault will give the DSM system a chance to fetch the page over
the network from whatever machine currently stores it.
- Allow processes to migrate from one machine to another over the
network. You'll need to do something about the various pieces of a process's
state in the kernel.
- Implement containers for xv6.
- Use xfi to
sandbox code within a process.
- Modify xv6 to have kernel-supported threads inside processes.
Implementing scheduler activations would be one way to do this
project.
- Implement ideas from
the Exokernel
papers in xv6, for example the packet filter and a user-level
network stack.
- A window system for xv6, including graphics driver and mouse.
- Make xv6 runs on real RISC-V hardware and do something cool with it.
- Implement dynamic linking on xv6 and use it in interesting ways.
- Implement TCP/IP for xv6.
- Implement address space randomization for xv6.
- Implement side-channel mitigation techniques in xv6.
- Do something substantive in Linux. For example, implement
sv6's refcache and radixvm in Linux.
- Port Biscuit work to RISC-V.
- Rewrite xv6 (or parts of it) in Rust.
- Kernel pcqrofiler for xv6