Prof. Lakshminarayanan Subramanian
Mon-Wed 12:30-1:45, WWH 202
Office Hours: Tue 5:00- 6:00, 715 Broadway, Room 706
This is an under-graduate course on operating systems. The goal of the
course is to cover the fundamentals of the design and implementation of
operating systems. The class has three major components: (1) lab
assignments which involve programming, (2) a small set of review assignments
(to review basic concepts) and (3) exams.
Students interested in embarking on a challenging systems-building project can do a systems project instead of review assignments.
Prerequisites: Basic programming background is essential primarily in commonly used languages like C and Java. Basics of computer systems organization background is also essential.
We will be using a variety of different materials for this class including some references from books and papers.
The following textbooks are good reference guides:
1. Operating Systems, 3rd Edition, Deitel, Deital and Chofness
2. Commentary on the Sixth Edition of UNIX by John Lions
3. Modern Operating Systems by Andrew Tanenbaum.
4. UNIX Programming (useful for early labs)
5. TCP/IP Socket Programming (useful for later labs)
The following two classes in other universities present a very good reference guide:
1. Introduction to Operating Systems
2. A high-level overview of UNIX and Linux
3. Processes and Threads
5. Process Scheduling
6. Deadlocks, synchronization
7. Memory management
8. Virtual memory
10. File systems
11. Implementing networking concepts
12. Implementing protection
13. Virtual Machines
14. Secure operating systems
15. Network File systems
Assignment 1: Due Sept 24th 2010.
Review Assignment: (Can be hand-written or typed. Hand-written submissions should be legible.)
Q1: Write a one page summary of the primary contributions that you understand from this seminal paper. (If you do not understand every aspect of this paper, it is ok). (Bulletpoints)
The UNIX Time-Sharing System
Dennis M. Richie and Ken Thompson
Q2: (Basics) Illustrate the architecture of a simple computer (with the different logic units, registers, memory etc) and explain the steps involved in the execution of a series of instructions by the processor. Specifically explain how a JUMP instruction is handled and how you come back to the original execution path. (Maximum 1 page: Bullet-point step-by-step answer preferred)
Q3: (Basics) Explain at a high level, the set of steps involved in transforming a high-level language program into a set of machine readable instructions. Explain the role of a compiler, assembler, linker and loader at a high level. (Maximum 1 page. Bullet point preferred)
Answers from Q2 and Q3 should NOT be cut-paste from any website. You can use any source for answering these questions but they should be written in your own style. You can discuss with others but please acknowledge them.
Linux basics Lab Assignment: (This has to be typed and submitted as a TXT file to me)
Q0: Install Ubuntu Linux on your machine. Mac users can use their Mac for this assignment. Mac users however have to interpret the question from a Mac standpoint and answer questions correspondingly.
Q1: Obtain a complete log of the set of statements that get printed in your screen when you boot up your computer into Linux. You can use standard Unix commands to obtain this log or this log is printed in one of the log files within Linux. Explain what is happening at each step in the bootup process to your best ability.
Q2: Explain the directory structure of a Linux installation. Starting from “/”, explain the directory structure and what files are stored in each 2-level subdirectory. Explain the main files stored in each of the 2-level sub-directories.
Q3: There are several “.conf” files in the directory “/etc”. Try to explain the semantics of the different configuration files.
Q4: There is a directory called “/proc”. Explain the semantics of what information is stored in the files in this directory. If possible try to connect some of this information with the corresponding UNIX commands they affect. Certain UNIX commands are dependent on the information stored in these files. Try to explain which ones?
Q5: Which directory contains the list of services that are automatically started when you boot up your computer? Try to figure out how you can start a new service and how you can disable/enable an existing service. Be careful when you do this part! Understand the semantics of the different services.
Q6: Determine the directory that stores the operating systems logs of the various actions (logins, process logs etc). Read the various log and try to explain the statements that are printed in the different log files. For each log file, print a small stretch of 10 lines of log output and explain what is happening in those 10 lines.
Q7: If you mount an external device such as a USB stick, determine how it gets mounted and unmounted. What command gets executed and how do you access the files in this directory in a command line or in a program. Try to create a Link pointer (using the ln command in Linux) for a file inside the USB sub-directory to a file within your home directory and vice-versa and see if it is possible. Try to mount and unmount your USB and see if the link pointers work after a remount.