Today, virtually all operating systems support multithreaded programming. In fact, threads are easier to use and more efficient than processes. This paper presents a possible way of using multithreaded programming to strengthen an operating systems course. More precisely, the lecture hours are divided into a theory track and a programming track. The former concentrates on the traditional topics, while the latter consists of seven programming assignments and one mini-project that can provide students with a comprehensive coverage of the use of multithreaded programming in the design of various operating system components. These assignments also serve as a vehicle for introducing interesting materials (e.g., PRAM models) that are normally not...