suomeksi Homework

Computer Organization I, Fall 2001, HW 5

To be presented in week 48 (27-30.11.2001)
  1. Subroutines, macros, literals, variables, constants
    1. Give an example of a situation where routine XYZ would be better to implement as a macro than as a subroutine. Why? Example?
    2. Give an example of a situation where routine XYZ would be better to implement as a subroutine than as a macro. Why? Example?
    3. Give an example of a situation where constant value X would be better to implement as a literal than as a constant in the instruction. Why? Example?
    4. Give an example of a situation where constant value X would be better to implement as a constant in the instruction than a literal. Why? Example?
    5. How does using a literal differ from using a variable? Advantages? Disadvantages?
    6. How does using a literal differ from using constant field? Advantages? Disadvantages?

  2. Binding a name given in a program to its final value can occur at least during the following phases: when program is written, during compilation, during linking, during loading, during base register loading, or during instruction execution time. When does the binding occur for the following examples? Give reasoning.
    1. add  R1, ParX(FP)               % R1?   ParX?    FP?     ADD?  
    2. XX   dc  456789                  % XX?
    3. call   SP, IO.Print                 % Print?
    4. DD   equ  65                        % DD?
    5. locX = 3456789;                  /* locX?  3456789?      locX is local variable in a C program  */

    In each case, give reasoning why the binding can not occur sooner or later.

  3. Assume that a disk spins with speed 7200 rpm, it has one read/write head per surface, there are 2000 cylinders (tracks per surface), each track has 50 sectors, and sector size is 0.5 KB. Assume (unrealistically), that seek time (head transfer time) is linear to the number of tracks passed, and that it is 0.02 ms/track. Assume (unrealistically), that the location of each sector for one file is random, and from this one can deduce (with probability theory) that the average number of tracks passed is 667. Assume further (unrealistically), that the file is read from the disk one sector at a time.How long does it take, in average, to read one 333.33 KB file? What about 24 MB file?

  4. Linking. How would the Fig 7-15 (b) in Tanenbaum book [Tane99] change, if the modules were linked (from bottom up) in order ACDB instead of the order ABCD used in Fig. 7-15? 

    Please note that the addresses grow bottom-up in Fig. 7-15. Modules are defined in Fig 7-14.
  5. Memory mapped I/O. In example driver.k91 there is a device driver implemented with direct I/O. 
    1. How does the device driver know that the device has printed the given number?
    2. What does the device driver do while the device is printing the number? How long can this take?
    3. How does the device (device controller) tell the device driver that the given task is done? 
    4. Hoe does the application program (that call the device d river) know when the task given to the device is done?
    5. How should one modify the device driver, if one wanted to use indirect I/O instead? The purpose is not to give a precise answer, but just the general ideas on what needs to be changed in the driver in case indirect I/O was used.
      What is good/bad with this change? Are there any changes to the specifications for the device (device driver) because of this change?
Use standard method for building and taking apart activation records, when implementing subroutines and functions. Take care, that all work registers (R0-R5) have the same value at the time of subroutine or function return as they were when the subroutine or function call was made.

Be prepared to show all Koksi related and other programming homeworks using a PC at the practice session. Please bring both a listing and on a diskette all the programs you made for this practice session.


Teemu Kerola