The goal of this assignment is to come up with a plan for your programming project.
Lab 3 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).
There are suggestions at the end of this assignment for projects. Unless you have made other arrangements, you should focus on doing something with Linux device drivers.
You must submit a proposal (1-2 pages long).
Provide a detailed timeline of how you plan to build the system. It is really important to have intermediate milestones where some subset of functionality is completely working by date X rather than working on all functionality in parallel and finding out what works on the deadline. Give a list of 4 key milestones.
What infrastructure will you have to build to run the experiments you want to run? What hardware will you need and where will you get it? (Talk to me early if you have an experiment that needs hardware support but you don't know where to get the hardware from.)
What kind of experiments do you plan to run? How will you know if you have succeeded? What kind of performance or functionality problems do you anticipate?Planning is important. So I will review your proposal and give you feedback. you might need to hand in a revised proposal.
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.