236376 OSE Lab 7: Final Project
- Due date:
- See Webcourse.
Please note: You should not
publish your lab solutions in any publicly accessible site such as
github.
For the last part of the course you'll work on an operating
systems project of your choice. The goal is to have fun and explore
more advanced O/S topics; you don't have to do novel research.
For the final project you have two options:
- Write network device driver for JOS -- do lab 6. You are free, of course, to extend
lab 6, or any part of JOS, further in interesting ways.
- Work on a project of your choice that involves your JOS. This
project must be of the same scope as lab 6 or larger.
We'll grade you on how much you got working, how elegant your
design is, how well you can explain it, and how interesting and
creative your solution is. We do realize that time is limited, so
we don't expect you to re-write Linux by the end of the semester.
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.
Deliverables
- Send your proposal to TA in charge, which should
include:
- The names and IDs of your group members.
- What did you choose to do (no more than a paragraph or
two).
- What do you plan to present (list of
deliverables).
- Submit source code tar-ball along with a short
write-up to the webcourse site.
Put the write-up under the top-level source directory with the
name "README.pdf" or "README.txt".
- Project demonstration.
- Be ready to demo the challenges during the project presentation. Backup video is encouraged to combat technical issues during the presentation.
Ideas
Here's a list of ideas to get you started thinking --
but you should feel free to pursue your own ideas.
- Build a virtual machine monitor that can run multiple guests
(for example, multiple instances of JOS), using
x86 VM support.
- Do something useful with the x86
Trusted Execution Technology. For example, run applications
without having to trust the kernel.
Here is a recent paper on this topic.
- Fix xv6 logging to support concurrent transactions, and
generally have higher performance, perhaps taking ideas from
Linux EXT3.
- Use file system ideas from Soft
updates,
WAFL,
NILFS, ZFS, or another advanced file system.
- Add snapshots to a file system, so that a user can look at
the 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.
- Implement
capabilities to provide fine-grained control over what
privileges processes have.
- 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.
- Layer software RAID-5
over an array of disks, to increase fault tolerance and
performance.
- 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, such as file descriptors.
- Implement paging to disk in JOS,
so that processes can be bigger than RAM. Extend your pager with
swapping.
- Implement loadable
kernel modules to extend the JOS kernel to replace or extend
subsystems of the JOS kernel. For example, make the file system a
kernel module so that you can add a kernel module to read DOS
file systems, or replace the JOS file system.
- Use xfi
to sandbox code within a process.
- Implement ideas from the Exokernel papers,
(accessible from within the Technion) for example the packet
filter.
- Find more inspiration in Arrakis,
OS that impements Exokenel ideas on modern hardware.
- Make JOS have soft real-time behavior. You will have to
identify some application for which this is useful.
- Make JOS run on 64-bit CPUs. This includes redoing the
virtual memory system to use 4-level pages tables. See reference
page for some documentation.
- Port (small part of) JOS to an ARM microprocessor. The osdev wiki may be
helpful.
- A window system for JOS, including graphics driver and mouse.
See reference
page for some documentation. sqrt(x)
is an example JOS window system (and writeup).
- Implement
dune to export privileged hardware instructions to user-space
applications in JOS.
- Intel recently announced
transactional memory support for its upcoming processors.
Implement support for Intel's TSX in the QEMU emulator. A
follow-on project would be to explore the use of Intel TSX
primitives in writing concurrent software, such as extending the
JOS kernel to use transactional memory.
- Write a user-level debugger; add strace-like functionality;
hardware register profiling (e.g. Oprofile); call-traces