Advanced topics in operating systems, with emphasis in distributed systems. Operating systems architectures, including conventional, network, distributed, and cooperative-autonomous systems. Issues in design, concurrent programming, client/server models, synchronizations, distributed process communication, time and resourse scheduling, distributed/shared files and memory, and security.

The goal in this course is for students to learn the fundamental principles of operating systems, which are essential to understand the problems addressed by such systems, and study the strategies and fundamental algorithms or schemes followed to solve them. We will also have hands-on experience with implementation of some parts of an operating system; in particular, the course activities include some programming assignments using the educational-oriented operating system known as MINIX 3, Linux, and/or the Java Virtual Machine (JVM). The particular topics to cover include:

General operating system concepts Processes and scheduling
Memory management
File systems

Management of input/output Deadlocks
Protection and security
Distributed processing

Throughout the course we may use examples from real modern operating systems to illustrate concepts covered in class and how they are addressed in particular systems. The course counts for 4 credits.