CSCI 2310
Operating Systems

Bowdoin College
Fall 2015
Instructor: Sean Barker

Course Description

This course will provide an introduction to 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. The operating system is responsible for allowing resources (e.g., disks, networks, and processors) to be shared, providing common services needed by many different programs (e.g., filesystems, the ability to start or stop processes, and access to hardware devices), and protecting individual programs from one another.

We will start with a brief historical perspective of the evolution of operating systems, 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 three major OS subsystems: process management (processes, threads, CPU scheduling, synchronization, and deadlock), memory management (segmentation, paging, swapping), and file systems.

Prerequisites: CSCI 2101 (Data Structures).


Instructor: Sean Barker
Office: Searles 220
Phone: 207-798-4220
Office Hours: Mon/Tues/Thurs, 1-3 PM, or by appointment.

TA: Caroline Pierce
Email: cpierce
Lab Hours: Tues/Thurs, 7:30-9:30 PM, Searles 224

Course Requirements

Attendance and participation in class, completion of written homeworks and programming projects, and two exams (one midterm and a final). Evaluation will be as follows:

The largest component of this course is a set of programming projects implementing various components of an OS. Projects will be in C++ and may be completed in groups of 2 (except for the first project, which is a warmup meant to refresh your knowledge of C++ and familiarize you with the course infrastructure). These projects will require a substantial time commitment on your part and past students have reported spending significantly more time on this course than others. Plan accordingly! While you will have roughly 2-3 weeks to complete each project, it is essential that you start the projects early; OS code is quite low-level and can be difficult to debug.

You will have 3 flex days to submit projects late without penalty during the semester, which may be allocated however you wish. Beyond the use of your flex days, late projects will be penalized a letter grade per day.



A. Silberschatz, P. Galvin, and G. Gagne. Operating System Concepts, 9th edition (2012). Available at Amazon or elsewhere.

Class Information

Tuesdays and Thursdays
8:30 AM - 9:55 AM
Searles 223


Electronic Device Policy

Use of laptops in-class is permitted for note-taking or other class-related purposes. Cell phones should be silenced and put away during class to avoid disruptions.

No electronic devices, including computers, phones, or calculators, are permitted during exams unless specifically indicated by the instructor.

Collaboration Policy and Honor Code

You are expected to follow Bowdoin's Computer Use Policy and its Academic Honor Code. No collaboration whatsoever is permitted on exams. For other assignments, you are encouraged to discuss ideas and techniques broadly with other class members, but not specifics of assigned problems (except as part of group projects). Discussions should be limited to questions that can be asked and answered without using any written medium (e.g. pencil and paper or email). In other words, at no time should a student read any code written by another student unless they are part of the same group. Sharing of code or intermediate designs is expressly prohibited. Remember that providing help beyond what is allowed is as much of an infraction as receiving help. This includes sharing your work with future students after you have completed the course yourself. Automated plagiarism detection software may be used in this course, and violations are much easier to detect than students often think.

Use of the internet (e.g., Google) for reference purposes is allowed on lab assignments, such as looking up the use of a particular library function. Blindly copying sections of code found online, however, is not allowed, and you should never submit code that you do not understand or would not be able to clearly explain. It is permissible to use software and materials available from other sources (understanding that you get no credit for using the work of others on those parts of your projects) as long as: 1) You acknowledge explicitly which aspects of your assignment were taken from other sources and what those sources are; 2) The materials are freely and legally available; and 3) The material was not created by a student at Bowdoin as part of this course this year or in prior years. To be absolutely clear, if you turn in someone else's work, you will not receive any credit for it, but if it is properly acknowledged, at least it will not at be considered a breach of this policy.

In the interest of fairness to all students, violations of this policy are grounds to initiate an action that would come before the Judicial Board. If you have any questions about this policy, please do not hesitate to ask for clarification.

Note for version control system users (e.g., git): While you are welcome to use version control systems such as Git or Subversion to collaborate within your team, you may not store or post any code in publicly-availabile repositories (such as public repositories on GitHub). If you would like to use a service like GitHub, you must use a private repository.