Grading Guideline for PA1 ========================= 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 "pa1-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. +--------------+ | Plus points: | +--------------+ (A) test_project1 : +10 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: $ test_project1 # (6 pts) should see the following printout (indentation added for clarity): # # pid: 7 [test_project1] syscall(1=fork) # pid: 7 [test_project1] syscall(1=fork) # pid: 7 [test_project1] syscall(3=wait) # pid: 7 [test_project1] syscall(3=wait) # pid: 7 [test_project1] syscall(11=getpid) # pid: 7 [test_project1] syscall(22=trace) # total syscalls so far: 10 # total syscalls so far: 40 # (4 pts) type followed by "x" to quit xv6 # if xv6 freezes or crashes, no credit here (B) grade_pa1 : +70 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: grade_pa1 0 5 grade_pa1 1 6 grade_pa1 3 7 grade_pa1 6 8 grade_pa1 10 9 grade_pa1 15 10 # (60 pts) each of the above test is worth 10 pts # the last line of the printout should match the following (ignore all the lines above) # # 0 bytes skipped, 5 bytes read, data read: "xv6 i", syscalls count = 13 # 1 bytes skipped, 6 bytes read, data read: "v6 is ", syscalls count = 15 # 3 bytes skipped, 7 bytes read, data read: " is a r", syscalls count = 18 # 6 bytes skipped, 8 bytes read, data read: " a re-im", syscalls count = 22 # 10 bytes skipped, 9 bytes read, data read: "e-impleme", syscalls count = 27 # 15 bytes skipped, 10 bytes read, data read: "lementatio", syscalls count = 33 # (10 pts) type followed by "x" to quit xv6 # if xv6 freezes or crashes, no credit here (C) date : +20 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: date # (8 pts) the printout should look like the following (H is hour, M is minute, S is second, M is month, and D is day # the time displayed should be approximately 7 hours plus the current time (no need to be too accurate): # # Current date: H:M:S, M/D/2025 # # wait at least 10 seconds and repeat: date # (8 pts) the printout should look like the above, the time displayed should be 7 hours plus the current time: # (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 (please understand that the grader is not allowed to # modify your source code) "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 10 seconds or more to run any of the command in the plus points section, take 1 point off # if it takes 20 seconds or more to run any of the command in the plus points section, take 2 points off # if it takes 30 seconds or more to run any of the command in the plus points section, take 3 points off # if it takes 40 seconds or more to run any of the command in the plus points section, take 4 points off # if it takes 50 seconds or more to run any of the command in the plus points section, take 5 points off