Operating systems is a large area with a long history, so we have a lot of ground to cover in a single semester. Keeping up with the course material will likely require that you spend at least twelve hours a week on course work. Six of those hours will be spent in class, but you should reserve at least six additional hours to read, review, and complete work for the course.
My goal is to help you learn as much as possible in this course. I encourage students with documented disabilities, including invisible disabilities such as chronic illness, learning disabilities, and psychiatric disabilities, to discuss appropriate accommodations with me. You will also need to have a conversation about and provide documentation of your disability to the Coordinator for Disability Resources, located on the ground level floor of Steiner Hall (641-269-3124).
Attendance in class is not required, but I encourage you to limit your absences from class as much as possible. If you are sick, please do not attend class. Other absences (academic or professional travel, job interviews, etc.) are also acceptable, but I always appreciate it if you can give me advance notice, especially if you will miss a scheduled lab day.
When you miss class you are responsible for making up any missed topics and in-class work. Notes from class discussions will be posted on the course website, so please complete the assigned reading and review the posted notes after each missed day. If you still have questions after reviewing those materials I would be happy to help during office hours.
If you miss class on a day with an in-class exercise you should complete that exercise on your own. These exercises are not graded, but completing them should help prepare you for an upcoming class topic, assignment, or lab. If you miss a lab day, please send me an email after the class period and I will assign you to a group to complete the lab; I generally do not group students who miss labs with groups that started during class time, so you will end up working individually or with other students who missed the lab. Work is due at the originally-scheduled time unless we have made alternate arrangements for deadlines.
Our primary textbook is Operating Systems: Three Easy Pieces, by Remzi H. Arpaci-Dusseau and Andrea C. Arpaci-Dusseau. This textbook is available for free online. The textbook page includes information on how to order a printed copy of the book, but this is not required. There will be some supplementary readings, including a few important research papers in systems. All of these readings are linked on the course schedule, and should be available for free. Some readings may require you to log in with your Grinnell account when you are off campus.
If you find additional readings that help you to prepare for class, please share them with me! I will incorporate these into a future offering of the class. I also encourage you to share additional resources with your classmates on Teams.
Your participation in this course will account for 10% of your final grade. To participate fully in this class, you must:
While I hope you are able to demonstrate both of these while physically present in the classroom, neither requires that you attend class. You may ask and answer questions in class or on the course Teams instance. Similarly, much of your collaborative work will happen outside of class time, and may even be remote. I cannot easily measure these aspects of your participation with any kind of precision, so I will err on the side of being generous with participation grades.
Please remember that collaborative work on labs is part of your grade in this course. One of the skills I expect you to develop in this course is to work well with others on challenging technical problems. Preparing for the technical aspects of this course work is critically important, but engaging respectfully with your fellow students is equally important.
A student who consistently engages with course topics and works well with their groups should expect to receive a 90% on participation. I reserve 100% for students who make exceptional contributions to the class discourse through frequent insightful additions to class discussion, exemplary work as a supportive group member, and other means that are hard to anticipate but go beyond my baseline expectation for students in class. Students who participate in counterproductive ways will earn a lower participation score.
Individual assignments will make up 15% of your total grade. These assignments fall into two categories: programming assignments and reading journals. All assignments will be weighted equally, though not all are equally challenging. These assignments are meant to help you prepare for labs and class discussions. Every assignment is listed with a due date and time on the course schedule. You are responsible for submitting each assignment to gradescope by the time it is due; late assignments will not be accepted.
These assignments are intended to help you practice programming skills you will use in labs, and to assess your individual understanding of the course material. Therefore, collaboration on assignments is not permitted. Prohibited collaboration includes discussion of common issues, potential solutions, or past assignments; we will spend class time discussing these assignments after they are due. If you have questions on an assignment, please bring them directly to me.
You will need to complete reading journals for several papers we will read in the last few weeks of the semester. Your responses will help me plan the in-class discussion of the papers we read, so do not be surprised if I ask you to repeat a point or question you raised in your journal. Asking questions about papers will earn more points that reciting facts; there is no penalty for failing to understand part of a paper, but a journal that only recites facts about a paper will earn a poor grade. The quality of your writing will have an impact on your grade for reading journals; I expect you to respond clearly in complete sentences and paragraphs with correct spelling and grammar.
Labs will account for 50% of your grade in this class. Most labs will be weighted equally, but three (malloc, sudoku, and p2pchat) will take place over two weeks and will be weighted the same as 1.5 regular labs. Unlike assignments, I will accept labs up to one week late; labs turned in after the deadline will have a 20% penalty.
Labs are the primary assessment mechanism I use for this course; they give you an opportunity to demonstrate that you have learned key concepts from the class. You must earn a passing grade (at least 70%) on every lab to pass this class. I will check the 70% cutoff before any late penalty is applied. That means you can submit a lab several weeks after a deadline to satisfy the course requirement even though a lab turned in that late will contribute 0% to your overall grade.
I will calculate your grade in such a way that resubmitting a lab never hurts your overall grade in the course. For example, if you submit a lab on time but your work earns only 65%, you will need to resubmit to pass the class. However, if your resubmitted lab earns less than 65% (due to the late penalty or a submission past the late work cutoff) this lab will still contribute a score of 65% to your overall course grade. That means that it is always in your best interest to turn in lab work on time, even if your work may not earn a high enough grade to cross the 70% threshold.
Unless you are given explicit permission to do otherwise, you must work with your assigned group for each lab. While I expect that you understand how to work collaboratively, I have found it is sometimes necessary to clearly state some expectations for group work: I expect every member of your lab group to contribute to the work you submit, and that work must be a product of your collaborative effort. That means you cannot divide the lab into parts and work separately, you cannot allow other members of your lab group to complete the lab for you, and you cannot complete the lab on your own without your group’s involvement.
You are encouraged to use outside resources when completing labs, provided you cite them. One exception is GitHub Copilot, which may not be used for any work in this class; see the section on academic honesty below for an explanation of this policy. Building on existing code is a valuable skill, and relying on outside sources will not be penalized. However, you may not use an outside source for the majority of your implementation. If your assignment is to implement a shell, you cannot simply submit someone else’s shell implementation with a citation. If you find an outside source you would like to use but you are unsure whether that would be acceptable, please ask me before using it.
Your work on the class project will account for 25% of your final grade. You may complete your project individually, or in a group of your choosing with up to three members. We will begin work on the project in week 11, starting with a proposal for a system that you will implement. The system you build will be up to you, but it must draw on several topics from the course. After completing a project proposal, you will implement your system and present the results of your work at the end of the course. All three components will contribute to your project grade; the proposal is 10% of the project, the presentation is 30%, and the final implementation is 60%.
All project components must be turned in on time unless we arrange alternate deadlines. The project implementation is due at the final cutoff time for work this semester and cannot be extended under any circumstances unless you are approved for an incomplete in the course.
Note that you do not need to complete your entire proposed project to earn a high grade on the project implementation or presentation. I want you to be ambitious with your projects, and I understand that some groups may not be able to produce a working system in the final three weeks of the semester. That is okay. We will discuss the ways that your work will be assessed when we start the project so you understand what you would need to earn a grade you are happy with even for a project that doesn’t go exactly as planned.
You can earn extra credit in this class by participating in department events during the semester. I will share upcoming department events at the start of class; most events that are eligible for extra credit will be academic in nature, although I may include some additional community events on occasion. For every four eligible events you attend you will earn 1% credit toward your overall grade in this class, up to a limit of 3%. To earn this credit, you must send me an email stating that you attended and participated in the event within 48 hours of your attendance. Your email should also include a paragraph:
This deadline is waived for events prior to Friday, September 16, 2022; for those events, please email about your attendance no later than Tuesday, September 20th.
The graded components for this course will contribute to your total grade in the following proportions:
There will be no curves or competitive grading in this course; every student has an opportunity to earn an A. Your final grade will be determined with the following scale:
Note that these grade ranges only apply for students who earn at least 70% on every lab in the class. Students with any labs that receive less than 70% (prior to late penalties) will receive a D or F in the course unless they resubmit lab work that earns at least 70% before the end of the semester. See the section on Labs for details on this policy.
You may ask me for your current grade in the class at any point; I will happily give you my best estimate based on the current scale and graded work so far, but these estimates are not guarantees of a specific final grade.
I encourage collaboration when it promotes learning. However, it is important for you to understand the course materials and demonstrate your own learning on assignments. As an instructor, I will meet my obligation to bring any work suspected to be in violation of the College’s Academic Honesty Policy to the attention of the Committee on Academic Standing, after which point there is no recourse with me.
You are free to discuss course readings and labs with other students, but copying is not acceptable. For individual assignments, you may only discuss your work with the instructor and course mentors. Work that you submit should be your own, and must acknowledge the contributions of others. When you submit individual work, I expect that work to be the result of your individual effort; likewise, group work should be a product of the collaborative efforts of your entire group.
Misrepresenting who has contributed to work you submit is a violation of the academic honesty policy, and I will inform the committee on academic standing of any such violation. These cases could result in a zero on the assignment, or in the entire course. If you find that your lab group is not contributing, or if your partner(s) completed a lab without you, please tell me immediately so we can resolve the issue before you submit any work.
You are not permitted to use GitHub Copilot or any other programming assistance tool that is trained on others’ code for this course. If you aren’t already aware, GitHub Copilot is a machine learning system that suggests code as you type in VSCode. Copilot is trained on code hosted by GitHub, and offers suggestions that go far beyond the usual API-based autocomplete suggestions most programming editors produce (e.g. VSCode’s Intellisense, which you are welcome to use for this course). There are major legal questions around Copilot’s use of other code, particularly as it connects to open source licenses that place restrictions on the licensing of derivative works. You can read more about these issues at https://www.plagiarismtoday.com/2021/07/08/github-copilot-and-the-copyright-around-ai/.
For the purposes of this class, there is no ambiguity about the use of Copilot: code suggested by Copilot is derived from the work of others, but you cannot easily determine those sources so citing them is not possible. Citing Copilot itself is not an acceptable alternative, since Copilot did not create the work that the suggested code is derived from. As a result, using GitHub Copilot constitutes an academic honesty violation in this course.
If you use your own computer for any work in this class I ask that you do not install GitHub Copilot, or uninstall it if you have already done so. If you prefer not to remove Copilot from your computer you are welcome to complete all work for this course on MathLAN machines, which will not have Copilot installed.
Please come by during my office hours to discuss course content, get extra assistance, or just talk about how the course is going. My office hours will be posted on the course website and shared via Teams by the time of our first assigned work.
If you cannot make it to regular office hours, email me to schedule an alternate time to meet. Please send at least three possible meeting times if possible so we can quickly find a time that works for both of us.
You are welcome to post general questions about C programming, class concepts, or other technical issues on Teams. My hope is that these questions will be a resource for the entire class. Clarifying questions about assignments and labs are always okay to ask on Teams, but technical questions may give away too much information about your approach to the problem. You can always ask the instructor if you are unsure whether a question is appropriate to share with the whole class.
I am happy to answer questions by email or via Teams message, but please allow 24 hours for a response (except on weekends, when I may not be able to answer at all). If you have an urgent issue that must be resolved quickly, email is the best way to reach me. If an issues comes up and it cannot wait until the next class period, please include the text “URGENT” at the beginning of your subject line.