Operating systems ii

A.Y. 2019/2020
Overall hours
Learning objectives
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
Course syllabus and organization

Single session

Lesson period
First semester
Course syllabus
PARTE I: Virtualization
Introduction to operating systems: principles, history and
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
Paging, and Paged Segmentation
The swap space
PART II: Concurrency
Threads: concept and implementation
Thread management APIs
The mutual exclusion problem
Condition variables
The producer/consumer problem
The dining philosophers problem
Deadlock and its solutions
PARTE III: persistence
I/O Devices
Hard Disk
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.
Teaching methods
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.
Teaching Resources
For the theory part --> https://dbruschiso1.ariel.ctu.unimi.it
For the laboratory --> https://mameli.docenti.unimi.it/solab

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.
Unità didattica Laboratorio
Laboratories: 48 hours
Professor: Monga Mattia
Unità didattica Lezioni
Lessons: 24 hours
send an email to danilo[dot]bruschi[at]unimi[dot]it
Room P115, Via Comelico
By appointment only
Office 5004, Via Celoria 18, Milan