Multi-processor and multi-computer operating systems (special requirements with respect to CPU scheduling, process synchronization, memory management, etc.). Advanced concepts of process synchronization and communication (deadlock theory, inter-process communication mechanisms, etc.). Threads management in multi-core systems. Operating systems for real-time systems and applications (special CPU scheduling algorithms, etc.). Operating systems for multimedia systems and applications (special disk scheduling algorithms, etc.). Operating systems for mobile devices and environments with restricted resources (e.g. sensor networks). Virtualization (the VM concept, virtualization techniques and categorization, hypervisors, tools, etc.). Network and distributed operating systems. Practice (lab) in Linux: Concurrent programming (child processes, fork, wait, exec, pipes, signals/traps, etc.). Threads management and programming with Posix Threads library. Special mechanisms for process communication and synchronization (shared memory segments, semaphores, message queues). Inter-process communication and programming with named pipes and unix-domain sockets.