Session 35: Overview

OS principles
  layering
  binding time
  indirection
  orthogonality
  caching
OS frontiers

OS principles

Throughout this class, we've seen several applications of some particular principles that apply throughout systems design. We haven't talked about the explicitly, but they've been there nonetheless. I want to take a moment to actually address these issues as they've arisen in this class, coupled with specific examples.

Layering

Large systems become complex. Remember that operating systems can be millions of lines or even tens of millions of lines long. They become impossible to conceive of in whole.

For the developers get a handle on the overall system, it must be structured somehow. One of the most useful structures for large operating systems is the concept of layering, since its job is to abstract the raw system from the overall system.

Layers also enable pieces to be more interchangeable, because the dependencies between modules becomes lessened. You know, looking at a particular module, that a module that's three layers away has almost nothing to do with it.

Examples:

Binding time

This is an issue of when you make a decision: Do you commit early on, probably gaining something in terms of both complexity and efficiency, or do you delay the decision until the last moment, gaining in flexibility?

Examples: