- Docente: Alessandro Ricci
- Credits: 9
- SSD: ING-INF/05
- Language: Italian
- Moduli: Alessandro Ricci (Modulo 1) Stefano Mariani (Modulo 2)
- Teaching Mode: Traditional lectures (Modulo 1) Traditional lectures (Modulo 2)
- Campus: Cesena
- Corso: Second cycle degree programme (LM) in Computer Engineering (cod. 8200)
Learning outcomes
The course introduces the basic principles of concurrent systems
design and programming, including distributed network-based
concurrent systems. The main aims of this course are:
- to introduce the basic theoretical and practical concepts concerning concurrency and concurrent systems
- to introduce basic principles for concurrent and distributed programming, including elements concerning modelling, design and verification
- to provide a solid understanding and practice about how to design and build concurrent applications in Java
- to provide a solid understanding about the specific issues concerning distributed systems as specific kind of concurrent systems
Upon completing this course, a student will
- understand the fundamental role of concurrency and of concurrent software systems with respect to computer science and the engineering of (modern and future) software systems
- have a solid understanding of the main conceptual and practical issues concerning concurrent systems modelling, design and engineering
- have a solid understanding and practice about how to design and build concurrent applications in Java
- know the specific problems concerning concurrency in
distributed systems and the basic algorithms and architectures /
infrastructures that can be used for the purpose
Course contents
Part one: Basic Concepts
- Concurrency and concurrent systems: basic concepts
- The critical section problem
- Verification of concurrent programs
- Process coordination using semaphores
- Process coordination using monitors
Part three: Design of concurrent programs
- Elements of concurrent programs design
- Visual formalisms
- Concurrent machines and languages
- Performance and scalability
- Testing concurrent programs
Part three: Distributed programming
- Basic concepts about distributed programming
- Channel-based models
- Space-based models
- Distributed Algorithms
- Service-Oriented Architectures and Web Services
Part six: Reactive and real-time systems
- Real-time systems overview
- Real-Time Programming Languages - The RTJS Case
The practice concerns the design and development of concurrent programs using Java as reference language and reference middlewares (RPC/object oriented, message-oriented, space-based, Web Services) for the distributed computing part.
Readings/Bibliography
Reference textbook:
- "Principles of concurrent and distributed programming", Ben-Ari, Addison-Wesley
- "Java - Concurrency in Practice", Goetz et al., Addison-Wesley
- "Multithreaded, Parallel and Distributed Programming", Andrews, Addison-Wesley
- "Concurrency - State models and Java programs", Jeff Magee and Jeff Kramer. Wiley
- "Distributed Systems: An Algorithmic Approach", Gosh, Chapman & Hall/CRC
- "Patterns for Parallel Programming", Matson et al., Addison-Wesley
Teaching methods
Six credits (about 60 hours) are devoted to theory and exercises in
the lecture-hall and three credits (about 30 hours) to practice in
laboratory.
Assessment methods
The final assessment is composed by two parts:
- written examination, composed by exercises about the content of the course
- practice (with oral discussion), which concerns the design and
development of a programming assignment, to be done at home,
possibly in group.
Teaching tools
- Lecture notes projected during the lectures, available on the course web site
- Lab for the practice part
- Scientific papers and articles, which can be downloaded by the Faculty network
- e-Learning tools available on the moodle-based course web site
Links to further information
Office hours
See the website of Alessandro Ricci
See the website of Stefano Mariani