CMSC 412 Midterm #1 (Spring 2003)

1.)                 (20 points) Define and explain the following terms:

a)                   Critical Section

b)                   Safe Sequence

c)                   Deadlock

d)                   Dispatcher

2.)                 (25 points) Synchronization: You need to synchronize the process of getting and making coffee in the CS department lounge.  In the department, there are two types of coffee urns (regular and decaf) and one coffee maker.  If someone goes to get a cup of coffee of one type, and that pot is empty they make a new pot of that type of coffee. Provide a solution using semaphores (include variable declarations and initial semaphore values) to the coffee problem that ensures:

·         Only one person at a time is taking coffee out of the decaf urn

·         Only one person at a time is taking coffee out of the regular urn

·         Only one urn is on the coffee maker at a time

·         If one type of urn is being made and the other has coffee, people can get the type of coffee that is available.

Declarations:

Coffee Drinker(Boolean usesDecaf):

3.)                 (20 Points) Sally Smart decides to test project #1 in the following way: she implements the loading of the user program from the elf file, but does not implement the user segments and instead plans to test running a user program within the kernel segment.  Her argument is that since she is testing, it doesn’t matter that memory security is not provided for the user process. Assuming she is correct about the memory security issue, would her solution work?  Explain your answer.

4.)                  (15 points) In an OS kernel, give two reasons why are system calls done indirectly via a system call number and trap rather than simply calling a subroutine in the kernel?

5.)                  (20 points) OS Structure

a)                   (10 points) Give an example of a mechanism and an example of a policy in an OS

b)                   (10 points) Why did your kernel need to check both the base and extent of the string passed to the printString system call even if your version of libuser.c already checked the pointer?