1. Process Scheduling
    1. Round-Robin
    2. Lottery
  2. Process Switching (Context Switching)
    1. Switch out old
    2. Switch in new
    3. Execute instructions
    4. Store sufficient information into the kernel PCB for a process.
      1. Process ID
      2. Parent ID
      3. Start CPU Time
      4. Accumulated CPU time
      5. Memory Size (just text size)
      6. Priority
      7. Program Counter
      8. Etc.
  3. Coding Notes
  4. Process Management
    1. State Transitions
    2. Queues
    3. Status
      1. Ready
      2. Blocked
        1. Awaiting completion of started I/O
      3. Terminated
      4. Running
    4. Passage of Time (in units of timer interrupts)
    5. Pick Scheduling Algorithm
  5. Interaction with Simulated Hardware
    1. CPU
      1. Reduced Instruction Set
        1. System Calls
        2. Privileged Instructions
      2. Seven types of instructions.
        1. S: x:storextoVC
        2. P: Privileged instruction
        3. I: <dev-class> (B/C)
        4. E : terminate the current process
        5. C: <priority> <file-name>
        6. D: x:decrxfromVC
        7. A: x:addxtoVC
      3. Two Registers
        1. VC
        2. PC
    2. IO
      1. System Clock Timer
      2. Character Device
      3. Block Device
  6. Trace File of CPU Activity
    1. 1) The clock tick number every time a clock tick interrupt is received.
    2. 2) When instructions are executed, you should print the instruction and the originating process' ID.
    3. 3) When a {CHAR|BLOCK} device interrupt is received, print out which process has been unblocked (moved to the ready queue).
    4. 4) For Lottery scheduling, you also need to print the ticket allocations to various processes.
    5. 5) Whenever a new process is being scheduled you also need to print the lottery ticket number used for this decision.
  7. Memory
    1. Device table/Data-Structure
  8. Process Clean Up/Creation
    1. Create initial process with id=0 (main.trace).
    2. Simple VAS with text segment
    3. Associated kernel state (PCB)