Computer Science 162 — Operating Systems and System Programming (4 Units)

Course Overview

Summary

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.

Prerequisites

  • CS 61C
  • Math 55 or CS 70

This means, in particular, that you know C, and data structures (at the level covered in CS 61A/61B), have done some assembly language programming, and you know basic probability (means, standard deviations, etc.).

Topics Covered

  • OS History
  • OS Primitives
  • Concurrency and Synchronization
  • Virtual Memory
  • Caching
  • Scheduling, Queuing Theory
  • Filesystems
  • Databases
  • Distributed Systems
  • Basic Security and Networking
  • System Programming
  • Multi-program Systems
  • Resource Allocation and Scheduling

Workload

Course Work

  • 2-3 Midterms
  • Final Exam (some offerings only)
  • 3-part project (done in groups of 4)
  • 6 Homework Assignments

Time Commitment

  • 20-30 hour/person per project
  • 4 hours lecture/discussion per week

When to take

Most people take this course in their junior or senior year. It is 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.

What's next?

  • 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. Oftentimes 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.

Additional Comments/Tips

  • 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: Summer 2020