>> SPRING 2014 | [ SCHEDULE ] | [ GitHub ]
Instructor: Andrew Cencini (acencini@bennington.edu)
Credits: 4
Meeting Time: M/Th 2:10pm - 4:00pm
Location: Dickinson Computer Science Lab (Dickinson 233)
Office Hours: M 1-2pm, W 1:45-2:45pm, F 10-11am, Dickinson 211
Course Web Site: http://cs.bennington.edu/courses/s2014/cs4152.01/

Students will study the theory and practice of operating system development. Topics will include processes, memory management, threads, i/o, file systems, scheduling, naming, security, and current trends in operating system design (low-power systems, mobile computing, hardware disaggregation). Students will read key research in the field, as well as engage in several moderate-intensity programming projects to solidify core concepts in the systems programming space. Students will also have the opportunity to work in groups to specify their own "dream OS", which they will defend as part of a group critique.


  • Rohail Altaf
  • Erick Daniszewski
  • Klemente Gilbert-Espada
  • Torrent Glenn
  • Logan Traynor
  • Brendon Walter

In this class, students will become familiar with core operating systems principles via experimentation on an embedded operating system for the ARM11 (ARMv6) platform, commonly used in various mobile devices and the Raspberry Pi (which the class will be using).

Students will also gain a working knowledge of ARM11 assembler, as well as a broader knowledge of assembly language.

Students will also become conversant with basic systems programming in C.

This class will be organized in a similar manner to Distributed Systems, but witout a lab. Class sessions will balance between topical discussion, lab work, and project work. Collaboration and group problem solving will be required. What doesn't kill you makes you stronger, right?

There is no required textbook for this class. Andrew Tanenbaum's Modern Operating Systems (any ed.) is a handy companion to the class, and incredible book and is also available on loan from Andrew Cencini or Crossett Library.


  • You will attend every class. More than two absences (excused or unexcused) will jeopardize your standing in the course.
  • You will check-in all required assignments prior to the start of the class in which they are due.
  • You will be a productive and positive collaborator with your colleagues.
  • You will be an attentive and positive contributor to class discussion and activities.
  • You will seek out help promptly if you are struggling or falling behind.
  • You will submit your own ideas and work. Academic dishonesty will not be tolerated, and will be passed along without exception to college authorities.

I strongly advise you to take this class Pass/Fail if you are nervous about grades. This material and way of thinking is likely to be new to many students, and represents a substantial challenge - anxiety over letter grades only increases this challenge and can pose a severe distraction from the subject matter. We all are likely to have way more fun if you're not preoccupied with a letter grade.

  • Class participation and attendance (40%).
  • Assignments and excercises (30%).
  • OS Project (30%).
I strongly advise all students nervous about grades to take this class Pass/Fail. While you will "get out what you put in" to the class, programming can be difficult under time and grade pressure - in essence, exponentially increasing that feeling of pressure. Taking this class pass/fail will allow you to feel relaxed and confident as you work through concepts and problems.

If you are struggling in class, or would like to investigate a topic in greater depth, come see me. My office hours are listed on the top of this syllabus. I enjoy and look forward to meeting with you – some general guidance on making sure we are able to meet:

  • I strongly prefer email (acencini@bennington.edu). I am on it way too much, so you'll likely get a reply within 24 hours unless I am extremely busy, it is a weekend or holiday period.
  • If you would like to meet with me, please consult my schedule (located at http://cs.bennington.edu/people/acencini) and propose a date and time that is not generally booked.
  • If you plan to drop by during my office hours, I strongly recommend that you email in advance - I like to know if you are planning to show up, and can also let you know if there might be a wait.
  • If you need to meet me outside of my office hours, I need at least a day's advance notice so I can ensure we can find the best time to meet.
The Most Ignored Advice In History: DO NOT WAIT UNTIL THE NIGHT BEFORE AN ASSIGNMENT IS DUE TO BEGIN THAT ASSIGNMENT!!!1!! This is something you can learn the easy way or the hard way. The work we do in this class, particularly programming, can be tricky and detail-oriented, and has a way of getting way out of hand under time pressure. You will make frustrating mistakes when tired and overwhelmed. Work when rested and shoot to have your work submitted in final form 24-48 hours before it is due. That way, should difficulty arise, you will have more time to work through the problem, or even possibly get help.

Everybody works differently; however, unless you are extremely confident in your abilities, start early and make sure you are not tight on time.

Reading and Assignments will be disseminated in class.

Week 0:

Week 1:

Week 2:

Week 3:

Week 4:

Week 5:

Week 6:

Week 7:

Week 8:

Week 9:

Week 10:

Week 11:

Week 12:

Week 13:

Week 14: