Written by: Phi Dang
CS32 (teaches C++ programming language)
CS33 (teaches machine Level programming)
CS35L (teaches software construction and Linux)
CS131 (you will understand more deeply how professor's code in C actually works)
CS151B (teaches computer system architecture)
CS118 (teaches networking, an important aspect of operating systems)
Lectures : 3.7 hours (4 hours on Registrar)
Labs : 1.7 hours (2 hours on Registrar)
Outside : 20 hours! (9 hours on Registrar)
Principles of Computer System Design (2009) - Saltzer and Kaashoet
Duration: 100 minutes
Open books and Open notes, but no computers and electronics
Duration: 180 minutes
Open books and Open notes, but no computers and electronics
Each lab: 1/12 grade (~8%)
Each lab can be done in teams of 1 or 2
Topics:
Lab 1: Write a Shell
Lab 2: Kernel Hacking
Lab 3: File System
Lab 4: Distributed Applications
Each minilab: 1/15 grade (~6.5%)
This can be done in teams of up to 4
Topic similar to research topic
Important: Cite other's work legibly and include URL and DOI (Unique ID for every published scientific paper)
Late N days : Penalty is 2^(N-1) %
Example:
1 day: 1%
2 day: 2%
3 day: 4%
4 day: 8%
However, all assignments and homeworks must be submitted by the last Friday (End of Instruction), or they will count as zero.
1. Organized whole, gov, constitution
2. A set of principles. etc: a scheme, a method.
Oxford English Dictionary (OED) - (1928)
This definition, though given decades before computers were invented, seems to capture the general idea of a computer system.
1. An organized or connected group of objects.
2. Musical interval, group of connected verses.
Greek
The Greeks' definition was even closer, because a government, which is a complicated system, can be used as an analogy for a computer system.
Software designed to control the hardware of a specific data processing system in order to allow users and application programs to make use of it.
American Heritage, 4th edition
This definition is terrible and mostly incorrect. First, it contains a redundant phrase: "users and application programs to make use of it", because it does not add any useful information. Second, it accurately states that the operating system can only control a specific system, and most probably fail on all others.
Master control program in a computer
Encarta 2007
This definition is too generic, and does not provide any useful information.
A collection of software that manages computer hardware resources and provides common services for computer programs.
Wikipedia 574029146 (2013-09-22)
This definition seems to capture the meaning of an operating system as it stresses on managing resources, which is an important task for an operating system.
A system is a set of interconnected components that has a specified behavior observed at the interface with its environment.
Principles of computer system design (2009) - Saltzer and Kaashoet
System design is about organizing components into parts so we can savely ignore details of other parts of the system. But currently, we are building systems that are way more complicated than they should be.
Not everything scales at the same rate
Diseconomies of scale
For example: Star network (fully connected graph). Each newly added node requires an increasing number of edges to connect to the remaining stars.
Economies of scale
This leads to cheaper cost of production for higher quantity. For example: Pin factory. Instead of each person making his/her own pin when he/she needs one, a pin factory can be built to mass-produce pins at a much faster rate, e.g., throuh the use of assembly lines.
You dont know that the problem exists until its too late. For example: Tacoma Narrows bridge. It scaled everything: longer and larger than its competitors' bridge. Hence, a new unexpected problem arose: the resonant frequency of winds.
Small internal details can leak out and cause great effects. For example, a hummingbird in California claps its wing can cause hurricane in Taiwan.
A computer system can be considered as a chaotic system, a system in which a small cause somewhere causes huge effects somewhere else.
A real-life example would be Microsoft's solution to Japanese characters. Because Japanese has more than 1000 characters, which need to be expressed as bytes. Hence, Microsoft invented a solution called 'Shift-JIS', an algorithm that allows encoding Japanese characters into multibyte characters. This is how it works:
1st byte: indicates its Shift-JIS
The rest: the character encoding
However, this generates a problem for the scenario below:
$ echo hello > 'japanese-character'.c
$ No such file or directory (because it mistakenly inteprets the file name as '/', which is a folder)
Microsoft decided to resolve this issue by allowing the propagation to exist, and simply fixing this special case. The UNIX's team, however, decided to abandon Shift-JIS and worked on a new algorithm. UNIX's solution, though more costly, is a better way to handle the problem because it is more scalable.
All these problems stem from one single issue: "Complexity". But where does complexity come from? The main source of complexity is that we are constantly building new systems from previous work. For example, the first computer, the UNIVAC I, contained lots and lots of errors. Hence, the UNIVAC II was designed using the UNIVAC I, except with tons of error corrections.