Demos: you are expected to demonstrate a detailed, working understanding of the code. As part of the demos, we will ask you to find and explain the specific parts of code that implement given functionality. We expect you to find these pieces of code quickly without having to shuffle through or read large parts of your code. In addition, we expect you to explain the general approach you took without referring to the code itself. You must demonstrate good working knowledge of the code to get credit. Please note that any partner can be asked about any part of the code. The point of having groups is that two people can often figure out things and write code faster than one. There is a reason why each of the parts of the project have been included. If each partner understands and learns from only half the project, the point of giving the entire project is lost. To summarize, you may hack only half the project but you are expected to understand all of it.
Each demo should be scheduled within one week of the project due date -- usually in the office hours of one of the TAs. It is your responsibility to schedule a demo.
Grading: projects will be graded as follows: 20% basic concepts, 20% structure and 60% correctness. We have structured the grading this way to encourage you to understand the basic concepts and to think through your solution before you start coding. Part of being a good engineer is coming up with simple designs and easy to understand code. Particularly for large software systems, like operating systems, which often live for a long long time. Some details:
We expect anyone who made a reasonable effort on the project to do well on the code knowledge part of the evaluation. We expect anyone with correct code to do well on the basic concepts section - after all, it is rather difficult to write working code if you do not understand the basic concepts. A question you may ask is if we should place less emphasis on delivering a fully debugged version of the program. We believe that being able to apply the concepts you learn is very important, and we intend the grading standards to emphasize the ability to apply concepts. In this case applying concepts means being able to deliver working code. We recognize, however, that developing Nachos code may be difficult, and we try to give fairly generous partial credit for demonstrating an understanding of the concepts and an ability to write code that reflects that understanding even if the code is not completely correct. To do well in the class, however, your code should work and be free of large conceptual bugs.