In order to be prepared for this course; that is, take it for credit, you need to have the following two prerequisites: 1. C programming experience ... 2. an intro to operating system's class such as CS 533, or CS 303 (now 333) for undergraduates). You should be able to answer most of the following questions, if you cannot, please drop this class, get prepared and take it again. Now that this class is also offered winter quarter. 1. what does the following code do? main(int argc, char **argv) { int i; printf("argc %d argv[0]\n", argc, argv[0]); for ( i = 0; i < argc; i++) { printf("argv[%d]: %s\n", argv[i]); } } 2. what is a software interrupt? 3. what are the states of a process in an operating system at run time? 4. what is meant by "spawning", forking, creating a thread? 5. what is a hardware interrupt? 6. if process A creates process B, and process B exits, in the UNIX operating system, what must process A then do? 7. give at least one mechanism by which two processes on ANY operating system (the same operating system) can share data? 8. what is the function of a Makefile? 9. in a C program explain how the following are implemented in terms of a runtime data storage model? 9.1 /* global int */ int g; 9.2 foo() { int z; } 9.3 foo() { char *z; z = malloc(100); } 9.4 9.3 has a runtime memory problem. what is it? 10. how many problems can you identify in the code below? main() { int rc; int fd; char buf[1024]; rc = read(fd, buf, 1025); } 11. what is the difference between a C structure and a C union. Explain the following union: struct in_addr { union { unsigned long l; char bytes[4]; } u; };