Introduction

Do we need an OS?
- not if you're a microwave oven, but...
- convenience: ease the use of machine by handling low-level tasks
- efficiency: maximize throughput by efficient usage of machine resources
- evolvability: allow dev of new features while maintaining compatibility
- use OS techniques even if you're building controller for microwave oven

Why should we learn OS?
- amount IBM has spent on dev of MVS vs. budget of Apollo space program: 1.7
- (MVS contains > 1.5 million lines of code)
- % of computer-related jobs requiring significant OS experience 38.9%
  of which UNIX experience constitutes ~65%
- average salaries with 3 yrs experience: 
	- system management 	> $60K US
	- system design		> $70K US
	- snr consultant	> $75K US
- Microsoft budget to promote W95 > op costs of Xerox PARC since inception

Evolution of Computing from the OS perspective:
- early computers -- ENIAC to mid 50's: 
	- program by switches - no system software
	- devices were very simple - didn't need resource abstraction
	- no concurrency (simultaneous multiple processes)
	- application program responsible for all I/O
- simple batch systems -- mid 50's - 60's: 
	- human OS
	- key-punched card stacks put into "job queue"
	- step forward: allowed multiple users to share machine
	- step back: no more real-time interaction/interactive debugging
- multiprogrammed batch systems -- 60's: 
	- took advantage of different time scales at which CPU and peripherals 
          work to improve CPU usage
	- introduced multiprogramming: time-MUX processor, space-MUX memory
	- objective: maximize job throughput
	- short-term scheduling or "swapping" of jobs
- timesharing systems -- mid 60's - 70's: 
	- users work on central machine at interactive consoles
	- computer provides virtual machine (VM) to each user
	- timesharing allows users excl. control of (comparitively slower) VM
	- objective: provide equitable amounts of processor/memory to each VM
- minicomputers, microcomputers (early PCs) -- late 70's - early 80's:
	- out of the special-purpose room into the office
	- bare bones system software in ROM for device interface
	- one user, one program -- huge step back
	- but changed the way we view computers 
          (from corporate resource to personal tool)
- mature PC's and workstations -- mid 80's - 90's:
	- evolution to multi-user, multi-process, networked environment

What does an OS do?
- manages hardware resources of computer
	- time multiplexes the processor (process management)
	- space multiplexes memory (memory management)
	- [time multiplexes memory (virtual memory systems)]
	- implements file system (file management)
	- I/O system (device management)

- process management
	- create, destroy, block, run a process
	- allocate/deallocate resources to processes as needed
	- allows multiple users (processes) to share machine

- memory management
	- finite amount of memory must be shared between different programs
	  executing concurrently
	- must protect each running program from having its memory 
	  area corrupted by others
	- programs often need more memory than is available -- how to provide?
	- use virtual memory by integrating secondary storage devices

- file management
	- abstracts operations on low-level storage devices (disks, tapes, etc.)
	- need to do so was instrumental in development of OSs
	- defines organization of file system hierarchy

- device management
	- allocate, isolate/share devices (disks, modems, printers, etc.)
	- hides low-level details of control
	- provides generic interface through device drivers

Where the OS sits:
	end user
	applications			> application programmer/designer
	system utilities	>	>
	OS			> system programmer or designer works here
	hardware

Important OSs:
- UNIX
- Mach
- DOS
- MacOS