Correct identification of parent & child, 1 mark. Explanation of pid value 2 marks. up to (7) for explanation of execvp call, v = array of pointers(1),so need to build the argument list before calling(1); p = will do path search(1) as per shell's $PATH (1), first arg is pointer to filename(1), second arg is is pointer to array of args(1), shouldn't ever (in principle) return to execute the perror. If it does then it will call exit(1). marks for blocking wait on specific child(pid)(1), get the exit status(1), no options,WIFEXITED macro to test if child exited normally, via exit() or _exit() or return from main()(2). WEXITSTATUS gets the return value that may have been set by child(1). Can only be evaluated if WIFEXITED true(1). i) detailed explanation of scheduling categories up to 4 marks, first two categories are for kernel and realtime processes. sched_rr ( time quantum -> run-q, priority in range 1..99, fixed for life, pre-emted -> run-q, blocked -> wait-q) , sched_fifo(as per rr but no time quantum :- runs till blocked or pre-empted), sched_other, user processes (has time quantum affected by niceness, base priority of 0); remaining marks from : selection of next process to run is based on goodness value. runnable process with highest goodness goes next. goodness calculated as 1000 + priority for rr & fifo. for user processes it is based on goodness = p->counter; if (p->processor == this_cpu) goodness += PROC_CHANGE_PENALTY; if (p->mm == this_mm || !p->mm) goodness += 1; goodness += 20 - p->nice; goto out; If counter(time quantum) is 0 for all processes then Cp->counter = (p->counter >> 1)+ NICE_TO_TICKS(p->nice); ie. time quantum is half of remaining time plus niceness so niceness affects runtime not priority. give mark for remembering that the scheduler favours I/O bound user processes over cpu intensive. marks from ... named pipes, sockets, devices treated as special files, directory entries, identified by psbcd as the leading character in an \fC ls -l\fP (3), use same calls to read/write/open/close as ordinary files. plus special calls dependent on device eg lseek. (2) Indication as to how the 32 bit address is split up into 10 bits for index into page directory + 10 bits for index into page table + 12 bits to identify byte within page. (4). There should also be discussion of the entries within the page table along the lines of ... high order 20 bits give page frame address (1) and low order bits are used for information about the page(1), present bit, read/write bit, privilege bit, accessed bit, dirty bit etc (4) Any reasonable discussion of interface between o/s and user eg interactive use, customization of unix session,programming (2). built-ins and execs (1). & = backgrounding, | piping (1), implied redirection of input and output(1).