Information on the other part of the course is available on the
maintained by G. Lettieri.
The course is aimed at providing students with a comprehensive
vision of the foundations of concurrent and distributed
programming. The main focus of the lectures is on system
models and on different types of frameworks intended to
support the development of concurrent systems at different
abstraction levels and on different underlying platforms.
Students will acquire the basic skills to participate in the
design, implementation and integration of concurrent and
distributed software systems, possibly made of heterogeneous
Prerequisites: knowledge of Operating Systems basics, and
mastering of Java and C/C++.
The dates for oral exams are reported on the
website of the School
Students are required to
register through the Exam
Sign-in Portal at least two days before the exam
First lecture on Wed. Sept. 26th, 2018
ADII 2 (usually, Bechini); Tue. 14:30-16:30 ADII 1
(usually, Bechini); Wed. 8:30-10:30 ADII 1 (usually,
Bechini); Thu. 13:30-15:30 ADII 2 (usually, Lettieri)
The lectures' schedule and relative updates, as well as
exam dates, are available on a public Google
Cal, which can be imported with the following ICS
A detailed description is available via the record of
lessons (see the left menu item).
Hereafter, a cathegorized list of topics can be
The final test is organized as follows:
a) development of a project; specifications must
be agreed upon with the teacher; the finalized work must be
shown to the teacher for final approval prior to the oral exam (not in
the same date)
b) oral exam (possibly with written exercises), on
all the topics covered by the course.
All the course contents are covered within the textbooks and
other material reported hereafter. These references can also
be taken as suggestions for in-depth discussions on class
System Concepts 9th ed.
Authors Abraham Silberschatz, Peter B.
Galvin, Greg Gagne
A classical resource on OSs,
synchronization problems as well.
Systems - Concepts and Design 5th ed.
Authors George Coulouris, Jean Dollimore,
Tim Kindberg, Gordon Blair
A comprehensive overview of
both theoretical and architectural issues.
Provided after each lab session.
- CW01 (data
races, ThreadLocal, AtomicInteger, Peterson)
(bounded buffer with condition variables and
- CW03 (task
executors, thread pooling, futures)
- CW04 (periodic
task scheduler, benchmarking)
- CW05 (unit testing,
- CW06 (multiple
projects - RMI example)
- CW07 (basic use of
- CW08 (multiple projects - stateless/stateful session EJBs)
- CW09 (JEE global project with JMS communication and Message-driven EJB)
- CW10 (Simple Maven project in NetBeans)
S1/2/3/4 - Slides on related topics, available
on the web: Generics,
S5 - Slides on Java
Executor Framework (from a course at the Univ.
W1 - Tutorial on Java
High Level Concurrency Objects (not all details
have been mentioned at lesson)
for those who want to delve into the "Double-checked locking" trick.
C1/2 - Java code for examples of non-blocking
stack and Michael/Scott's
W3 - Tutorial on MPI
(from Lawrence Livermore National Lab; here,
another nice one).
W4 - Online paper on issues in
W5 - Tutorial on Java
RMI (for "general" distributed objects: Java
S6 - Slides (commercial-style presentation) on
Akka and the related Actor model.)
W6 - Tutorial on Java
EE - massive official document: only Servlets
(no asynch mode), EJBs, and JMS are in our syllabus
The following web references can be useful for practical
L1 - NetBeans
L2 - Eclipse
L3 - Cheat
sheet for JCF
L4 - MPI
L5 - Akka
L6 - Maven slides
The backgroung images for this page have been obtained
by reworking the "simple icons" for AWS