Knowledge and understanding: Upon completion of the course, the student will have acquired the knowledge of the basic concepts inherent to the design of operating systems and the writing of programs that exploit System Calls in Linux / UNIX environment. At the end of the course the students: will have acquired knowledge of the structure of Operating Systems; the relevant project issues and policies used for virtualization and the management of resources (CPU, main memory, mass storage, peripherals); will have acquired knowledge about the concepts of process and thread and their management; will have acquired knowledge on management techniques of mutually exclusive resources; will have become familiar in the interaction with the Linux shell.
Applying knowledge and understanding: at the end of the course the students will be able to write applications containing system calls for the: creation and management of processes; send / signal management; interaction and communication between processes; manage competition over shared resources; creation of multithreaded applications.
Making judgements. On completion of the course, the student will be able to choose a suitable software solution based on Linux API for each of the subjects treated inside the course.
Communication skills. On completion of the course, the students can communicate their conclusions and recommendations about the design and use of the operating systems with the argumentation of the knowledge and rationale underpinning them, to both specialist and non-specialist audiences clearly and unambiguously.
Learning skills. On completion, the student will be able to continue to study in a manner that may be largely selfdirected or autonomous.
The course is essentially based on lectures, which include the development of exercises by the teacher. The proposed exercises are addressed by the teacher through the use of computer connected to the projector. The course also includes practical exercises carried out by the students. These exercises are carried out in the University's multimedia rooms. Each student is assigned a task that must be performed on the computer. The teacher supervises the work of the students by providing the explanations and teaching aids necessary to complete the assigned tasks. The methods of carrying out the teaching described above allow the achievement of the pre-established training objectives, which include the acquisition of knowledge and the ability to apply knowledge.
If the teaching is given in a mixed or remote way, the necessary changes with respect to what was previously stated may be introduced, in order to respect the program envisaged and reported in the syllabus.
Asterisks (*) indicate the minimum skills.
Operating Systems Introduction
Operating systems concepts. Kernel. (*)
History and classification of operating systems.
GNU/Linux. (*)
Operating systems structures: monolythic, microkernel, hybrid, client/server.
The POSIX standard. (*)
System calls. (*)
Operating systems structure. Multiprocessor OS structure. (*)
Virtualization. Virtual machines. Hypervisors: level 1 and 2. WMware and Virtual Box.
Linux shell commands. (*)
Shell programming.
Processes and Threads
Processes, Threads. (*)
Signals and signal handling.(*)
Thread implementation. POSIX threads. The pthread.h library. (*)
Scheduling. (*)
Real-time systems scheduling.
Linux scheduling. Completely Fair Scheduler.
Concurrency.
Critical regions. Race conditions. Mutual exclusion. Busy waiting. Semaphores and Mutexes. Program examples. (*)
Interprocess Communications
Message queues, Shared memory. (*)
Classical IPC problems. Program examples. (*)
Client/server model. Sockets. (*)
Deadlocks
Deadlock characterization, detection, prevention, avoidance. (*)
File Systems.
File. Directories. (*)
Case Studies
Linux (*)
1) Theory: Abraham Silberschatz, Peter Baer Galvin, Greg Gagne, “Sistemi Operativi, Concetti e esempi”, Nona Edizione, Pearson, ISBN 9788865183717.
Alternative option for theory: Andrew S. Tanenbaum, “I moderni sistemi operativi 4/Ed.", 2016, ISBN 9788891901019.
2) Programming part: R. Stones, N. Matthew, “Beginning Linux Programming”, 4th edition, Wrox Press, 2007. Disponibile in rete