============= Final Project ============= Introduction ------------ The main goal is to have fun and explore more advanced O/S topics. You do not have to do novel research. But if you are interested in exploring more adventurous topic as a research, feel free to let us know (mailto:staff). * Pre-proposals should be PDF, Word Document, or Markdown, have a cover sheet with title and team names, and have at least 1/2 page of text (not including title info) per group member (e.g., 4 member = 2 pages) - Have the following parts: Intro, Background, Problem, Approach, Potential Problems or Issues * Demo and Presentation time slots will be pre-assigned before demo day. * Write-up needs to be PDF, Word Document, or Markdown, have a cover sheet with title and team names and be at least 1 page of text (not including title info) per group member (e.g., 4 members = 4 pages) - Have the following parts: Intro, Background, Problem, Approach, Results, Conclusions * Teams should work collaboratively using github * Grades will be based on originality, difficulty, completeness (particularly in the write-up), correctness, presentation skills, and effective teamwork. 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 (e.g., something of the scale of lab 6) and a more ambitious goal if things go well. For teams please no more than four to a team. Deliverables ------------ 1. Feb 20, 2017: Pre-proposal. 2. Mar 7, 2017: Proposal Presentation. 3. Apr 13, 2017: First demo day (tentative). 4. Apr 18, 2017: Second demo day (tentative). 5. Apr 20, 2017: Third demo day (or bonus topics) 6. Apr 21, 2016: Final submission. Project ideas (if you found none) --------------------------------- - 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. - Do something useful with the hardware protection of Intel SGX. `Here is a recent paper using Intel SGX `__. - Make the JOS file system support writing, file creation, logging for durability, etc., perhaps taking ideas from Linux EXT3. - Use file system ideas from `Soft updates `__, `WAFL `__, 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 (COW) (e.g, btrsf) 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. - 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, but since much state in JOS is in user-space it may be easier than process migration on Linux. - Implement `paging `__ to disk in JOS, so that processes can be bigger than RAM. Extend your pager with swapping. - Implement `mmap() `__ of files for JOS. - Use `xfi `__ to sandbox code within a process. - Support x86 `2MB or 4MB pages `__. - Modify JOS to have kernel-supported threads inside processes. See `in-class uthread assignment `__ to get started. Implementing scheduler activations would be one way to do this project. - Use fine-grained locking or lock-free concurrency in JOS in the kernel or in the file server (after making it multithreaded). The Linux kernel uses `read copy update `__ to be able to perform read operations without holding locks. Explore RCU by implementing it in JOS use it to support a name cache with lock-free reads. - Implement ideas from the `Exokernel papers `__, for example the packet filter. - Make JOS to have a soft real-time behavior. You will have to identify some application for which this is useful. - Make JOS executable on 64-bit CPUs. This includes redoing the virtual memory system to use 4-level pages tables. See `reference page `__ for some documentation. - Port JOS to a different microprocessor (e.g., ARM). 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. - Implement debugging tracing / debugging functionality for JOS by writing a user-level debugger, strace like functionality as well as hardware register profiling (e.g., Oprofile, perf). You can further implement call traces. - Perform binary emulation for (static) Linux executables on the top of JOS. - Implement a `Windows Manager `__ for JOS. - Develop benchmark suite on JOS that should stress different subsystems of JOS like memory, io, processes etc. The suite can comprise of micro as well as macro bench-suites. - Implement `ASLR `__ for JOS. - Make Qemu's debug console for JOS extensible like `gdb's python extension `__ . - Implement a `DOS emulator `__ for JOS and try to run at least one game. - Implement a toy x86 emulator that is sufficient to emulate JOS. You can look at `bochs `__ for reference. - Implement user-mode-JOS like `Usera Mode Linux `__ and try hosting virtual server or even sandboxing an application. - jitting xv6/jos (or tcc w/ xv6/jos src) - python in ring0 .. xv6 w/ address sanitizer (w/ clang port) xv6 lock profiler