HW2 DESIGN SUMMARY ================== OVERALL DOCUMENTATION -20 Egregious violation of style versus design document example -10 Numerous excessively long lines (> 79 characters) -10 Numerous capitalization, punctuation, spelling, or grammar errors DESIGN -10 Failure to check return value of malloc() -10 Use of ASSERT to check something that can actually fail, e.g. malloc() -10 Fails to free all resources during normal execution [specify where] -5 Fails to free all resources when handling errors [specify where] CODING STYLE -10 Inconsistent or bad coding style: no indentation, cramming many statements into one line, other issues at TA's discretion -10 Numerous very long source code lines (> 100 characters) -10 Commented-out or #if'd out code makes real code hard to read -10 Many missing comments on structure, structure members, global or static variables, or function definitions -10 Function(s) should be decomposed for clarity [indicate function] -10 Cut-and-pasted code should be made into function [indicate where] -10 Uninformative or deceptive identifiers Total deductions (capped at -40): XXX PROBLEM 1: ARGUMENT PASSING DOCUMENTATION -20 Grossly inaccurate: documentation has no resemblance to code -10 Important inaccuracies: documentation and code differ significantly [indicate how] -5 Minor inaccuracies: documentation and code differ [indicate how] -5 A1: Missing entirely/missing comments or purpose/too long -10 A2: Missing/non-responsive/too long/too short -10 A3: Missing/non-responsive/too long/too short -10 A3: Claims that strtok_r() does not modify the string it parses -0 A3: Claims that strtok() uses a static buffer for parsing -10 A4: Missing/non-responsive/too long/too short -5 A4: Claims time or space advantage for user-space parsing -5 A4: Claims that the shell implements relative paths -5 A4: Claims that user space parsing reduces context switches -5 A4: Claims that the shell enforces security policy DESIGN -30 Not implemented -10 Uses global variables, locks, etc. -15 Doesn't check for stack overflow -5 Stack overflow checking incomplete/buggy -10 Assumes any command line under N bytes long will fit in a page [change N to the value assumed, where N >= 1,366] -10 Assumes that the command line is capped at 128 bytes -1 Assumes that individual strings must be word-aligned for performance -10 Argument passing code is difficult to read or poorly abstracted -10 Uses buffer on stack to copy command, possibly overflowing the kernel stack -10 Uses buffer on stack to hold pointers to each argument, possibly overflowing the kernel stack Total deductions (capped at -30): XXX PROBLEM 2: SYSTEM CALLS DOCUMENTATION -40 Grossly inaccurate: documentation has no resemblance to code -20 Important inaccuracies: documentation and code differ significantly [indicate how] -10 Minor inaccuracies: documentation and code differ [indicate how] -10 B1: Missing entirely/missing comments or purpose/too long -1 B1: Omitted global file system synchronization -3 B1: Omitted data for tracking file descriptors -3 B1: Omitted data for "wait" system call -3 B1: Omitted data for "exec" to wait for process loading to complete -6 B2: Missing/non-responsive/too long/too short -0 B2: Claims that Pintos has stderr file descriptor -6 B3: Missing/non-responsive/too long/too short -3 B3: Claims that struct intr_frame's eax member is on user stack -6 B4: Missing/non-responsive/too long/too short -6 B4: Inspects page table for every byte accessed -6 B4: Inspects page table for each N-byte block (N <= 1,024) -6 B4: Can miss inspection for some pages in a block -6 B4: Claims that each byte in 4 kB can be on separate page -6 B4: Wrong answer for "ideal" case -12 B5+B8: Missing/non-responsive/too long/too short -3 B5+B8: "wait" or "exit" disables interrupts -3 B5+B8: "wait" or "exit" calls thread_block() (use semaphores instead) -3 B5+B8: "wait" or "exit" uses global lock or semaphore -3 B5+B8: "wait" always returns -1 if child has already exited -3 B5+B8: "wait" or "exit" searches a global list of all processes -6 B5+B8: "wait" or "exit" has race condition [which] -3 B5+B8: each additional, independent race condition for exec/wait/exit. (e.g. unsynchronized global list access vs. race in setting return values vs. race for cleanup of shared state) -6 B6: Missing/non-responsive/too long/too short -6 B7: Missing/non-responsive/too long/too short -3 B7: Calls thread_block() directly (use semaphores instead) -3 B7: Success flag in child struct thread needs too much synchronization -6 B9: Missing/non-responsive/too long/too short -6 B10: Missing/non-responsive/too long/too short -6 B11: Missing/non-responsive/too long/too short -6 B11: Claims that Pintos supports multi-threaded processes DESIGN -60 Not implemented -5 Global counter for file descriptors lacks synchronization -10 Global table of file descriptors lacks synchronization -5 Global table of file descriptors has synchronization bugs -10 No external synchronization in handling filesystem calls. -5 Global table allows multiple processes to access same file descriptor -5 Added big array (>= 512 bytes) to struct thread without justifying -10 Added big array (>= 1024 bytes) to struct thread -5 Superfluous locking on per-thread data structure [which] -10 System call handler is poorly abstracted or unreadable -5 Failed to update comment on process_wait() function after implementing -5 "open" system call fails to release all resources in error cases -10 strlen before (in the call to) validate a null terminated string Total deductions (capped at -60): XXX Total score (100 - deductions): YYY