Computer Science 162 — Operating Systems and System Programming (4 Units)
The purpose of this course is to teach the design of operating systems and operating systems concepts that appear in other advanced systems. Topics covered include operating systems, systems programming, networked and distributed systems, and storage systems, including multiple-program systems (processes, interprocess communication, synchronization), memory allocation (segmentation, paging), resource allocation and scheduling, file systems, basic networking (sockets, layering, APIs, reliability), transactions, security and privacy.
- CS 61C
- Math 55 or CS 70
This means, in particular, that you know C, Java, and data structures (at the level covered in CS 61A/61B), have done some assembly language programming, and that you know about series and products, logarithms, advanced algebra, some calculus, and basic probability (means, standard deviations, etc.).
- OS History
- OS Primitives
- Concurrency and Synchronization
- Virtual Memory
- Scheduling, Queuing Theory
- Distributed Systems
- Basic Security and Networking
- System Programming
- Multi-program Systems
- Resource Allocation and Scheduling
- 2-3 Midterms
- Final Exam
- 3-part project (done in groups of 3-4)
- 4 Homework Assignments
- 20-30 hour/person project
- 4 hours lecture/discussion per week
When to take
Most people to take this course in their junior or senior year. it is also greatly beneficial to take this course directly after taking 61C, to keep the overlapping concepts fresh. This class is a large time commitment so it is recommended to take this with other lighter workload classes.
Choosing the Course
When should you take this?
Most people to take this course in their junior year. it is also greatly beneficial to take this course directly after taking 61C, to keep the overlapping concepts fresh.
- CS 152: Exploring the lower level architecture that supports operating systems.
- CS 161: Exploring security aspects of operating systems and malicious code.
- CS 168/EE 122: Deeper look into networking and the internet.
Usefulness for Research or Internships
- You should almost definitely take this course if you are CS focused, as it introduces many topics in modern software engineering, and greatly helps develop coding maturity.
- This class is essential in getting jobs or internships, as Operating Systems are a core concept that most recruiters will ask you to have a solid understanding of. Often times interviewers will ask about the concepts learned in this class such as concurrency, the kernel, or memory.
- This is one of few classes that introduces you to the idea of working in a large group (4-5 students), and it is most likely that you will be working in such a group in the workforce.
- This class is beneficial if you are interested in research since a lot of research is done in improving different parts of the OS.
- Finding a group before going to class is critical so that you can be sure that you will be compatible with their working habits. Your group can make or break your project performance.
- Make sure you read the specs very carefully before diving into the coding. Plan on doing most of your work for the project on the design document.
- Debugging is an underrated skill, as bugs in your projects may be hard to find by eye test. If possible, try to familiarize yourself with GDB.
Last edited: Fall 2016