The goal of this assignment is to come up with a plan for your course project.
The project is a more open-ended assignment, where you have the flexibility to pursue an OS topic or subsystem that interests you. The goal of the first part of this assignment then, is to identify roughly what you will be doing for the rest of the assignment.
If you work with a research group, I encourage your to adapt your research into a project. The idea should be your own and should be new, but it can significantly leverage your research group's infrastructure. You must do the writeup and the presentation completely on your own (though if you need to use a figure or two from your research group, you may do so with attribution).
I encourage you to come up with your own project idea, but there are suggestions at the end of this assignment for projects for those wishing for more guidance.
You must submit a proposal (1-2 pages long), meeting the guidelines and answering the basic questions enumerated below:
Planning is important. So I will review your proposal and give you feedback. If signficant refinement is needed, I will ask you to hand in a revised proposal in the few weeks after the proposal due date (see syllabus).
You can work in groups for your project.
If you want to recreate and extend a result from a paper, you can do that. Please indicate what paper and exactly how you plan to recreate the experiments and what you hope to learn. This can be an exceptionally valuable endeavor.
Emerging hardware such as FPGAs, GPUs, Crypto and Compression co-processors remain a major challenge for modern OSes because the stack has been slow to adjust to them, motivating vendors to build systems that go "around" the OS. Re-inventing the OS to deal with this is well beyond the scope of a class project, but empirical characterization of strengths and weaknesses of existing OS support for such devices is an extremely valuable first step toward developing better OS support. The same is true (perhaps more so) for virtualization layers below the OS. A project that begins by examining OS support for some class of emerging devices is almost certain to yield fruitful future research opportunities.
NVRAM is coming. It's been coming for some time, and research into how systems should support it, and how applications should use it is abundant. There remains abundant room for more. A great way to start digging deeper into this field would be to develop an application that assumes a particular programming model from the literature targeting exposed NVRAM and evaluate the programmability and performance benefits (or losses) relative to a similar program using traditional interfaces to persistent storage. Open-source tools that can help are available.
There are many resources concerning device drivers (in addition to the actual code/documentation that came with the kernel source). For example, there is a book "Linux Device Drivers" by Rubini & Corbet. (A slightly older 2nd edition is available online at this site.I will review your proposal, and I might request a revision.
Use Linux's asynchronous IO interfaces (aio) to build an optimized version of cp -r. Your implementation should take an existing directory name and a new name. Your code copies the entire directory tree to the new location. It should do so in as optimized a way as possible, so consider looking for file pages that are already in memory, use fallocate, schedule multiple reads at once, be aware of readahead, etc.