Table of Contents
Syllabus (Spring 2020)
If you have any questions not addressed in this syllabus, don’t hesitate to ask in person or electronically!
Course Details
This section contains details about the course, times, and other information.
Office Hours
- My office is in Ford Hall 252.
- Note that this location has changed if you knew where I was last year!
- Kept up-to-date on the front page of my website.
- Always by appointment if I can! Get in touch: jjfoley@smith.edu
TA Hours
The departmental TA page is here: http://www.cs.smith.edu/TAs.php. Feel free to ask on Piazza about TA hour changes.
The department provides TA support. Not every TA has taken Operating Systems in the past. They can definitely help you think through your programming assignments or install/debug software.
Class Meetings
- Lecture: (Ford Hall 342) Tuesdays & Thursdays 1:20pm-2:35pm
- Lab: (Ford Hall 342) Wednesdays 2:45-4:35pm
We may have hands-on exercises outside of official Lab time as makes sense for content in the course.
Accessibility
This course is intended to be accessible to all students. If you have questions or requests for accommodations, feel free to reach out to me or the Office of Disability Services. For accomodation letters you can email me or deliver them to my office hours so we can construct a plan together. Please let me know as soon as possible how I can best support your learning.
Identity
In order that all forms of self-identity can be honored, students who prefer specific pronouns are encouraged to inform the instructor. There is a survey I have created so I can get to know you all better.
Computer Access
This course will be hands-on, and if anyone is unsure of where or how they will complete their assignments, they are encouraged to contact the instructor. Smith College has resources for students in need of computers including labs, rentals and grants (e.g., money). The instructor would be quite happy to help a student looking for a quiet place or a laptop to do the assignments.
Prerequisites
Normally, students are required to take CSC231 before taking this course. A discussion of operating systems is greatly benefited by an understanding of assembly language, system architecture and the concepts of the C programming language.
We will discuss and review C and architecture concepts throughout the course, but it is expected that you will have a solid foundation.
Operating Systems (Course Content)
We will use two textbooks in this course:
- DiS: “Dive into Systems”; which is written to be a course like CSC231 (the pre-requisite) but primarily in C rather than assembly language.
- OSTEP: “Operating Systems: Three Easy Pieces” textbook, which is a good Operating Systems textbook that is available for free online, but expects comfort in the C programming language.
Note: I disagree with using the word easy to describe content; at best we mean simple and simple does not necessarily mean simple to learn!
This course will be guided by the discussion, exploration, and answering of the following five questions. In fact, one of the core evaluations in this course will be written responses to these questions.
Q1: How do we run multiple programs at the same time?
In the first section of the course, we will study how operating systems let each program run nearly simultaneously; this is the scheduling problem. We will simulate several scheduling algorithms in python and explore what it takes to create a “good” scheduler.
Q2: What’s the value in the C programming language?
In the next section of this course, we will use the Dive Into Systems book to explore the C programming language. We will learn some of the pros- and cons- of this language that is core to systems programming and research.
Q3: Where does memory come from?
In the next section, once we have a better grasp of C, we will explore malloc
and free
or what happens if you need to ask the operating system for memory. There are a number of algorithms and techniques here that span from software down into hardware.
Q4: How do we program safe parallel code?
In the next section of the course, we will return to studying how the operating system coordinates code running simultaneously, but we will focus within the same program. Here, the level of abstraction are threads and we will look at classical (e.g., locks and mutexes) and more modern (e.g., atomic instructions, functional programming, actors) strategies for writing safe parallel code.
Q5: How do we store files and directories on disk?
In the last section of the course, we will focus on files, folders, programs, links, and how disks work. We will look at the classical spinning hard drives and more modern solid-state storage.
Assignments and Grading
Schedule and Topics
The schedule is presented on a separate page for readability and editability.
Grading Overview
Your course grade will be a weighted average of your projects (the assignments), your exams, and the final project. I am always happy to discuss feedback and grading with you.
- Labs: 30% (each lab is pass/retry/fail)
- Projects: 30% (we will have 3 pre-designed projects and one more open-ended final project built out of the labs)
- Class Participation & Preparation 10% (you will be asked to read before class!)
- Writing Checkpoints: 10% (you will periodically turn in written answers to our five questions)
- Final Report: 20% (the final report will contain deep answers to each of our five research questions)
If you believe something has been marked in error or you do not understand why a certain grade was given, please talk to the instructor during office hours or an appointment. I will be happy to explain my thinking and/or correct my mistake!
Lab Assignments
Lab assignments will be coded together in lab, and I am aiming to limit them to single file programming challenges.
They will be assessed as either “Satisfactory”, “Retry” or “Unsatisfactory”. If you make an earnest attempt at each lab exercise, you should receive either a “Satisfactory” or “Retry” grade. “Unsatisfactory” labs are not eligible for retries. Assignments will be weighted out of 10 points, and after each retry, 1 fewer maximum point will be available.
This will mean that I can grade them for feedback and style very quickly - and allow for you to improve on them with more time and feedback.
Writing assignments
Every few weeks, I will solicit written (typed) answers to as many of our five questions as we have covered in class. I will provide direct feedback on the style and quality of your writing as well as the accuracy of your answers. These will build toward your final “Report” that will contain all answers.
Attendance Policy
I will schedule content in lectures and labs to best support your work in CSC262, and I will track attendance, which will be informally part of your class participation and preparation grade. I encourage you to visit my office hours or consult with your classmates if you have questions reviewing any material you have missed.
Assignment Extension Policy
Extensions will be given in extenuating circumstances, but only after a conversation and discussion with me. In such circumstances, I strongly suggest students contact the Dean of Students’ office so that they may take advantage of Smith’s support resources.
Students with accommodations through the Office of Disability Services are encouraged to contact me so we can work out a plan together. See Accessibility.
Academic Honesty & Collaboration Policy
Smith College expects all students to be honest and committed to the principles of academic and intellectual integrity in their preparation and submission of course work and examinations. All submitted work of any kind must be the original work of the student who must cite all the sources used in its preparation.
Smith Honor Code, Student Handbook, retrieved from https://www.smith.edu/sao/handbook/socialconduct/honorcode.php.
Group work policy:
Students are encouraged to discuss assignments in groups, to discuss error messages, to “Google” questions together and in general to pursue becoming better Computer Scientists as a community. Students are not allowed to write code together without the explicit permission of the instructor. Working together without permission or using code without properly sourcing it will result in a report to the honor board.
A good rule of thumb is this: when working as a group, do not write any code. Discuss the assignments, plan strategies, draw pictures, but write your code independently. Use your peers to solve the problem and build your understanding and then demonstrate that individually – there is enough creativity in the assignments chosen for this class that your solution will be different from your group members’ if you follow this rule.
Course Citation Policy
Since it is often encouraged to use external resources to bolster your knowledge and to solve particular problems, that means you must acknowledge these resources. A formal citation format, e.g., MLA or APA is to be used for any printed resources you access during this course. For electronic resources, i.e., web pages, the URL will suffice.
You do not need to formally cite my slides, my readings, or my starter-code, unless the resources in questions say that you should.
Your work must be your own: the goal is understanding
It is unacceptable to adapt work you do not understand, whether it is pseudocode or exact Java code. It is better to submit a blank section of an assignment than to present a solution you have found that you do not understand.
No assignment or part of an assignment will have a dramatic effect on your overall grade if you cannot figure it out, and assignment grades provide me with an accurate understanding of where students are struggling.
Self-Plagiarism and Past Assignments
Students often come in with prior programming experience, whether it is CSC111, AP Computer Science, or courses at other institutions. If you are ever assigned work that overlaps with assignments you have completed in the past, you must disclose this to the instructor so that we can work out an alternate part of the assignment, or I can be aware of the additional resources that you have available.