CS 372 Operating Systems Syllabus
Materials
This course examines basic issues in operating system design and implementation. The operating system provides a well-known, convenient, and efficient interface between user programs and the bare hardware of the computer on which they run. This interface allows the OS to contain the low-level code needed to control a particular piece of hardware (e.g., a network card), while user programs contain simpler, more abstract code that is correct for a variety of hardware (e.g., different vendor's network cards, and different generations of network cards like 10Mbps and 100Mbps). The OS protects the hardware because only OS code directly accesses it. In this way, if the OS is correct, user programs can be incorrect, but the machine will still function. If user programs had direct access to hardware, they would have to be correct to insure the correct functioning of the machine. The OS multiplexes machine resources safely. It allows multiple user programs (possibly run by multiple users) to access common resources like the network, local disc, local memory, and the CPU. It tries to prevent user programs from interfering with each other's execution.
Operating systems have several properties which make them unique pieces of software: they are among the largest programs that exist (Windows Vista is over 50 million lines of code), they must manage concurrent execution of multiple threads of control, they must deal with the often hostile programming environment provided by raw hardware (e.g., undocumented behavior, workarounds for incorrect hardware, and timing dependent behavior), they must control their use of machine resources (primarily CPU and memory) more carefully than most software, and they must fail less frequently than most software. These requirements make the creation and maintenance of operating systems challenging and fulfilling. Operating systems attract programmers who like to program.
The course will start with a brief historical perspective of the evolution of operating systems over the last fifty years, and then cover the major components of most operating systems. This discussion will cover the tradeoffs that can be made between performance and functionality during the design and implementation of an operating system. Particular emphasis will be given to these major OS subsystems: process management (processes, threads, CPU scheduling, synchronization, and deadlock), memory management (segmentation, paging, swapping), file systems, security and networking/distributed systems.
Communication
Requirements and Grading
Late Policies
All homeworks are due at the beginning of class. You must turn in written homework on time without exception, because the solutions will be presented when the homework is turned in to give you quick feedback. Please do not be late to class, especially when homework is due.
All labs are due just before midnight (11:59pm), and they are due on days
we don't have class e.g., Friday. Labs are dated by the turnin program.
You will have 5 slip days for your programming labs. You may divide your
slip days across the 4 projects
in any way you wish to extend deadlines for the projects. To help the
TA track your slip-day status, the top of your project README file
should include the line:
Slip days used (this project): _______ Slip days used (total): ______
Cooperation and Cheating
Feel free to discuss homework and labs with other members of the
class, myself, or the TA. However, do not look at or copy another
students solution to a homework or lab. I am not concerned with
how you come to understand the problem and how to solve it, but once
you have the background necessary to solve it, you must provide your
own solution. Exchanging homework or lab solutions is cheating and
will be reported to the University. At the minimum, you will fail
the course. If you are ever in doubt, PUT ATTRIBUTION IN YOUR
SOURCE CODE. If you ended up reproducing a 3 line function
exactly, make a note of it in your code.
The Student Code of Conduct includes your rights and responsibilities as a student.
Acknowledgments
I used course materials from Kathryn McKinley, Ron Rockhold, Tom
Anderson, John
Carter, Mike Dahlin,
Jim Kurose, Hank Levy, Harrick Vin, Thomas Narten, and Emery
Berger to prepare some
of the course materials. Thanks!
Copyright Notice: These lecture notes, homeworks, and lab assignments are part of a first course on operating systems. You must ask me permission to use these materials.
I do not grant to you the right to publish these materials for profit in any form.
Emmett Witchel, The University of Texas at Austin