- One Of the main design principles under UNIX is that everything is a _______.
- What are the four main things that an operating system provides?
- What does a kernel do?
- What separates a micro kernel from a monolithic kernel?
- What is multitasking?
- What sort of multitasking does UNIX provide?
- What are some of the main differences between C and C++?
- Why is C preferred for operating system development?
- Be able to write bitwise code to do the various masking and setting operations you have done in your programming work.
- What are pointers?
- What sort of address is stored in pointers (virtual or physical)?
- What is the difference between a virtual address and a physical address?
- Why are virtual addresses used?
- How do user processes communicate with the kernel?
- What is the sequence of events that occur during a system call?
- Be sure you know the major UNIX system calls.
- Be able to write a little bit of UNIX user-space code.
- What are pipes?
- Be able to write a little bit of pipe oriented code with a little bit of forking.
- What are the names of the general purpose registers in 32 bit x86?
- What are the special purpose registers in 32 bit x86?
- Be able to write a little bit of x86 assembly.
- How does an assembly routine return to a C routine?
- How does the kernel return from a system call?
- What is meant by context, and how are contexts switched?
- What is a UART, and why are they important?
- What are interrupts, and where are they used?
- Why is I/O typically implemented using interrupts?
- What are page tables, and how are they used in x86?
- We implemented a microkernel using a ports system. What does this mean, and what is the major disadvantage of this type of kernel?
As an alternative, you may also make an extensive study of the xv6 file system and create a daemon to run the file system. I was originally going to distribute my daemon's code, but then I realized that you would only have to generate about 20 lines of code not copied from xv6 to make it work. I decided this would be an insufficient test. So if you want to skip the exam, you will need to make an extensive study of the file system chapter and make your own daemon. it is not as bad as it sounds!
Some general hints:
Make a driver for reading and writing sectors to/form disk. Use buffers to facilitate commands and responses. You can take most of the driver from the xv6 source code. If you analyze xv6 enough, you'll see that making your own FS daemon can be accomplished by changing the disk read/write routines a bit.
You will have to have a fully functional scheduler in order for this to work.
Finally, to receive full credit for the exam, you will need to include the user space applications from xv6 and get the shell that you wrote to work on the system.