Concurrent Systems covers the principles and practice of shared-memory multiprocessor programming, based on The Art of Multiprocessor Programming. The theory runs from mutual exclusion and the correctness and progress of concurrent objects (linearizability, lock- and wait-freedom), through consensus and the relative power of synchronization primitives, to practical techniques: spin locks and contention, fine-grained and lock-free data structures, data races and deadlocks, and transactional memory. In a semester-long group project, students design, implement, test and evaluate a concurrent system, from lock-free data structures and synchronization primitives to memory reclamation and analysis tools. They develop it in checkpointed phases, review each other’s work, present it publicly, and defend it individually. The course aims to make students able to reason rigorously about concurrent algorithms and to build, measure and justify efficient, correct concurrent software.
Computer Architecture2nd semester · BSc
Computer Architecture is a first-year course on how computers work, from the representation of information to the execution of programs by the hardware. It covers digital representation of data (integers and their operations, floating point, text and Unicode), C programming, the RISC-V instruction set and assembly language (including procedure calls and the call stack), and the translation from C to assembly and machine code. It then turns to processor organization (the datapath, pipelining and its hazards), the memory hierarchy (caches and virtual memory), and input/output. In the practical classes, students write weekly exercises and programming projects in C and RISC-V assembly. Assessment combines regular Moodle quizzes, the projects and tests about them, and written theory tests. The course aims to give students a solid understanding of the hardware/software interface and of how architecture affects program behaviour and performance.
2025/26
Computer Systems and Networks1st semester · PhD
Lecturing a module on Concurrency.
Concurrent Systems1st semester · MSc
Concurrent Systems covers the principles and practice of shared-memory multiprocessor programming, based on The Art of Multiprocessor Programming. The theory runs from mutual exclusion and the correctness and progress of concurrent objects (linearizability, lock- and wait-freedom), through consensus and the relative power of synchronization primitives, to practical techniques: spin locks and contention, fine-grained and lock-free data structures, data races and deadlocks, and transactional memory. In the practical classes, students solve exercises that put these concepts into practice and develop a project in groups of two: implementing and evaluating a concurrent algorithm or system. The course aims to make students able to reason rigorously about concurrent algorithms and to build correct, efficient concurrent software.
Computer Architecture2nd semester · BSc
Computer Architecture is a first-year course on how computers work, from the representation of information to the execution of programs by the hardware. It covers digital representation of data (integers and their operations, floating point, text and Unicode), C programming, the RISC-V instruction set and assembly language (including procedure calls and the call stack), and the translation from C to assembly and machine code. It then turns to processor organization (the datapath, pipelining and its hazards), the memory hierarchy (caches and virtual memory), and input/output. In the practical classes, students write weekly exercises and programming projects in C and RISC-V assembly. Assessment combines regular Moodle quizzes, the projects and tests about them, and written theory tests. The course aims to give students a solid understanding of the hardware/software interface and of how architecture affects program behaviour and performance.
2024/25
Computer Systems and Networks1st semester · PhD
Concurrent Systems2nd semester · MSc
Concurrent Systems covers the principles and practice of shared-memory multiprocessor programming, based on The Art of Multiprocessor Programming. The theory runs from mutual exclusion and the correctness and progress of concurrent objects (linearizability, lock- and wait-freedom), through consensus and the relative power of synchronization primitives, to practical techniques: spin locks and contention, fine-grained and lock-free data structures, data races and deadlocks, and transactional memory. In the practical classes, students solve exercises that put these concepts into practice and develop a project in groups of two: implementing and evaluating a concurrent algorithm or system. The course aims to make students able to reason rigorously about concurrent algorithms and to build correct, efficient concurrent software.
Curricular Development Activity1st semester · BSc
2023/24
Computer Systems and Networks1st semester · PhD
High Performance Computing1st semester · MSc
Informatics for Sciences and Engineering E2nd semester · BSc
Introduction to Programming for Science and Engineering1st semester · BSc
2021/22
Computer Systems and Networks1st semester · PhD
Concurrency and Parallelism2nd semester · MSc
Big Data Processing Systems1st semester · MSc
Foundations of Operating Systems1st semester · BSc
2020/21
Computer Systems and Networks1st semester · PhD
Concurrency and Parallelism2nd semester · MSc
Big Data Processing Systems1st semester · MSc
Computer Architecture1st semester · BSc
2019/20
Computer Systems and Networks1st semester · PhD
Scientific Text Processing with LaTeX· Doctoral School · PhD
Co-lectured with José Alferes and João Leitão.
Concurrency and Parallelism2nd semester · MSc
Big Data Processing Systems1st semester · MSc
Computer Architecture2nd semester · BSc
2018/19
Computer Systems and Networks1st semester · PhD
Scientific Text Processing with LaTeX· Doctoral School · PhD
Co-lectured with José Alferes and João Leitão.
Concurrency and Parallelism1st semester · MSc
Computer Architecture2nd semester · BSc
2017/18
Transactional Systems1st semester · PhD
Scientific Text Processing with LaTeX· Doctoral School · PhD
Co-lectured with José Alferes and João Leitão.
Concurrency and Parallelism1st semester · MSc
Computer Architecture2nd semester · BSc
2016/17
Transactional Systems1st semester · PhD
Scientific Text Processing with LaTeX· Doctoral School · PhD
Co-lectured with José Alferes and João Leitão.
Scientific Text Processing with LaTeX· Doctoral School · PhD
Co-lectured with José Alferes and João Leitão.
Concurrency and Parallelism1st semester · MSc
Computer Architecture2nd semester · BSc
2015/16
Transactional Systems1st semester · PhD
Scientific Text Processing with LaTeX· Doctoral School · PhD
Co-lectured with José Alferes and João Leitão.
Scientific Text Processing with LaTeX· Doctoral School · PhD
Co-lectured with José Alferes and João Leitão.
Concurrency and Parallelism1st semester · MSc
2014/15
Transactional Systems1st semester · PhD
Scientific Text Processing with LaTeX· Doctoral School · PhD
Co-lectured with José Alferes and João Leitão.
Scientific Text Processing with LaTeX· Doctoral School · PhD
Co-lectured with José Alferes and João Leitão.
Concurrency and Parallelism1st semester · MSc
Computer Architecture2nd semester · BSc
2013/14
Transactional Systems1st semester · PhD
Concurrency and Parallelism1st semester · MSc
Computer Architecture2nd semester · BSc
2012/13
Operating Systems2nd semester · MSc
Integrative Project2nd semester · BSc
Cross-cutting Skills for Science and Technology1st semester · BSc
Introduction to Computer Systems and Networks1st semester · BSc
2011/12
Transactional Systems1st semester · PhD
2010/11
Transactional Systems1st semester · PhD
Integrative Project2nd semester · BSc
2009/10
Operating Systems1st semester · MSc
Computer Architecture2nd semester · BSc
2008/09
Introduction to Computer Systems and Networks1st semester · BSc
2007/08
Advanced Topics in Parallel and Distributed Computing1st semester · MSc
Introduction to Computer Systems and Networks1st semester · BSc
2006/07
Advanced Topics in Parallel and Distributed Computing2nd semester · MSc
Operating Systems2nd semester · MSc
Introduction to Computer Systems and Networks1st semester · BSc
2005/06
Advanced Topics in Parallel and Distributed Computing2nd semester · MSc
Operating Systems2nd semester · Lic
Parallel and Distributed Computing Systems1st semester · Lic
2004/05
Advanced Topics in Parallel and Distributed Computing2nd semester · MSc
Operating Systems2nd semester · Lic
Parallel and Distributed Computing Systems1st semester · Lic
2003/04
Operating Systems2nd semester · Lic
Parallel and Distributed Computing Systems1st semester · Lic
2002/03
Computer Systems and Architecture III1st semester · Lic
2001/02
Operating Systems2nd semester · Lic
Computer Systems and Architecture III1st semester · Lic
2000/01
Operating Systems2nd semester · Lic
1999/00
Operating Systems2nd semester · Lic
Computer Systems and Architecture III1st semester · Lic
1995/96
Operating Systems2nd semester · Lic
Computer Systems and Architecture III1st semester · Lic
1994/95
Operating Systems2nd semester · Lic
Advanced Operating Systems1st semester · Lic
Computer Systems and Architecture II1st semester · Lic
1993/94
Operating Systems2nd semester · Lic
Advanced Operating Systems1st semester · Lic
Computer Systems and Architecture II1st semester · Lic
1992/93
Operating Systems2nd semester · Lic
Advanced Operating Systems1st semester · Lic
Computer Systems and Architecture II1st semester · Lic