SISTEMI OPERATIVI | Università degli studi di Bergamo - Didattica e Rubrica

SISTEMI OPERATIVI

Modulo Generico
Codice dell'attività formativa: 
21061-MOD1

Scheda dell'insegnamento

Per studenti immatricolati al 1° anno a.a.: 
2022/2023
Insegnamento (nome in italiano): 
SISTEMI OPERATIVI
Insegnamento (nome in inglese): 
OPERATING SYSTEMS
Tipo di attività formativa: 
Attività formativa Caratterizzante
Tipo di insegnamento: 
Obbligatoria
Settore disciplinare: 
SISTEMI DI ELABORAZIONE DELLE INFORMAZIONI (ING-INF/05)
Anno di corso: 
2
Anno accademico di offerta: 
2023/2024
Crediti: 
6
Responsabile della didattica: 

Altre informazioni sull'insegnamento

Ciclo: 
Secondo Semestre
Obbligo di frequenza: 
No
Ore di attività frontale: 
48
Ore di studio individuale: 
90
Ambito: 
Ingegneria informatica
Prerequisiti

Nozioni base della programmazione ad oggetti (ad esempio nel linguaggio Java); uso di editor e compilatori.

Obiettivi formativi

Al termine del modulo, lo studente acquisisce le conoscenze di base su come funziona e come viene progettato e sviluppato il software dei Sistemi Operativi. Inoltre, mediante opportune lezioni frontali ed esercitazioni, lo studente acquisirà le conoscenze di base della programmazione concorrente e multi-thread mediante il linguaggio Java.

Contenuti dell'insegnamento

Principi teorici, architetture, funzionamento e politiche di gestione dei sistemi operativi, elementi di base di programmazione concorrente.

Argomenti del corso:
Architettura, funzionalità, gestione dei processi (creazione, sincronizzazione e comunicazione), multi-threading, politiche di schedulazione della CPU, gestione del deadlock, gestione della memoria (swapping, paginazione, segmentazione, ecc.), memoria virtuale (algoritmi di sostituzione delle pagine), gestione dei comuni dispositivi di I/O, file system (struttura e implementazione), protezione e sicurezza, programmazione multi-thread e sincronizzazione nel linguaggio Java.

L'ultimo argomento, in particolare, sarà affrontato con delle ore di esercitazione mirate che comprenderanno i seguenti sotto-argomenti: multi-threading nella piattaforma Java (oggetti thread, definizione e avvio di un thread, sospensione e interruzione di un thread, thread join), interferenza di thread ed errori di coerenza della memoria, problemi di sincronizzazione e di mutua esclusione, proprietà di un programma (no starvation, no deadlock, livelock), tipici problemi di concorrenza (produttore-consumatore, lettore-scrittore, i filosofi a cena, distributore di lattine, ecc.), meccanismi di sincronizzazione e loro realizzazione pratica con la libreria java.util.concurrent (semafori, blocchi di oggetti intrinseci e sincronizzati metodi/blocchi, oggetti di blocco e variabili di condizione), idiomi di coordinamento (blocchi protetti, blocco, accesso atomico). Ogni argomento è illustrato con esempi pratici di codice come soluzioni a problemi tipici di concorrenza ed esercizi guidati.

Metodi didattici

La didattica si svolgerà tramite lezioni frontali in aula, esercitazioni pratiche e ore di tutorato in laboratorio.

Modalità verifica profitto e valutazione

L'esame prevede una prova scritta. La prova scritta comprende 4 domande a risposta aperta (tre sulla parte di teoria del corso, e una sulla parte di programmazione concorrente in Java). La prova scritta dura due ore.

Viene ammesso all'orale solo chi consegue un punteggio superiore a 18/30. La prova orale è opzionale e consiste nella discussione della prova scritta. Il voto finale dell'intero corso integrato è dato dalla media aritmetica (in trentesimi) conseguiti nei due moduli.

Altre informazioni

In caso di disposizioni dell’autorità competenti in materia di contenimento e gestione dell’emergenza epidemiologica, l'insegnamento potrebbe subire modifiche rispetto a quanto dichiarato nel syllabus per rendere il corso e gli esami in linea con quanto disposto.

Prerequisites

Basic notion of object-oriented programming (like Java). Ability to use editors and compilers.

Educational goals

At the end of this module, the student gains knowledge about fundamental design and implementation ideas in engineering software for operating systems. Through appropriate lectures and labs, the student will also acquire the basic knowledge of concurrent programming and multi-threading using the Java programming language.

Course content

Theoretical principles, architecture styles, functionality and management policies of operating systems; basic introduction to concurrent programming with the Java language.

Topics covered: process management (creation, synchronization, and communication); processor scheduling; deadlock prevention, avoidance, and recovery; main-memory management; virtual memory management (swapping, paging, segmentation and page-replacement algorithms); control of disks and other input/output devices; file-system structure and implementation; and multi-threading and synchronization aspects in the Java programming language. The last topic include the sub-tpics: multi-threading in the Java platform (Thread objects, defining and starting a thread, pausing and interrupting a thread, thread joins), thread interference and memory consistency errors, synchronization and mutual exclusion problem, liveness properties of a program (starvation, deadlock, livelock), typical concurrency problems (producer-consumer, readers-writer, the dining philosophers, the coke machine, etc.), synchronization mechanisms and their practical realization with the package library java.util.concurrent (semaphores, intrinsic object locks and synchronized methods/blocks, lock objects and condition variables), coordination idioms (guarded blocks, locking, atomic access). Each of these sub-topic is illustrated with practical code examples as solutions to typical concurrency problems and guided exercises in labs.

Teaching methods

Learning takes place through lectures, practical exercises and tutoring.

Assessment and Evaluation

The exam includes a written test. The written test includes 4 open-ended questions (3 exercises on the theoretical aspects of the course, and one exercise on the cuncurrent programming in Java). The written test lasts two hours.

Only those who obtain a score higher than 18/30 are admitted to the oral test. The oral test is optional and it consists in the discussion of the written test. The final mark of the overall integrated course is given by the average sum of the scores achieved in the two modules.

Further information

In case of epidemiological emergencies, the teaching and exam methods could change according to the measures of the competent authorities.