The subject is to make the students able to design, and implement distributed software systems in Java using sockets, remote procedure call mechanisms, and JAVA RMI. It will cover: Process & thread management, Basic Process Model, Scheduling, Critical Sections and Synchronization, Mutual exclusion, Semaphores, Conditional variables, Monitors; Concurrency, Modeling concurrent activity starting with JAVA threads, Forms of communication, architectures, Means of communication (Shared memory, Direct communication between processes); Distributed Systems, Client-server model, Naming and binding, RPC General principles, Protection and Security; Java RMI.