The course will allow the student to understand the main concepts underneath the realization of an operating system, its main functionalities and to acquire mastery in the use of the main API of the Linux operating system. In order to provide students with a better understanding of the different topics addressed, the study of the main components of an educational operating system will be addressed.
Expected learning outcomes
At the end of the course the student will be able to: identify the main features of an operating system, evaluate its criticalities and strengths, write programs that use the main operating system APIs, read and comment on the code of a real operating system
PARTE I: Virtualization Introduction to operating systems: principles, history and structures CPU Virtualization Processes: notion and implementation Process Management APIs Processes Scheduling Algorithms Memory Virtualization The notion of Address Space Address Translation Techniques Memory management APIs The memory manager Segmentation Paging, and Paged Segmentation The TLB The swap space PART II: Concurrency Threads: concept and implementation Thread management APIs The mutual exclusion problem Locks Condition variables Semaphores The producer/consumer problem The dining philosophers problem Deadlock and its solutions PARTE III: persistence I/O Devices Hard Disk RAID The File system Files & Directory Implementing a simple file system FSCK and Journaling Parte IV: JOS Kernel Bootstrap in JOS Virtual Memory Management Process Management Interrupt/exceptions management JOS system calls
A detailed list of the topics covered, lesson by lesson, is published and updated on the course's website.
Prerequisites for admission
Write programs, preferably in C language, of medium difficulty that use elementary dynamic data structures (lists and queues) with particular emphasis on the use of pointers. Know the main components of a computer, their operating principles and the methods of interaction between them with particular emphasis on the hardware-software interface (exceptions, interrupts). Write and execute elementary programs in Assembler language. Passing the Programming exam is preparatory to the teaching of Operating Systems I. It is also strongly recommended to pass the Computer Architecture exam.
The theoretical part of the course is carried out through lectures in the classroom. The laboratory part alternates lectures with exercises and practical activities carried out individually.
TEXTBOOK: Remzi H. Arpaci-Dusseau and Andrea C. Arpaci-Dusseau, "Operating Systems: Three Easy Pieces", (https://ostep.org)
Supplementary material for part IV of the course and for the laboratory part, available on the course website:
- Programmer's Reference Manual Intel 386 - xv6: a simple Unix-like teaching operating system - xv6 source code - System Programming Guide - Part I by Intel Corporation - System Programming Guide - Part II by Intel Corporation
Additional supplementary material, prepared by the teachers, is made available on the course website.
Assessment methods and Criteria
The exam consists of a written test, a laboratory test and an oral test. In the two-hour written test, 20 multiple choice questions are proposed and two exercises are required to be solved which require the use and knowledge of the following topics: concurrent programming with the use of Pthread, Linux' APIs, and the JOS's kernel. Passing the written test allows access to the oral test which concerns the discussion of some of the topics covered during the theoretical lessons held in the classroom. At the end of the oral test, a first evaluation expressed in thirtieths is formulated, taking into account the following parameters: degree of knowledge of the topics, ability to apply knowledge to the resolution of concrete problems, ability of critical reasoning, clarity of exposition. The laboratory test takes place independently of the written and oral tests, its duration of about 2 hours requires the carrying out of 3 exercises: partitioning of a mass memory, writing of a shell script, kernel programming exercise in JOS. At the end of the laboratory test, a further evaluation out of thirty is made taking into account the following parameters: ability to apply the acquired notions to real and concrete situations, degree of depth of the topics covered. At the end of the three tests, the overall evaluation is expressed in thirtieths obtained as a weighted average of the marks obtained in the written / oral and laboratory tests. The weight assigned to the former is 2/3 that assigned to the latter is 1/3.