This is an advanced graduate course focussed on synchronization-related topics in operating systems. The course is based on research papers, and will involve a lot of reading and assimilation of ideas. The reading list has been carefully selected from classical and recent research papers in order to introduce and develop the key concepts and developments in synchronization and shared memory multiprocessor operating system design. These concepts include various uses of locking in OS kernels, synchronization in interrupt and process contexts, issues in the design of scalable spin locks, scalable reader-writer locking, lock-free and non-blocking synchronization, software transactional memory, hazard pointers, read copy update, memory consistency models and their implications for the performance and correctness of synchronization, tools and techniques for checking for bugs in synchronization-related kernel code. You will be required to read each paper carefully, write a brief summary of it, and submit it before the start of each class. Each student will be assigned one or more papers to present in class. These presentations, your in-class participation and paper summaries will contribute directly to your grade. The goal of this class is not only to help you learn about different systems, but also to learn how to read and evaluate a research paper, how to compose a concise summary of a research paper, and how to synthesize concepts and ideas across several papers. Toward the end of the class each student will write a short position paper describing their views on the current and future directions of operating systems research, particularly in so far as they relate to the topics covered in class.