---------------------
Argument passing
- -3 args-argc: argc is not set correctly
+ -4 args-argc: argc is not set correctly
+ -4 args-single: passing single argument fails
-3 args-argv0: executable name not passed as argv[0]
-3 args-argvn: argv[argc] is not a null pointer
- -3 args-single: passing single argument fails
-3 args-multiple: passing multiple arguments fails
-3 args-dbl-space: using multiple spaces between arguments fails
-Score: /18
+Score: /20
System calls
+ -4 sc-boundary: syscall with args across page boundary must work
-3 sc-bad-sp: system call with a bad stack pointer must not crash OS
-3 sc-bad-arg: syscall with argument off top of stack must not crash OS
- -3 sc-boundary: syscall with args across page boundary must work
-Score: /9
+Score: /10
System calls: halt, exec
-1 halt: halt system call fails
- -2 exit: exit system call malfunctions
-Score: /3
+ -1 exit: exit system call malfunctions
+Score: /2
System calls: create
-2 create-normal: create a file in the most normal way
-2 open-boundary: pass name of file crossing page boundary
-1 open-empty: pass empty string to open system call
-1 open-null: pass null pointer to open system call
+ -1 open-bad-ptr: pass invalid pointer to open system call
-1 open-twice: open the same file twice
-Score: /9
+Score: /10
System calls: close
-2 close-normal: close an open file in the most normal way
Score: /9
System calls: exec
- -2 exec-once: call exec/join once
- -2 exec-multiple: call exec/join multiple times
+ -2 exec-once: call exec/wait once
+ -2 exec-arg: check command-line passing on exec
+ -2 exec-multiple: call exec/wait multiple times
-2 exec-missing: exec of nonexistent file must return -1
-1 exec-bad-ptr: pass invalid pointer to exec system call
-Score: /7
+Score: /9
+
+System calls: wait
+ -2 wait-once: A creates B, A waits for B
+ -2 wait-twice: A creates B, A waits for B, A waits for B again
+ -2 wait-quick: A creates B, A waits for B, with different details
+ -2 wait-multiple: A creates B and C, A waits for B, A waits for C
+ -2 wait-nested: A creates B, B creates C, ..., B waits for C, A waits for B
+ -2 wait-dummy: A creates B, A waits for B, A waits for B
+ -2 wait-invalid: Waiting for an invalid pid must return immediately
+ -2 wait-other: Waiting for a child of another process must return immediately
+ -2 wait-no: A creates B and never waits for it (must not crash or hang)
+Score: /14
-System calls: join
- -2 join-simple: join must return proper value
- -2 join-twice: join a subprocess two times
- -2 join-killed: join must return -1 if subprocess killed by kernel
- -1 join-bad-pid: join must return if passed bad pid
Score: /7
Multiprogramming
- -2 multi-recurse: test recursively executing subprocesses
- -2 multi-oom: exhausting user memory must not crash OS
- -2 multi-fragment: programs must load even if user memory is fragmented
- -2 multi-parent-fd: child must not be able to close parent's fds
-Score: /8
+ -3 multi-recurse: test recursively executing subprocesses
+ -3 multi-oom: exhausting user memory must not crash OS
+ -3 multi-child-fd: child must not be able to close parent's fds
+Score: /9