Introduction (definitions, history, categorization). Processes and threads (definitions, basic features and differences, etc.). Processes communication and synchronization (concurrent processes, critical sections, mutual exclusion, semaphores, monitors, etc.). CPU scheduling (criteria, features and algorithms, performance metrics, etc.). Memory management (physical memory organization, variable partitions, paging, segmentation, combined systems, virtual memory, page replacement algorithms, etc.). I/O management (devices categorization and main features, disk scheduling algorithms, etc.). File systems (basic principles, categorization, etc.). Case studies (Windows and Linux operating systems). Practice (lab) in Linux: installation, architecture, shell commands and filters, shell programming with scripts and awk, security and protection mechanisms, system administration. Operating systems simulators. Introduction to concurrent programming.