Grading Guideline for PA3 ========================= Total points: 100 +---------------------+ | General Guidelines: | +---------------------+ 1) The points below are maximum points. Partial credits may be given, if appropriate. 2) Grade what's in the "plus points" section first, then grade the "minus points" to deduct points. 3) Please read the student's README file first to see if you need to do something different to get their code to work and what the known problems are. The grader must not modify ANY source code and the grader can only grade on a standard 32-bit Ubuntu 16.04 system. Also, a Makefile must be used to compile student's code. If the only way to get a Makefile to work is to use it with an IDE, the grader will refuse to grade your assignment and you will get a score of 1 for the assignment (which is the minimum score if you have submitted something related to this assignment). 4) The scripts below are for bash. If you using something else, please do "bash" and then run the scripts. 5) The grading is meant to be harsh! In the "plus points" section, if running the "diff" command is suppose to produce no output, but the student's code produces some output, most likely, no corresponding plus points will be earned. Again, we cannot grade base of "effort". Similarly, if running the "diff" command suppose to produce some output, but the student's code produces no output or in the wrong format, most likely, no corresponding plus points will be earned. 6) Unless otherwise specified, the minimum deduction for a mistake of any kind is 0.5 pt (unless you have lost all the points allocated for a particular test/subtest) even if all are caused by the same programming bug. If a range is specified (e.g., -5 to -10 pts), it means that if such an error occured, even just once, the minimum will be deducted. From that point on, each additional occurrence will incur a 0.5 pt deduction (unless otherwise specified). 7) The posted grading guidelines is not perfect. We will try our best to stick to the grading guidelines. Sometimes, after we started grading some of the submissions, we realize that we missed something (most often in "minus points"). The bottomline is that we reserve the right to add or change things in the grading guidelines as we see fit (or take additional deductions if you don't follow the spec). By default, if the spec says that you are required to implement something, even though it's not explicitly mentioned in the grading guidelines, you must follow the spec (unless it's overridden by a post in the class Piazza). Please don't assume that it's fine not to follow the spec. If you are not sure about something, it's best to send an email to the instructor for clarification. 8) The grader will grade using a different set of "data" (we will try our best not to change the script). Any numerical value or filename in a commandline arguments is also considered "data". The contents of all test data files will also be changed. Some filenames can also change. So, you need to make sure that your code can handle any valid input. +----------------+ | Do this first: | +----------------+ Read "pa3-README.txt" in the student's submission and follow the instruction there to compile and run xv6 in the manner specified in the spec. If the student's code is not in C or requiring a non-standard package to be installed, skip grading and assign a grade of 1 pt. Make sure CPUS := 1 in Makefile +--------------+ | Plus points: | +--------------+ (A) mutextest1 : +34 points # type the following into a terminal: make qemu-nox # if you don't get the xv6 prompt (which is "$ "), skip the rest of the rest and give 0 pt # type the following at the xv6 prompt: $ mutextest1 # (15 pts) should see the following printout (indentation added for clarity): # please note that each successful thread join is worth 1 pt # if this test cannot finish, give 1 pt for each successful thread join # # ~~~~~~~~~~~~~~~~~~ mutex test 1 ~~~~~~~~~~~~~~~~~~ # joining on thread 4 # thread 4 said hi # finished join # joining on thread 5 # thread 5 said hi # finished join # joining on thread 6 # thread 6 said hi # finished join # joining on thread 7 # thread 7 said hi # finished join # joining on thread 8 # thread 8 said hi # finished join # joining on thread 9 # thread 9 said hi # finished join # joining on thread 10 # thread 10 said hi # finished join # joining on thread 11 # thread 11 said hi # finished join # joining on thread 12 # thread 12 said hi # finished join # joining on thread 13 # thread 13 said hi # finished join # joining on thread 14 # thread 14 said hi # finished join # joining on thread 15 # thread 15 said hi # finished join # joining on thread 16 # thread 16 said hi # finished join # joining on thread 17 # thread 17 said hi # finished join # joining on thread 18 # thread 18 said hi # finished join # Finished. # repeat the previous command $ mutextest1 # (15 pts) should see the following printout (indentation added for clarity): # please note that each successful thread join is worth 1 pt # if this test cannot finish, give 1 pt for each successful thread join # # ~~~~~~~~~~~~~~~~~~ mutex test 1 ~~~~~~~~~~~~~~~~~~ # joining on thread 20 # thread 20 said hi # finished join # joining on thread 21 # thread 21 said hi # finished join # joining on thread 22 # thread 22 said hi # finished join # joining on thread 23 # thread 23 said hi # finished join # joining on thread 24 # thread 24 said hi # finished join # joining on thread 25 # thread 25 said hi # finished join # joining on thread 26 # thread 26 said hi # finished join # joining on thread 27 # thread 27 said hi # finished join # joining on thread 28 # thread 28 said hi # finished join # joining on thread 29 # thread 29 said hi # finished join # joining on thread 30 # thread 30 said hi # finished join # joining on thread 31 # thread 31 said hi # finished join # joining on thread 32 # thread 32 said hi # finished join # joining on thread 33 # thread 33 said hi # finished join # joining on thread 34 # thread 34 said hi # finished join # Finished. # (4 pts) type followed by "x" to quit xv6 # if xv6 freezes or crashes, no credit here (B) mutextest2 : +38 points # type the following into a terminal: make qemu-nox # if you don't get the xv6 prompt (which is "$ "), skip the rest of the rest and give 0 pt # type the following at the xv6 prompt: $ mutextest2 # (17 pts) should see the following printout (indentation added for clarity): # # ~~~~~~~~~~~~~~~~~~ mutex test 2 ~~~~~~~~~~~~~~~~~~ # test passed # repeat the previous command $ mutextest2 # (17 pts) should see the following printout (indentation added for clarity): # # ~~~~~~~~~~~~~~~~~~ mutex test 2 ~~~~~~~~~~~~~~~~~~ # test passed # (4 pts) type followed by "x" to quit xv6 # if xv6 freezes or crashes, no credit here (C) run both tests : +28 points # type the following into a terminal: make qemu-nox # if you don't get the xv6 prompt (which is "$ "), skip the rest of the rest and give 0 pt # type the following at the xv6 prompt: $ mutextest1 # no need to check printout, just make sure it finishes # if this test cannot finish, give 0 pt for this section # # type the following when the above test finished: $ mutextest2 # (12 pts) should see the following printout (indentation added for clarity): # # ~~~~~~~~~~~~~~~~~~ mutex test 2 ~~~~~~~~~~~~~~~~~~ # test passed # type the following when the above test finished: $ mutextest1 # no need to check printout, just make sure it finishes # if this test cannot finish, give 0 pt for the rest of this section # # type the following when the above test finished: $ mutextest2 # (12 pts) should see the following printout (indentation added for clarity): # # ~~~~~~~~~~~~~~~~~~ mutex test 2 ~~~~~~~~~~~~~~~~~~ # test passed # (4 pts) type followed by "x" to quit xv6 # if xv6 freezes or crashes, no credit here +---------------------------------------+ | Minus points (Additional Deductions): | +---------------------------------------+ Submission file in wrong format : -2 points # submission file must be in the .tar.gz format Submitted generated binary file : -2 points for each binary file in the submission that can be generated Cannot compile : -5 to -10 points, depending on effort to make it work (please note that the grader is not permitted to change your source code) # if cannot generate executable, at least 5 points will be taken # off, up to 10 points off if it takes a lot to make it work "make clean" : -2 points if cannot delete all binary files created during compilation (.o files, .gch files, executable files, etc.) Segmentation faults : -5 to -10 points # if you see a seg fault (or bus error) any time during your # testing of the code, deduct 5 points # any additional seg fault, deduct 1 pt each Program never terminates : -5 to -10 points # if you have seen that the student's program won't terminates any # time during your testing of the code, deduct 5 points, # any additional occurrance, deduct 1 pt each Too slow : -5 points for running way too slow # if correct results are produced but just run too slowly, take # points off according the slowest run of the program # if it takes 15 seconds or more to run any of the command in the plus points section, take 1 point off # if it takes 30 seconds or more to run any of the command in the plus points section, take 2 points off # if it takes 45 seconds or more to run any of the command in the plus points section, take 3 points off # if it takes 60 seconds or more to run any of the command in the plus points section, take 4 points off # if it takes 75 seconds or more to run any of the command in the plus points section, take 5 points off