3 -2 Problem 1-1: no test cases/no test output/no description in TESTCASES
4 -1 Problem 1-1: not enough testing/inconclusive test output
5 -2 Problem 1-2: no test cases/no test output/no description in TESTCASES
6 -1 Problem 1-2: not enough testing/inconclusive test output
7 -2 Problem 1-3: no test cases/no test output/no description in TESTCASES
8 -1 Problem 1-3: not enough testing/inconclusive test output
9 -2 Problem 1-4: no test cases/no test output/no description in TESTCASES
10 -1 Problem 1-4: not enough testing/inconclusive test output
16 -20 Missing or far too brief DESIGNDOC
17 -2 Troublesome or unexplained dependencies
18 -2 Changing interfaces, each (max -6)
20 DESIGNDOC (per problem):
21 -1 Minor details missing
22 -2 Major details missing
26 -1 Gratuitous use of malloc() (e.g. for allocating a list or a lock)
27 -1 Inappropriate use of ASSERT (e.g. to verify that malloc() succeeded)
29 Problem 1-1: Alarm Clock
30 -1 Uses lock/interrupt disabling without justifying
31 -1 Uses a lock within interrupt handler
33 -2 Wakes up too often, e.g. by using semaphores with negative values
34 -1 Traverses entire list of sleeping threads every tick
35 -1 Doesn't protect data structure in timer_interrupt
36 -1 Doesn't protect data structure in timer_sleep
40 -3 Busy waiting in thread finish when waiting on the parent's join
41 -3 A static list of all parent-child pairs is extremely wasteful
42 -3 Obviously wasteful with memory (not deleting threads)
43 -2 Finished parent deletes children which may still be running
44 -1 Enable/disable interrupts
45 -2 Joinable child lets its struct thread be deleted before parent dies
46 -1 Race condition between join and thread exit
48 Problem 1-3: Priority Scheduler
49 -3 Doesn't use sorted queue scheduler, and don't justify why they didn't
50 -2 sema_up() doesn't pick highest-priority waiting thread
51 -1 Should use sorted queue in semaphores, unless explained in DESIGNDOC
52 -1 cond_signal() doesn't pick highest-priority waiting thread
53 -1 Should use sorted queue in conditions, unless explained in DESIGNDOC
54 -2 Yield should pick the highest-priority thread (including current)
56 +2 Used a heap or other advanced priority queue for ready_list
58 Problem 1-4: Advanced Scheduler
65 -1 No attempt to conform to existing coding style