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 oral exam planned for June 28th, 2018 has been rescheduled on
July 3rd, 2018 h. 9:00 am - room: ADII 2 (lab Blu).
As usual, the exam requires prior booking on the
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 Mon. Sep. 25th, 2017
ADII 1 (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.
The main reference material is represented by class notes.
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 (RMI example)
- CW07 (basic use of
- CW08 (4 projects - stateless/stateful session EJBs)
- CW09 (JEE project with JMS communication and Message-driven EJB)
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 - Online paper on issues in
C3 - Pseudocode
for a Bounded Buffer solution with asynchronous
W3 - Tutorial on MPI
(from Lawrence Livermore National Lab; here,
another nice one).
W4 - Tutorial on Java
RMI (for "general" distributed objects: Java
W5 - 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
L7 - Slides on the Clojure language - introduction
, and concurrency approaches
The backgroung images for this page have been obtained
by reworking the "simple icons" for AWS