The purpose of this course is to teach the design of operating systems and operating systems concepts that appear in other computer systems. Topics we will cover include concepts of operating systems, system programming, networked and distributed systems, and storage systems, including multiple-program systems (processes, interprocess communication, and synchronization), memory allocation (segmentation, paging), resource allocation and scheduling, file systems, basic networking (sockets, layering, APIs, reliability), transactions, security, and privacy.
We will be using the Pintos educational operating system for all three projects.
Homeworks and projects will all be submitted and autograded via GitHub. Individuals and groups will have GitHub repositories. Intermediate pushes will help the staff see how students are progressing.
Project teams will be 4 people, not 5, although some may be 3. Past experience was that in such large teams it was all too common to “take turns” rather than really working together.
We are using the textbook, “Operating Systems: Principles and Practice” by Anderson and Dahlin.
CS 61A, CS 61B, CS 61C, and CS 70. This means that you understand:
- Data structures: arrays, linked lists, binary trees, and hashing
- Assembly language programming
- C (and, to a lesser extent, Go)
- How to debug C code, especially using GDB
- CPU caches and memory hierarchy
- Virtual memory (at the very basic level covered in CS 61C)
- CPU pipelines and very basic digital logic design
- Random variables and probability distributions (at the level covered in CS 70)
If you feel that you would benefit from additional review of these
prerequisites, we recommend using the following resources:
Hennessy, John L. and Patterson, David A. Computer Architecture: A Quantitative Approach. 5th edition. Although the main content of this book goes far more in-depth into computer architecture than you are expected to know for this class, the appendices provide an excellent overview of some of the prerequisites. Focus specifically on the sections below:
- 2.1 and B.1 - B.4 (you can skip the sixth optimization in B.3) review caching, virtual memory, and memory hierarchies.
- C.1 - C.2 review CPU pipelines at the level of CS 61C.
- This book is available at the Engineering Library on campus: check OskiCat.
- Other editions (some older, some newer) are also available at the Engineering Library.
For a good review of probability as you’ll need it in this class, read through CS 70 Lecture Notes 15, 16, 17, 18, and 19.
All decisions concerning appeals for enrolling in the course are made by CS departmental staff; the course staff have no say in the matter. If you have questions or concerns, feel free to visit 379 Soda.
At the end of the term, each student is assigned a score out of 100 points. It is determined as follows:
- 40% Exams
- 40% Projects
- 15% Homeworks
- 5% Participation (including discussion attendance)
Your lowest quiz score is dropped. Precisely, this works as follows. There are three quizzes, each worth 10 points, and a final exam, worth 20 points, out of the overall 100 points for the class. If your lowest exam score is on a quiz, then that quiz does not count toward your final grade; the other two quizzes and the final exam are used to compute your overall score, for a total of 40 points from exams. If your lowest exam score is on the final exam, then your final exam score is scaled down to 10 points; the three quizzes and the scaled-down final exam score are used to compute your overall score, for a total of 40 points from exams.
Once students' raw scores are computed as described above, final grades are assigned using the following absolute scale. The provided raw scores are the lowest scores for each letter grade. For example, a score of 82.9 corresponds to a B+, whereas a score of 83 corresponds to an A-.
This grading formula implies that there is no curve. Your grade depends on how well you do, not on how well everyone else does. The cutoffs were carefully chosen based on student performance in prior offerings of this class and the department policy on final grades.
Three quizzes are scheduled throughout the summer, with a final exam at the end. Please consult the class schedule. Each exam will be cumulative and cover material seen in the course so far in lecture, sections, readings, homework assignments, and projects. You are likely to do poorly on the exams and in the course if you do not do your share of the work on the project. If you have a conflict, let us know, and we will schedule a makeup exam. Exams will be delivered online. All exams will be open book---you may use the textbook, resources on the course website, or resources you find online. But you may not collaborate with other people, either in person or online, during the quizzes or final exam. For example, looking for existing resources online is acceptable, but posting a question on StackOverflow to get help during an exam is not.
We see homework mostly as a chance for exercise. You will sometimes be given full credit for handing in a solution in which (based on autograder results) you demonstrate that you have made a substantial effort on each problem. Solutions will not be made available online, but you may come to Office Hours to see them 2 days after the assignment is due.
Project and Sections
The projects in this course provide a deep experience with operating system and distributed system design and implementation. We have tried hard to keep the workload manageable and to focus on learning concepts, rather than busy work. The project experience is essential to the course.
If you plan to do software or hardware development after graduation, you will almost certainly need to know how to work in a group. Recent CS grads almost all say that the ability to work in groups was the single most important thing they wished they had learned at Berkeley. Hence, for this project, you will need to form into groups of 4 people; the assignments will be the same no matter what size group you have. We will not permit anyone to do the projects in a group smaller than 3. In order to ensure everyone in the group does their fair share of the work, we will ask each of you to turn in assessments of the relative contributions of your project partners.
TAs will grade all parts of your project. The TAs have been instructed to grade in part on design. In other words, it is not enough to get a working solution; you must implement the solution in a clean way that would simplify making further enhancements. (Several employers in the area have said that many of our graduates don’t know how to program well — it will really benefit you in the long run to work on your software engineering skills.)
For each project, you will turn in an initial design document and a TA will meet with your group for an oral presentation of your design at a design review. These reviews serve several purposes:
- To encourage you to get an early start on the assignments (a key to success in this course).
- To catch design errors early, before you spend a lot of time debugging.
- To give you an opportunity to explain and defend your approach (this is an important skill to learn as engineers).
- To provide an opportunity to assess your understanding of the project.
All assignments are due at 11:59:59 PM Pacific Time on the day listed on the schedule. Project design documents are due at 6pm on the day listed.
Your group gets 2 project “slip days”. They can be only used on the final code hand-in for projects, and at most 1 can be used on any single project. They can NOT be used for design docs, checkpoints, or final reports. After the 2 project “slip days” are used up, no credit will be given for late project submissions.
There are 2 homework “slip days”, and at most 1 can be used on any single homework. After the 2 homework “slip days” are used up, no credit will be given for late homework submissions.
Slip days can only be used in whole numbers.
Collaboration PolicyNote: Projects are a shared responsiblity and all project members may incur penalties for cheating.
We encourage you to ask other students in this semester’s course about the concepts, algorithms, or approaches needed to do the projects and assignments; both giving and taking advice will help you to learn. However, what you turn in must be your own, or for projects, your group’s own work; copying other people’s code, solution sets, or from any other sources, including online sources, is strictly prohibited. The project assignments must be the work of the students turning them in. Wherever you have benefited from the work of others, you should credit it properly in your code and/or writeup. Note: Only projects are group assignments. Homeworks are individual and you should not look at or copy other code, even that of your project groupmates.
Examples of acceptable collaboration between students in different project groups in this semester’s course:
- Explaining a concept to another student, or asking another student to explain a concept to you
- Discussing various algorithms or approaches for project components
- Discussing testing strategies and approaches
- Searching online for algorithms or implementations of generic (non-project-specific) abstractions (e.g., searching for various implementations of a hash table)
- Helping another student debug their code (note that it is not acceptable to give that student code solutions)
Examples of unacceptable collaboration:
- Looking at code from a different group’s project or another student’s homework — this includes looking at online code from prior semesters or other institutions
- Using code from a different group’s project or another student’s homework — this includes incorporating online code from prior semesters or other institutions
- Looking at or using specific test case instances from a different group’s project or another student’s homework — this includes incorporating online code from prior semesters or other institutions
- Searching online for specific implementations of project abstractions or functions
We use an automated system for detecting cheating: it performs a pairwise comparison of all assignment submissions with all others for this class, prior semester classes, and various online repositories. The system reports any suspicious similarities. The course staff will manually review any such similarities.
If two assignments are determined to be obviously very similar (i.e., we believe that they were done together or one was copied from the other), then all the students involved the incident, both the copy-er and the copy-ee, will receive a penalty. The minimum penalty is to receive a negative score on the assignment. More serious cases of academic dishonesty, such as repeat offences or cheating on exams, will incur a greater penalty at the instructor's discretion, such as receiving an F in the class. In addition, for every instance, a letter to the Center of Student Conduct will be attached to your permanent record, and a copy will be placed in the CS division office.
Note that you are responsible for not leaving copies of your assignments lying around and for protecting your files — do not use public unprotected source code repositories to store your code. You must set up your files and directories so that they are protected from others reading them.