Homework 7

22C:116, Spring 1995

Due Friday Mar. 17, 1995, in class, or in Herbert Hoeger's box

Douglas W. Jones
  1. Background: Figure 9-13 on page 385 in Tannenbaum's Modern Operating Systems is incomplete because it doesn't contain a reference to Uniprocessor systems.

    The problem: Correct this deficiency by giving the contents of the column labeled "Uniprocessor operating system" that reflects your understanding of the limitations and potentials of uniprocessor systems

  2. Background: In the early 1970's, IBM introduced an operating system called VM/37O for the IBM System 370. This operating system supports one address space per process, and the operating system kernel interprets all of the privileged instructions a process can issue in such a way that, from the point of view of each process, the user machine is a complete virtual IBM System 370. Privileged I/O instructions are emulated in such a way that user code appears to have access to real I/O devices, and as a result, users may run any operating system on their virtual machine, even VM/370.

    Thus, while every operating system offers a virtual machine of some kind to each process, VM/370 is properly described as a recursive virtual machine, in the sense that, if issues of speed and memory size are discounted, each user-level virtual machine is identical to the underlying machine. User level virtual machines under VM/370 do not share memory or devices, but they may be interconnected by virtual communications channels.

    The problem, Part A: With reference to VM/370, note that this allows a uniprocessor to support a network of multiple virtual machines. Which of the options suggested in Figure 9-13 can be implemented on this network of virtual machines,

    The problem, Part B: With reference to VM/370, which of the options suggested in Figure 9-13 are theoretically sufficient to support a recursive virtual machine environment comparable to that supported by VM/370.

  3. Background: The Demos operating system for the uniprocessor Cray I computer used a microkernel that supported essentially the following primitives (there were higher level variations):
      CREATE -- create a new link to the caller's process
      DESTROY -- destroy a link you previously created
      SEND -- send a message to a specific link
      RECEIVE -- receives a message from a specific link
    
    Each link to a receiving process is essentially a FIFO queue of messages. Each process has a list of the links it may use for sending messages (essentially a capability list), and each message may include both links (which are placed in the recipient's capability list) and data. By convention, one of the links may be used as a return link for sending replies to messages.

    By convention, every process has a link to the process manager, which is itself a process. The reply to a message sent on this link is a new link that conveys the rights to manipulate a newly created process. Messages may be sent along this new link to start and stop the process, edit and inspect it's memory address space, and edit and inspect it's capability list. Initially, the new process is stopped, it has no links, and it has and an uninitialized memory address space.

    The problem: Outline the sequence of system calls a user program would use to start a new process running a particular bit of code (provided by your program) and with a particular set of links (also provided by your program). For each message sent or received, indicate the general nature of the contents and which link is used.