Operating System Structure
1. Multiprogramming needed for efficiency (Single user cannot keep CPU and I/O devices busy at all times, Multiprogramming organizes jobs so CPU always has one to execute, A subset of total jobs in system is kept in memory, One job selected and run via job scheduling, When it has to wait, OS switches to another job)
2. Timesharing (multitasking) is logical extension in which CPU switches jobs so frequently that users can interact with each job while it is running, creating interactive computing (Response time should be < 1 second)
3. Each user has at least one program executing in memory - process, If several jobs ready to run at the same time - CPU scheduling, If processes don't fit in memory, swapping moves them in and out to run