The goal of the project is to have fun and explore more advanced systems topics.
You have two options:
- Finish one of the following labs: mmap, net.
- Work on a project of your choice that involves xv6.
It must be of the same scope as the above options or larger.
See a list of suggested project ideas below.
Important dates
- Nov 6: submit a proposal (one paragraph, with the names of your team members)
on what you plan to do for the project.
- Dec 2: demo in class.
- Dec 8: submit your code and a write-up in PDF (up to two pages); 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.
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.
- Change the system-call interface of xv6 to be compatible with that of Linux.
You should be able to run the same user binaries on both xv6 and Linux.
- Replace the hardcoded memory layout (
kernel/memlayout.h
) using the device tree
mechanism (e.g., through libfdt).
- Rewrite the xv6 kernel or user-space programs
in Go or Rust.
You may need to add necessary runtime support for programs written in these languages.
- Build a hypervisor that can run multiple xv6 instances.
The hypervisor may run in either M-, S-, or HS-mode.
- Implement more virtio
drivers.
For example, you can replace the file system using
virtio-9p or
virtio-fs,
or use the virtio entropy device for
/dev/random
.
- Add container support to xv6
(e.g., Project Payload from CSE 481A).
- Implement SGX-like software enclaves, using ideas from
Komodo,
Keystone,
or the security monitors in Serval.
- Implement ideas (e.g., packet filter) from the papers on
exokernels,
proof-carrying code,
or Jitk.
- Use file system ideas from soft updates, journaling, copy-on-write, LFS,
or another advanced file system.
- Implement a window system or a VNC server (e.g., vncd in Hyperkernel).