1. You are implementing processes for a severely memory limited machine where the process control blocks need to be as small as possible. What is the bare minimum information that needs to be in a PCB ?

2. What are the advantages of having multiple register sets within a processor ? What are the advantages of having a multiprocessor over a uniprocessor ? What are the advantages of a multiprocessing operating system ? Indicate which of these advantages are also valid on uniprocessor systems.

3. What two advantages do threads have over multiple processes? What major disadvantage do they have? Suggest one application that would benefit from the use of threads, and one that would not.

4. Describe the actions taken by a kernel to switch between processes.

5. Describe the actions taken by a kernel to switch between threads belonging to the same application.

6. Describe the actions taken by a user-level threads package to switch between threads.

7. What can be done on both the hardware and software level to minimize the overhead associated with a context switch?

8. Compare and contrast the resources used during process creation versus thread creation.

9. What are thread pools ? What are the benefits they provide ?

10. What are the disadvantages associated with asynchronous thread cancellation ?

11. Name an application that would not benefit from multithreading?

12. Describe situations where user-level threads are better then kernel-level threads and vice versa.

13. How long does a procedure call, library call and system call take on your favorite machine and operating system combination ?

On your favorite computer(s) and operating system(s), measure the following latencies. Since many of these latencies are below the resolution of a typical clock, you will want to read the system clock, perform the operation in question many (100s to 100000s of times), read the clock again, subtract and divide.

You can use gettimeofday() in Unix or GetSystemTime() in Windows to acquire a timestamp. This file provides a skeleton for performing these measurements on Windows. Turn in your code and the results of your measurements. Note the platform and OS on which you performed your timings (e.g. Pentium 4@2 GHz+Windows, or Pentium 4@2 GHz+Linux2.4.2).