Project 1 Grading Criteria
Backgrounding - (25/100 points)
- Detaching a backgrounded process from its parent (and not detaching a foregrounded one) is worth 5 points.
- If Get_Key returns -1 for the background process, that is 5 points.
- All children of a bg process cannot receive input - 5 points.
- Children can be spawned as background or foreground processes (by a parent bg process) and their fields are set correctly: a fg child should be attached but not receive input. A bg child should be detached in addition to not being able to get input - 5 points.
- Shell supports '&' for backgrounding processes - 5 points.
- This shell newshell.c will
attempt to spawn everything in the background. Add it to
your tree and run it. It should print the following
statement if basic backgrounding works: "Parent cannot wait
on bg child. OK". (Note: You do not need to have
support for '&' built in before using this; Just run
newshell.exe normally and you would get another prompt;
execute 'b.exe' (again, normally) and this `newshell' will
attempt to spawn it in the background.)
- For testing the Get_Key requirement, spawn shell.exe in
the background and it should fail to process input and exit.
Killing - (50/100 points)
- Sys_Kill implementation; reads the pid value properly, find the thread to be killed, proper removal from the system such that it doesnt get listed in the process list - 10 points.
- Attempt to kill a kernel thread should fail - 5 points.
- Properly killing a runnable process - 5 points.
- Properly killing a process waiting on some (any) queue in the system - 10 points.
- Killing a process that has children. Children should get orphaned - 5 points.
- Correct handling of requests to kill:
- zombie processes (can be killed) - 5 points.
- non existant PIDs (can not be killed) - 5 points.
- kill.exe runs as required: calls the Kill system call and kills the pid requested - 5 points.
- Test this part along with the implementation of the next part. Spawn a process and then attempt to kill it. It shouldnt get listed in the process listing.
- Attempt killing a kernel thread, which should fail.
- A backgrounded null.exe should be used to test killing of runnable processes.
- The following: createc.c creates a child process and waits for it. Background this and test killing of parent.
Process information - (25/100 points)
- Sys_PS implementation; syscall returns with correct values - 5 points.
- valid return status: for an array size smaller than the number of process in the system the return value is 0, otherwise the number of Process_Info entries that have been filled in. - 3 points.
- process names are correct - 3 points.
- process status is correct:
- runnable - 3 points.
- blocking/sleeping - 3 points.
- zombie - 3 points.
- ps.exe prints out the process information properly - 5 points.
- Print out the system threads using your ps.exe. Kill a few using the previous part of the project and test it again.