ID-pic

Teaching


Operating Systems Programming (LI356) & Advanced Operating Systems Programming (MI014)

These courses present the POSIX standard and use the main system calls to explain the principles of an operating system and to show how to build efficient programs based on classic OS services. The introductory course focuses on process creation and local IPC: signals, tubes, files, semaphores, message queues, and shared memory. The advanced course puts an emphasis on the realtime aspects of an OS (multithreading, adaptive scheduling, real-time signals, asynchronous I/O, clocks and timers) and on network programming (ie. socket programming)
Two thirds of the lectures consist of lab sessions, where students can get hands-on experience under the supervision of the teaching staff.
A good knowledge of the C language is required before applying to any of these courses.

Deployment of Concurrent Objects (LI387)

This course explores the fundamental notions of distributed programming in the context of asynchronous networks such as the Internet. Such notions include: networking protocols (TCP, UDP, Multicast), agreement and transactions, and basic mechanisms for failure detection and recovery. Several middleware platforms (RMI, CORBA, and EJBs) are used to illustrate and experiment on these notions.
Students who wish to apply for this course must be proficient in Java and must have a minimal experience of concurrent programming (ie. Java multithreading and monitors)

Distributed Algorithms (MI048) & Advanced Distributed Algorithms (NI402)

These courses explore the algorithmic problems that arise when a computation gets distributed among several nodes. The introductory course limits the context to message-passing solutions (ie. no distributed shared memory) in failure-free environments. Among other issues, it delves into the construction of causal relationships, wave algorithms for information diffusion, termination detection, and global state recording. The advanced course extends the context to failure-prone (aka. real) environments, and aims at covering the main theoretical approaches for failure detection, distributed consensus, reliable diffusion, and fault tolerance (including but not limited to: checkpointing, replication, and self-stabilisation)
Students who wish to apply for this course must have a solid background with respect to the theory of computation.