- Docente: Anna Ciampolini
- Crediti formativi: 9
- Lingua di insegnamento: Italiano
- Moduli: Anna Ciampolini (Modulo 1) Andrea Galassi (Modulo 2)
- Modalità didattica: Convenzionale - Lezioni in presenza (Modulo 1) Convenzionale - Lezioni in presenza (Modulo 2)
- Campus: Bologna
-
Corso:
Laurea in
Ingegneria informatica (cod. 9254)
Valido anche per Laurea in Ingegneria elettronica e telecomunicazioni (cod. 0923)
Laurea in Ingegneria elettronica e telecomunicazioni (cod. 0923)
Laurea in Ingegneria informatica (cod. 9254)
Conoscenze e abilità da conseguire
Conoscenza dei principi di organizzazione e di funzionamento dei moderni sistemi operativi. Conoscenza e capacità di applicazione degli strumenti per lo sviluppo di applicazioni di sistema.
Contenuti
Introduzione ai sistemi operativi:
- Che cos'è un sistema operativo: ruolo, funzionalità e struttura
- Evoluzione dei sistemi operativi: batch, multiprogrammazione, time-sharing
- Richiami sul funzionamento di un elaboratore: interruzioni e loro gestione, I/O, modi di funzionamento single e dual, system call
- Funzionalità
- Struttura: sistemi monolitici e modulari, sistemi stratificati, macchina virtuale
- Organizzazione e funzionalità del sistema operativo UNIX/Linux
- Organizzazione e funzionalità del sistema operativo MSWindowsXP
- Il concetto di processo pesante/leggero e sua rappresentazione nel sistema operativo
- Stati di un processo
- Gestione dei processi leggeri/pesanti da parte del SO
- Operazioni sui processi
- Classificazione dei processi
- La gestione dei processi in UNIX/Linux:
- stati, rappresentazione, gestione (scheduling), operazioni e comandi relativi ai processi
- Concetti generali: code, preemption, dispatcher
- Criteri di scheduling
- Algoritmi di scheduling: FCFS, SJF, con priorità, round-robin, con code multiple, …
- Scheduling in UNIX, Linux e WinXP
- il problema della sincronizzazione tra processi
- sezione critica e mutua esclusione
- i semafori
- strumenti hardware per la sincronizzazione: test-and-set
- comunicazione diretta/indiretta,simmetrica/asimmetrica, buffering
- interazione tra processi Unix: pipe e fifo, sincronizzazione tramite segnali
- file system e sua realizzazione
- il file system di UNIX:
- organizzazione logica e fisica, comandi e system call per la gestione e l'accesso a file/direttori
- spazi degli indirizzi e binding
- allocazione della memoria contigua:
- a partizione singola e partizioni multiple; frammentazione;
- allocazione non contigua:
- paginazione, segmentazione
- memoria virtuale
- gestione della memoria in UNIX/Linux
- Introduzione alla Linux bash shell
- comandi come filtri
- Piping e ridirezione
- Espansione metacaratteri
- Strutture di controllo
- Sviluppo di file comandi
- Il problema della mutua esclusione e possibili soluzioni.
- strumenti di sincronizzazione nel modello a memoria comune: il semaforo
- costrutti linguistici per la sincronizzazione: il monitor
- sincronizzazione tra thread java
- architettura del sottosistema di I/O
- device driver
- Gestione dei dispositivi a controllo di programma, tramite interruzioni, con DMA.
Testi/Bibliografia
P. Ancilotti, M. Boari, A. Ciampolini, G. Lipari: Sistemi Operativi, seconda edizione, McGraw-Hill, 2008.
Metodi didattici
LEZIONI (Modulo 1):
Durante le lezioni in aula verranno discussi sia gli aspetti teorici che progettuali/realizzativi dei sistemi operativi moderni. Gli argomenti trattati verranno esemplificati facendo principalmente riferimento al sistema GNU/Linux
ESERCITAZIONI (Modulo 2):
Parte integrante del corso è rappresentata dalle esercitazioni in laboratorio, svolte nel Modulo 2. Le esercitazioni sono individuali e pratiche ed hanno lo scopo di fornire la possibilitá a ogni studente di potersi misurare nello sviluppo di applicazioni di sistema in ambiente GNU/Linux e nella programmazione concorrente in Java.
Modalità di verifica e valutazione dell'apprendimento
La valutazione avviene mediante:
1. una prova scritta TEORICA sui concetti trattati a lezione;
2. una prova PRATICA/PROGETTUALE, da svolgersi in laboratorio, per verificare:
- Capacità di sviluppo di programmi di sistema e script nell'ambiente GNU/linux
- Capacità di programmazione concorrente in Java
3. Una prova orale facoltativa.
Nel periodo Giugno 2020-Febbraio 2021 gli esami si svolgeranno a distanza. Gli studenti sono pregati di attenersi strettamente alle regole per lo svolgimento degli esami a distanza, disponibili all'indirizzo: https://iol.unibo.it/mod/resource/view.php?id=441077
Strumenti a supporto della didattica
Le lezioni si svolgeranno anche con il supporto di un computer collegato ad un videoproiettore mediante il quale potranno essere esemplificati concretamente i concetti esposti.
Orario di ricevimento
Consulta il sito web di Anna Ciampolini
Consulta il sito web di Andrea Galassi
SDGs
L'insegnamento contribuisce al perseguimento degli Obiettivi di Sviluppo Sostenibile dell'Agenda 2030 dell'ONU.