I tried my best to list the topics for the exam but I may have forgotten one or two. Your default assumption should be that if I covered it in class before March 19, it is fair game for the exam. If you have a specific question about whether a topic could be part of the exam, please come to ask me.
You should be able to define or explain the following terms:
- process
- system call
- context switching
- virtual memory and associated concepts
You should be familiar with all aspects of basic + programs,
such as those you created for the two programming assignments. This includes:
- how to compile and execute C programs
- basic data types
- pointers, address-of, dereference, NULL
- preprocessor directives (#define, #include, etc)
- arrays (statically and dynamically allocated), malloc and free
- strings in C, how they differ from C++, why they are so much more trouble
- using printf and scanf, what is their return value, and how to use their cousins: fprintf, fscanf, sprintf and sscanf
- void and void*, what they are and when they are used.
- struct, including their declaration how to use variables of that type
- dealing with command line arguments
You should be familiar with the following:
- OS, text segment, data segment, heap and stack
- how context switching happens (big picture), how the next process can be picked
- possible states of a process (ready, running, blocked), what they mean and how they happen
- fork, wait, execvp and how they are used
- zombies and reaping
- signals and signal handlers
- why we use virtual memory
- "classic" virtual memory (unequal size segments, best fit, worst fit, memory fragmentation)
- paging, page, frame, page table, translating from virtual address to physical address