“What happens after you launch a program?”
“How does your program interact with hardware (or systems) to do its job?”
“How can you run your multiple programs with limited hardware resources?”
You might ask these questions at least once so far, after the moment you compile and run your first program successfully.
You will be able to find answers to those questions in this class. This class will introduce the basics of modern operating systems (OS). OS, located between hardware and your programs, orchestrates hardware and software resources in a system to ensure your program runs seamlessly. The class will cover the functionalities that made it possible.
The course divides into four major sections. The first part of this course discusses processes: how OS runs (multiple) programs at the same time. Topics in this section include: processes, threads, context switching, and scheduling basics. The second part of the class concerns about how to represent data. It will cover topics such as file and file system basics. The third part of the class addresses the problem of communication between processes. It will first discuss inter-process and remote-process communications; then, we will discuss computer networks and OS features enabling networking. The last part of the course is about synchronization; it will cover topics such as signal, semaphore, monitor, and deadlock. After these four major topics, the class will conclude with a few emerging topics, such as memory-safe OSes written in Rust.