- Docente: Anna Ciampolini
- Crediti formativi: 9
- Lingua di insegnamento: Italiano
- Moduli: Anna Ciampolini (Modulo 1) Anna Ciampolini (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
SDGs
L'insegnamento contribuisce al perseguimento degli Obiettivi di Sviluppo Sostenibile dell'Agenda 2030 dell'ONU.