These webpages collect some didactic material that I have been preparing for my courses, with slides for my lectures, and with some assignments proposed to my students. Notice that the material below is organized by topic, not by course. This way, students can easily find additional supplementary material for their courses.
Operating Systems and Computer Networks
This section contains the didactic material related to some courses that I'm currently giving at University of Rennes 1, where the main focus is on Operating Systems and Computer Networks. For some colleagues, these two topics cannot be separated, because strictly related, and I agree, myself I'm putting them together in this section. However, for organization reasons at my University, I cannot always teach these two topics in one single course. If you are one of my students to which I'm only teaching about Operating Systems, you may want to give a look at the material concerning the Computer Networks for curiosity.
The Operating System part generally focuses on the topics given, and interconnected, as in the following graph structure.Operating Systems
This course begins with the notion of bit of information and it develops, step by step, and mainly from a theoretical point of view, the various components of a computer machine. We will go through logic circuits for implementing basic operations (such as logic and arithmetic operations), but also for temporarily storing data. We will "construct" our first processor, which will actually initially resemble to a very primitive processor, but with the inclusion of cache memories and independent cores, it will look more and more like a real modern processor. Memory is an important issue in modern computers, because of their multi-tasking nature: a large part of this course will in fact be devoted to the main principles behind the implementation of the so-called virtual memory.
Logic circuits are at the basis of the several operations that our processors can perform. In many situations, we do not need to worry about them, in the sense that those logic circuits are already implemented in the CPUs at hardware level, and it may look like that knowing about them may simply reduce to personal curiosity. But actually there exist situations where an implementation at software level of logic circuits can potentially improve the performances of our programs.Assignments on data representation and logic circuits:
Memory actually appears at several levels in our computer machines. The CPU itself is equipped with a very little memory that we call the registers, where the data need to transit in order to be processed. The virtual memory instead contains the data related to the programs that are currently running on the machine. See these handcrafted slides for some information on the main principles governing the implementation of virtual memory in modern computer machines. Between the CPU registers and virtual memory, there are other levels of memory. We can in general talk about cache memory, which has the main task to keep, in a place where the CPU can have a fast access to it, the data that will most likely be requested by CPU in its next steps.Assignments on cache memory and virtual memory:
Another important concept in Operating Systems is their multi-tasking, or multi-threading, nature. Since the very beginning, several attempts have been done to give at least the illusion to the final user that the computer machine is able to perform several tasks at the same time. Nowadays, this is not anymore just an illusion: our more recent CPU devices are composed by several cores, which are able to perform operations independently from each other, by allowing therefore for a primitive kind of parallelism. Things can happen in parallel on our computer machines, even when equipped with only one processor.Assignments on multi-threading:
The part about Computer Networks begins with a short schematic and historical view of such networks. Emphasis is given to the lowest network layers, because closer to the Operating System.
Assignments on computer networks:
Finally, it is important to give some emphasis to the way the users can interact with the computer machines, and in particular with the Operating Systems that is able to control the machine. Whenever you're reading this webpage on your laptop or smartphone, the medium that allows you to establish the "communication" is your browser. Another, more efficient, and bi-directional, way to communicate with the computer machine is via the shell provided by the Operating System.
Notice that these same slides were used in the past to teach Bash Scripting to non-informaticians. They may look a little naive to the more expert reader. Some exercises on Bash scripting are proposed in this document (a translation in French of the document is also available).Evaluations
This is an example of Quiz given at the exam in December 2019 for the Operating System class. Consider that the course program has evolved since 2019.
Below are the slides I have used for some lectures that I gave in the past years.
I'm currently affiliated to a department of Computer Science where there is no much space, in the proposed teaching programs, to numerical analysis. Here below a collection of slides to some short lectures that I gave some years ago.
Teaching the topics related to performed research activities is very important for a researcher. Below some slides with a short introduction to bioinformatics, which subsequently focus on my main research activities (last update on October 2016).
Some exercises on distance geometry and the discretization assumptions are proposed after the lecture.