1. .Which functions would one normally find in a micro-kernel? (circle all that apply)
    1. Interprocess communications
    2. Memory management
    3. CPU scheduling and allocation
    4. File system
    5. None or all of the above
  2. Which of the following things are needed to make a multi-user operating system with protection between users? (circle all that apply)
    1. A memory management unit.
    2. Privileged as well as unprivileged instructions.
    3. A compiler that enforces protection between users.
    4. All or none of the above.
  3. Which of these are normally privileges instructions (circle all that apply)
    1. Turn off interrupts
    2. Clear memory
    3. Read the clock timer
    4. Change the memory map
  4. Consider a process with multiple threads. Put a 'P' next to those things that all threads in the process share. Put a 'T' next to those things that are not shared.
    1. Stack.
    2. Address space.
    3. Program counter.
    4. Open file descriptors.
    5. Set of registers.
  5. .One problem with the Least Recently Used page replacement algorithm is ... (choose ONE)
    1. Can be unfair to processes that need lots of CPU time.
    2. Is not the provably optimal strategy like the frequency based approaches.
    3. Has a common worst case.
    4. None of the above.
    5. All of the above except that choice containing the word "none".
  6. (Higher/Lower) Do we normally give a higher or lower priority to a process that leaves the run queue before using its whole time slice?
  7. (Share/Not share)A processes does a fork().  Do the child and parent use the same code segment, or different code segments?
  8. Give one advantage of compile time binding over load time binding. __________________________________________________________
    __________________________________________________________________________________________________________________
  9. (Small/Large)Suppose I had a time sharing system with many computationally expensive tasks, and few I/O bound or interactive tasks.  Should I use a small or a large time slice?
  10. When does a context switch normally occur?
    1. As processes complete I/O
    2. As memory is allocated, changing the virtual address space.
    3. As users log on and off the computer.
    4. All or none of the above
  11. Consider the memory map below.  A request is made for 102K of RAM.  Where does each placement strategy allocate these 102K?
    Worst Fit_________________  Best Fit ______________________ First Fit______________________

  12. 50K Allocated 197K Free 291K Allocated 104K Free 72K Allocated 300K Free
  13. In the realm of CPU scheduling, define starvation. ___________________________________________________
    _____________________________________________________________________________________________
  14. (Yes/No) Must you clear the TLB when switching processes (during a context switch).
  15. What fields are present in an inverted page table.  Give at least three fields.
    field1 ____________________ field 2_________________________ field 3_____________________
  16. (Virtual/Physical) Say a program generates a memory request for address 10232, somethng like this:  MOVE R1, (10232).  Is that 10232 a virtual address, or a physical address?
  17. Unix is an example of what approach to operating system design?
    1. Ad-hoc
    2. Micro-kernel
    3. Layered
    4. Object Oriented
  18. If I have two copies of the same program running, how many processes do I have? ____________________
  19. Consider the page replacement policy of a virtual memory system.  Which type of pages should the policy choose to be victimized (forced out of physical RAM)? ______________________________________________________________________________________________________
  20. Suppose I have a CPU that can access it's cache in 10ns, and takes 80ns to get to RAM.  The cache hit rate is 90%.  What is the effective access time? _______________________________
  21. Name at least two ways a process can leave the ready queue: _______________________________________________________
    ___________________________________________________________________________________________________________
  22. Consider the processes below.  When does P2 finish using round robin, assuming the current time is T=0?

  23. Process Burst Length Priority
    P1 15 3
    P2 5 1
    P3 3 2
  24. What type of scheduler is provably optimal at minimizing average wait time, and why is it not used more often (what it its big problem)? 
    ____________________________________________________________________________________________________________
    ____________________________________________________________________________________________________________
  25. Suppose I have a computer that is responding very slowly to commands.  The hard drive light is continuously on.  Which of these would significantly help my computer back on its feet?
    1. Get more cache
    2. Get larger hard drive and allocate more swap/paging area
    3. Page more data out to disk
    4. Swap more processes out to disk
    5. All or none of the above
  26. Why do we want computation for one process to temporally overlap I/O for another process? ___________________________________
    _________________________________________________________________________________________________________________
  27. Consider the following code.  How many page faults might it generate.  Assume that each page is 1024 bytes long, and that the 'a' array is not currently im RAM  Assume there is 100 KB of RAM available for caching the RAM array, and the average page fault takes 13ms to service.  Assume that the computer is a Gateway 2000 with a Pentium at 200Mhz.  Assume this is part of a complex ray tracing algorithm.  Assume the user is logged in as the super user 'root'. Assume the users birthday is November 23.  Show work.
    _________________________________________________________________________________________________________________
    _________________________________________________________________________________________________________________
    for(i = 0; i < 1024; i++)
         for(j = 0; j < 1024; j++)
                a[i][j] = 0;