Project 2 Grading Criteria
Good faith
We've decided to grant partial credit to those students whose projects won't even run null.exe, but show a 'good faith' attempt at implementing the project. Since the margin for error in P2 was small, we considered it a bit unfair to have an 'all or nothing' policy for the first 50 points. Therefore, we'll take a look at your code while grading and even if your project crashes and won't run the minimum required (null.exe), you might still be able to get up to 30 points of credit, depending on how far you've got (e.g. setting up selectors and descriptors, arguments, stack, context switch). Note that partial credit might be subjective and not as clearly delineated as the grading criteria below.
Here's a rough guideline on how much individual components will weigh
| Computing memory image size | 2 |
| User Context : Setting up selectors and descriptors | 9 |
| User Context : Setting up remaining fields | 2 |
| Setting up the user thread | 7 |
| Command line arguments | 3 |
| Context switching | 2 |
| Miscellaneous | 5 |
|   |   |
| Total | 30 |
Load program/shell
When your GeekOS boots, it automatically starts shell.exe. If shell.exe loads and
the prompt shows up and nothing crashes, you have passed this test.
This is good for 35 additional points.
Alternate Load program test
If you can't get the shell.exe to work but you can load a program
and call SYS_NULL, that is worth 20 additional points. If this is the
case with your program, alter main.c so that null.exe is loaded
when GeekOS boots (see the #define INIT_PROGRAM in main.c),
and add a print statement to the Null syscall
handler. Printing "Have mercy upon my soul!" might be appropriate.
If this prints at startup and nothing crashes, you will receive
50 points and no other tests will be performed.
Get_Key()
If keys can be pressed at the shell.exe prompt and they show up properly,
this will earn you an additional 5 points.
Spawn_Program() and command line arguments
This will test the Spawn() system call and proper command line arguments recovery.
We'll use /c/b.exe, which is a simple program that prints its command line arguments.
For example, if at the prompt, the grader will type:
$ /c/b.exe innie minnie miny moe
The output should be :
I am the b program
Arg 0 is /c/b.exe
Arg 1 is innie
Arg 2 is minnie
Arg 3 is miny
Arg 4 is moe
This output will earn you an additional 10 points.
Obviously, we'll use some other command line parameters than 'innie minnie miny moe'
(e.g. 'Catch tiger by its toe', or 'My name is John Doe'), so
if you have trouble with the arguments don't bother hardcoding a
Print('innie minnie miny moe')
for that won't do you any good.
Exit()
After b.exe finishes, control should return to shell.exe. If this
happens without a crash, this will earn you an additional 5 points.
Wait()
At the prompt, the grader will type:
/c/long.exe
The output should be:
Start Long
End Long
$
The prompt should not appear until long.exe has exited. If your
output is something like:
Start Long
$End Long
This indicates a problem in your Wait() syscall.
Passing this test will earn you an additional 5 points.
Security
There will be two security tests that will test if you are
properly checking data passed through syscalls. These programs
will not be made available to you until after grading is
finished. These tests are worth 5 points each.
Just to give you an idea, in those tests we'll try to pass illegal pointers
to system calls. The system calls should fail returning -1; the kernel and the
shell should continue running.
Web Accessibility