Operating Systems

ECE344, Fall 2022
University of Toronto

Instructors: Prof. Jonathan Eyolfson and Prof. Ashvin Goel

Quick Links

HomeLectures (Prof. Eyolfson)Lectures (Prof. Goel)LabsPiazza DiscussionQuercus Website

Courses After ECE344

The operating systems course is a basic/kernel course for ECE students that are specializing in the software stream (Area 6). Students often ask us about courses that they should be taking after they have taken ECE344. Here are some courses that may interest you:

ECE454 - Computer Systems Programming

ECE454 focuses on teaching students to become elite programmers! The course focuses on program optimization, i.e., how to optimize programs to improve their performance. The course covers the basics of computer architecture and compilers (and a bit of OS) but the aim is to help you write efficient programs, i.e., programs that the compiler can easily optimize and programs that take advantage of the underlying computer architecture. The labs are tough and competitive but most students think that they really learn a lot from the labs.

ECE419 - Distributed Systems

The distributed systems course is a follow-on course to operating systems. Distributed systems manage a cluster of machines, similar to operating systems managing a single machine. An interesting similarity between distributed systems and operating systems is that nodes don't share memory and so you program a distributed system similar to processes in operating systems (all communication is via node-to-node messages similar to communication via system calls).

However, distributed systems introduce a whole new set of challenges. The most significant one is partial failures, e.g., single node failures, messages can fail due to network link failures, messages can arrive out of order, be slow, etc. The idea is that a distributed system should still work (even if partially) in the presence of such failures. This is different from our failure assumptions in the operating system course, where we assume that a single machine either works or fails completely (e.g., crashes and restarts).

Some distributed systems topics are covered in ECE454 as well. However, if you are interested in distributed systems, you should certainly consider taking this course.

ECE467 - Compilers and Interpreters

ECE467 is an excellent course that teaches you how to write parts of a compiler. This is a good course to take if you plan to focus on various aspects of software systems. While ECE344 is not a prerequisite for this course, the two courses complement each other well.

Other courses

ECE326 (Programming Languages), ECE552 (Computer Architecture), ECE568 (Computer Security) and ECE461 (Internetworking) are other related software courses that may also be of interest.