CS 452/652 Kernel Project

(Part III - Full Kernel)


  • Add the following primitives to your kernel. Be sure to follow the kernel specification when doing so.

    1. AwaitEvent
    2. Delay
    3. Get
    4. Put

    Delay, RegisterAs, and WhoIs must be implemented outside the kernel using server processes.

    Your implementation of Get and Put should make use of a serial server and associated processes.

    Submit the following:
    1. Location of source code for the kernel, OS components and test programs;

    2. Complete documentation for your kernel; you may reuse as much of your previously submitted documentation as you can, linking it together and expanding on it as appropriate; include an appendix explaining in point form any changes that have been made to code submitted in earlier assignments;

    3. Write the following test program to test the primitives described above. This test program should display the numbers 1,...,100 on the graphics display. It should then start one ``ender'' process and 9 ``eater'' processes. Each of the eater processes should be assigned a unique integer, i, where i = 2,...,10 and should erase all multiples of i from the screen, in ascending order, waiting i seconds between each erasure. When each of the nine eater processes are done, they should determine, using the name server,the pid of the ender process, and send it the number they were assigned. The ender, upon receiving messages from all nine processes, should print the order in which the messages arrived.

    4. Why do the 9 eater processes finish in the order that they do? Be sure to answer this question in your assignment write up.

    5. As part of your test suite for your clock and serial servers, provide an implementation of Assignment 1 (the polling loops assignment) that uses your kernel instead of polling.

    6. A full test suite for your kernel; make sure you document your test suite, and describe the expected results;

    7. Timings for various kernel operations, as follows:
      1. Your fastest Send/Receive/Reply time using a 16 byte message.
      2. Your fastest Send/Receive/Reply time using a zero length message.
      3. The time required for an average Create request.
      4. An upper bound on the amount of time that interrupts could be continuously disabled.
      Explain in detail how these times were obtained.