28020 - SISTEMI OPERATIVI T (A-K)

Anno Accademico 2020/2021

  • Docente: Anna Ciampolini
  • Crediti formativi: 9
  • Lingua di insegnamento: Italiano

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
Organizzazione di un Sistema Operativo
  • 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
Processi e Thread
  • 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
Scheduling della CPU
  • 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
Interazione tra processi mediante memoria condivisa
  • il problema della sincronizzazione tra processi
  • sezione critica e mutua esclusione
  • i semafori
  • strumenti hardware per la sincronizzazione: test-and-set
Interazione tra processi mediante scambio di messaggi:
  • comunicazione diretta/indiretta,simmetrica/asimmetrica, buffering
  • interazione tra processi Unix: pipe e fifo, sincronizzazione tramite segnali
Gestione del File System
  • 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
Gestione della Memoria
  • 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
Programmazione shell
  • Introduzione alla Linux bash shell
  • comandi come filtri
  • Piping e ridirezione
  • Espansione metacaratteri
  • Strutture di controllo
  • Sviluppo di file comandi
Programmazione Concorrente
  • 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
Gestione dell'I/O
  • 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

    Istruzione di qualità Imprese innovazione e infrastrutture

    L'insegnamento contribuisce al perseguimento degli Obiettivi di Sviluppo Sostenibile dell'Agenda 2030 dell'ONU.