User/kernel copying:
-5 Too many copies of user/kernel copying code
- -10 Doesn't check for page boundaries
- -3 Imperfect checking for page boundaries
+ -20 Doesn't check for page boundaries
+ -10 Imperfect checking for page boundaries
-5 Doesn't check whether pointers are at or above PHYS_BASE
-2 Imperfect checking whether pointers are at or above PHYS_BASE
+3 Copies large chunks while properly observing page boundaries
-5 System call error exit leaks memory/fails to release global lock
-5 Uses a pointer as a file descriptor or pid without justifying
+Wait system call:
+ -3 Busy waiting
+ -3 A static list of all parent-child pairs is extremely wasteful
+ -3 Obviously wasteful with memory (not deleting processes)
+ -2 Finished parent deletes children which may still be running
+ -1 Enable/disable interrupts
+ -2 Joinable child lets its struct thread be deleted before parent dies
+ -1 Race condition between wait and thread exit
+
Style [[/25]]
-------------
-5 Extraneous output caused warnings