-*- text -*- General: - Suggest where to start in each assignment? - Provide more tests! Threads project: - Many students thought this was by far the hardest. What can we do to make it a little easier? Move `join' part to project 2? - Students don't understand that they'll need to read lots of code before they can start writing. - Students think data structures are more important than they really are. Say that clever data structures won't get you too much extra credit compared to simpler ones. Really bad or "stupid" data structures might cost points though. - Some students would appreciate more discussion of nitty-gritty details: Finally, by doing pintos, an x86 OS, I was hoping to gain some knowledge about how an X86 OS really works. Instead we ended up banging on a black box with magical ASM that would pop up in gdb when we had memory corruption. While one could make the argument that this is too much application over theory, I feel like the theory of OS/140 is application oriented enough that going over what an x86 OS really does would not be harmful or unacademic. What's in those first few bytes to bootstrap the OS? How does it find a kernel that is scattered across a filesystem that the bootloader/computer knows nothing about. How does I/O initiailization works? What is that magic about transforming a thread into a process? I have absolutely no idea. This feeling of not having a better grasp of OS/low-level programming is something I can't shake, but that I'm not sure how one would be rectified. How on earth did pintos get written in ~2 months? I'm again at a loss. - printf()s can fail in weird circumstances. Should we try adding code for using the special output port, which doesn't need any synchronization etc.? Userprog project: - Students thought project 2 was especially easy. Reduce amount of time to allow more time for another project? Add something to do with the page table? Move `join' functionality here from project 1? VM project: - One student suggestion: Second point of confusion: the difference between kernel address space and actual physical addresses (kernel address minus PHYS_BASE). It seemed weird that the functions to access pagedir entries used kernel virtual addresses instead of physical addresses. We eventually realized that when the assignment refers to the virtual-to-physical translations that we're supposed to do, 'physical' actually means 'kernel virtual' (or a location on disk). A sentence or two clearing up this ambiguity would have been helpful. Filesys project: - A fair number of students thought this was the hardest project. Perhaps we could add some notes about where to start?