Bigger and faster systems allow multiple task in memory at same time.
  Monitor responsible for
    Giving each task a share of time (most often while the other tasks 
      were waiting for I/O to complete).

    Providing I/O for each task
      Application calls a system routine to draw character on screen
      Rather than directly talking to video card.

    Guarding each task from the other tasks. 

    At this point, the monitor basically became the OS.

  Early jobs were "batch" meaning all info about task was defined before 
    hand and left to the OS to complete.  

    OS runs each task to completion unless waiting for I/O. 
  
    OS switches to another task while waiting.
  
    No interaction with user.


  Problems
    Users want to interact with task as it is running.

    Some tasks tend to consume most of the resources.
 
  Solution
    To solve both problems, 
      OS must distribute the processing of each task more evenly.

    Known as time sharing (and priority).

  OS allows each task a small portion of time (time slice)
    To compute and access system resources including I/O.

    As each task's turn ends, 
      The OS preserves snapshot of resources or environment of current task. 

    OS recalls snapshot of another task to be re-activated and runs it.

    This swapping is called context switching.

  Context switching takes time and additional resources to implement.  
    Time slices should be small enough to cause task to appear as if running 
      concurrently and continuously.

    If time slice too big,
      Interactive programs difficult to work with.
 
    If time slice too small, 
      then the overhead of the context switching becomes burdensome.

Next