The aim of the course is to allow students to know the role, the purpose and the main functionalities and features of operating systems, making them able to understand and develop elementary software functions employable in the context of the operating system. At the end of the course, the student will be able to: 1. Know the historical evolution of operating systems, having the ability to understand the motivations and necessities behind such an evolution. 2. Know the main functionalities of operating systems, having the ability to recognize, among possible implementations of a given functionality, the one that fits better in a given applicative context. 3. Know the principles of process environment and of concurrency, having the ability to deeply understand their detailed implementation. 4. Know the criticisms of process synchronization, having the ability to develop code requiring to dealing with such problems. This ability will be refined by solving and discussing exercises. 5. Understand the principles of the organization of a program in thread, having the ability of developing software organised in concurrent threads. This ability will be refined by solving and discussing exercises. The student will be also required to develop an autonomy of judgement in recognising the main challenges of the organisation of code in processes or threads and the choice of the techniques needed to get the sound behaviour from a system. Finally, the student will get a proper knowledge of (possibly standard) technical terminology used in the context of Operating Systems.
Course Prerequisites
It is required the ability to write code in some imperative high level programming language: the student should properly use the main constructs of high level programming languages, and has perfectly clear in mind the notions of compiler, interpreter, static error and runtime error. Moreover, it is required the knowledge of the main components of the hardware, in particular the role of CPU, RAM, Unit Control and ALU; the student must know the notion of instruction set and be able to write down simple programs in assembly, possibly with recursive procedures. The knowledge and abilities needed for successfully attending this course are delivered in the fundamental courses of Programmazione and Architetture degli Elaboratori, which, therefore, are mandatory prerequisites.