Review class information sheet
This class is going to be different in some ways from your other CS classes. How you write code is going to be as important as getting it to work.
This course puts together things from many other courses: languages, architecture, hardware, data structures, algorithms.
"Operating system" is a hard term to define. What you consider an operating system depends on your needs and your view of the system.
A scheduler/allocator:
A virtual machine:
This machine could be the same as the underlying machine. Allows many users to believe they have an entire piece of hardware to themselves.
This could implement a different, perhaps more powerful, machine. Or just a different machine entirely. It may be useful to be able to completely simulate another machine with your current hardware. Example of upgrading to a new piece of hardware. This can get out of hand. E.g., 1401 -> 360 -> 370 -> 3081.
A multiplexor:
According to these three views, if:
As a servant and provider of services:
providing commonly used subroutines;
providing access to hardware facilities;
providing higher-level "abstract" facilities;
providing an environment which is easy, pleasant, and productive to use.
This view as a provider of services fits well with our modern network view of computing, where most resources are services.
What are the desirable qualities of an operating system? We can discuss them in terms of: Usability, Facilities, Cost, and Adaptability.
Why study operating systems? Two perspectives:
A system to compile and run Java programs
Your average introductory Computer Sciences student.
A system with many facilities - compilers, databases, file systems, system calls.
This is the system programmers view of an operating system. At this level you understand not only what is provided, but how it is provided.
Or, why are studying this stuff?
Why are operating systems important?
They may only use up a small percentage of the CPU time, but consider how many machines use the same program, all the time.
They perform more functions for more users than any other program.
When "the (operating) system" is down, the computer is down. Reliability and recovery from errors becomes critical.
More hours of user time is spent dealing with the operating system. Visible changes in the operating system cause many changes to the users.
Why are operating systems difficult to create, use, and maintain?
Current systems have many millions lines of code. Involve 10-100 person years to build.
The code is written and rewritten. Original intent is forgotten (UNIX was designed to be cute, little system - now 2 volumes this thick). Bug curve should be decreasing; but actually periodic - draw.
Deal with ugly I/O devices, multiplexing-juggling act, handle errors (hard!).
Handles interrupts, and must change what it is doing thousands of times a second - and still get work done.
Run Skype, Java, Fortran, Lisp, FIFA Soccer, Databases, Web Servers, etc. Everybody wants their stuff to run well.
Operating systems are an unsolved problem.
Crash too often, too slow, awkward to use, etc.
New devices, processors, applications.
(No, UNIX/Linux is not it. Nor are Windows or MacOS. Maybe Plan 9?) Unlike fields like electronics where there are such models (zero distortion, flat response), any real system has (a large number of) flaws.