Email me: Add your registered student name and ID number, and what you prefer to be called (login name or nickname). Then answer the following questions:
This year, in a departure from previous years, we are using a new textbook! We will also be reading from another important book on a specific operating system.
Every chapter of the book is available for free download! You can also purchase a copy of the book, which I did.
The other book we are going to use extensively:
FYI, the former textbook we used, which I still consider valuable, and will occasionally refer to:
第01回 ■ OS History and Basic Principles Ch. 1 of both books "light cone" of information 第02回 ■ The Process Abstraction & Process API Chs. 4 & 5 第03回 ■ Introduction to Scheduling Chs. 6 & 7 第04回 ■ MLFQ & Fair Sharing Chs. 8 & 9 第05回 ■ Address Spaces, Memory API, and Free Space Management Chs. 13, 14, 16, 17 第06回 ■ Names, Address Translation, Paging and Reference Traces Chs. 15, 18, 19, 20 第07回 ■ Page Faults and Page Replacement Algorithms More on reference traces and their impact Chs. 21 & 22 第08回 ■ Hypervisors and System Virtualization Readings TBD 第09回 ■ Introduction to Concurrency Chs. 26 & 27 第10回 ■ Locks Chs. 28 & 29 第11回 ■ Condition Variables & Semaphores Chs. 30-32 第12回 ■ I/O Devices and Drivers Ch. 36 第13回 ■ File Systems Ch. 39 第14回 ■ File System Implementations Chs. 40-42
The course consists of fourteen ninety-minute classes. Students are expected to read the material, contribute to classroom discussions, and complete regular homework. A large-scale software project will contribute the bulk of the grade.
This year, heavier emphasis will be placed on the term project than on homeworks. You should expect your project to take 20 hours or more. There will be five homework assignments over the course of the semester, and readings almost every week. At least one of the programming assignments will involve parallel programming.
ソフトウエアプロジェクトは必要です!一人から三人までできます。来週は説 明と去年のプロジェクトの話です。
You will complete a moderately large software project during the term. Projects may be individual, or teams of up to three students. We will talk about ideas for specific projects next week. The following schedule applies:
Office Hours, Spring 2017春のオフィスアウアー:TBD, but my office is Delta N211. You may come to my office during this time without an appointment. If you wish to see me otherwise, you can attempt to find me directly, or send me email to arrange an appointment.
The lecture notes for each week are posted in SFC-SFS shortly before the lecture.
Two principles: everything is distributed, and everything is concurrent. Relativity (special, at least) applies to software. That is, when attempting to perform any operation, you must consider how to move the information you need to where you are, and you must consider the effect of any other possible operation happening at the same time elsewhere in the system.
ふたつの概念:全ての情報は分散である、とすべてのことは同時でやる。 特殊相対性理論はソフトウエアでも影響する。何かを処理しようとすると き、必要なデータが保存してあるところから現在地にはこんでこなければいけ ない。ほかのところでほか関数されることも考えておかなければいけない。You must consider the light cone of information.
光円錐をかんがえなければならない。
オペレーティングシステムの定義として、Tanenbaumの観点はふたつである: オペレーティングシステムはリソースマネジャ、とオペレーティングシステム は拡張マシンです。私の意見で、もうふたつのこと同じぐらいのレベル重要だ と思います:ネーミングとデータの転送。
These will be considered, along with papers on how to structure a system. Although it is important to understand a system as thoroughly as possible, students will also begin to recognize the value of being able to use, modify, and debug (a word we owe to Admiral Grace Hopper!) systems they do not completely understand, and how to build systems in which this is possible.
In the mid-twentieth century, there was much excitement over the design of digital computers. Early important names include John von Neumann, Konrad Zuse, J. Presper Eckert, John William Mauchly, and Maurice Wilkes; I encourage you look up those names and study their contributions. The term "von Neumann architecture" is generally used to refer to a computer that can store a program as a form of data, rather than in the wiring of the computer itself, though it is generally acknowledged that all of the above contributed to the basic ideas. Without this innovation, the field of computer software would be very dry!
By the mid-1950s, computers made of transistors and capable of storing their programs were becoming common. At first, each program controlled the entire computer; it was like reformatting your hard disk each time you wanted to run a different program -- except, of course, this was before the invention of the hard disk! Programs were on decks of punch cards instead. Individuals used the computer for a single program for hours at a time. Each program had to know how to control all of the hardware of the entire computer that it intended to use. (The first hard disk, the IBM 305 RAMAC, held five megabytes and was introduced in 1956.)
At the same time, the first high-level languages and compilers, of which FORTRAN is the most prominent example, were being developed. During this time, batch system operating systems were created. The computer was run by operators, a specialized profession of people who did not necessarily write programs, but knew how to run a progam on the computer. They took card decks from programmers, fed them to the computer, and returned the original program and data card decks and the output data card deck to the programmers.
On April 7, 1964, IBM introduced the System/360. It was a watershed event in computing history, but for our purposes there are two major innovations:
Around 1960, it was realized that more than one user could be seated at separate terminals at the same time, and that each user spends most of his time thinking, which would allow the computer to be idle. Fernando J. Corbató led the development of the Compatible Time Sharing System (CTSS), but Corbató credits John McCarthy with the original idea. (Both Corbató and McCarthy are alumni of Caltech, where I went to school.) Corby went on to lead the development of Multics, which would ultimately lead to the development of Unix. With these systems, and others such as some of the operating systems from Digital Equipment Corporation (DEC), especially VMS, the idea of computers that could do many things at once and support many users at the same time became common.
In the late 1970s, personal computers began to appear; their history followed the same sequence as above, only faster. Initially a personal computer could run only a single program. Later, systems could run more than one program, but with no hardware protection for the separate programs, crashes were common as programs interfered with one another. Finally, more "modern" PC operating systems adopted the widely-accepted notions of a kernel and common libraries that allowed programs to more efficiently and safely share a computer. Programs in these systems are run in a process. Today's PC operating systems, such as Linux, Microsoft Windows, MacOS, and especially FreeBSD, are heavily derived from the systems mentioned above. They also commonly ship with a GUI and many utilities, including shells, editors, compilers, and graphics tools, that are not strictly part of the OS itself.
More recently, a similar evolution has happened in the embedded device world; OSes for cell phones, for example, didn't really exist initially. Firmware was hand-coded from the ground up. Later, OSes, even with simple forms of multitasking, arrived (Symbian and PalmOS are probably the two most prominent). Nowadays, with iOS and Android, full-featured, Unix-like system services are available with sophisticated development tools and GUI toolkits.
The homeworks for the first two lectures have been combined and posted on SFS.
第2回 4月11日 システムコール
Lecture 2, April 13: The Process Abstraction & Process API
Other readings:
Besides the text, Lampson and Levin: