Insegnamenti

 
Seleziona l'Anno Accademico:    2012/20132013/20142014/20152015/20162016/20172017/2018

IN/0108 - SISTEMI OPERATIVI

Anno Accademico 2017/2018

Docente
GIORGIO GIACINTO (Tit.)
Periodo
Primo Semestre 
Modalità d'Erogazione
Convenzionale 
Lingua Insegnamento
 



Informazioni aggiuntive

CorsoPercorsoCFUDurata(h)
[70/81]  INGEGNERIA DELLE TELECOMUNICAZIONI [81/00 - Ord. 2016]  INGEGNERIA DELLE TELECOMUNICAZIONI770
[70/83]  INGEGNERIA ELETTRONICA [83/00 - Ord. 2016]  PERCORSO COMUNE770
Obiettivi

Il corso di Sistemi Operativi ha l’obiettivo di presentare agli studenti l’organizzazione e i componenti dei moderni sistemi operativi utilizzati in diversi contesti applicativi: sistemi operativi per computer desktop o portatili, sistemi operativi utilizzati nei server in ambito industriale e all’interno delle strutture di fornitori di servizi, sistemi operativi per dispositivi mobili, sistemi operativi ‘embedded’ e per applicazioni real-time. Le lezioni teoriche saranno affiancate da esercitazioni pratiche utilizzando UNIX/Linux come caso d’esempio.
Nel dettaglio, gli obiettivi formativi, declinati secondo i Descrittori di Dublino, e in accordo con gli obiettivi formativi del Corso di Laurea Magistrale in Ingegneria delle Telecomunicazioni, sono i seguenti.

Conoscenza e comprensione:
Lo studente, al termine del corso dovrà conoscere e comprendere:
- l’architettura (componenti e funzionalità) dei sistemi operativi attualmente usati nelle diverse categorie di sistemi;
- i meccanismi di funzionamento del sistema operativo Linux/Unix;
- le caratteristiche dei sistemi operativi per dispositivi mobili, con particolare riferimento al sistema Android;
- i meccanismi per la virtualizzazione dei sistemi;
- le principali attività svolte per la progettazione e gestione di un moderno sistema operativo.

Capacità di applicare conoscenza e comprensione
Lo studente, al termine del corso, dovrà:
- saper programmare una applicazione utilizzando correttamente gli strumenti di base messi a disposizione dai sistemi operativi;
- saper usare le metodologie per configurare correttamente, anche dal punto di vista della sicurezza informatica e della privacy, un sistema operativo in base alla funzione del computer su cui è installato.

Autonomia di giudizio
Lo studente, al termine del corso, dovrà saper selezionare il sistema operativo più idoneo per una data applicazione in base ai requisiti operativi richiesti.

Abilità comunicative
Lo studente, al termine del corso, dovrà essere capace di illustrare in modo organico l’interdipendenza dei diversi moduli che compongono un sistema operativo, e il loro legame con l’architettura hardware sul quale vengono eseguti.

Capacità di apprendimento
L’evoluzione dei dispositivi mobili, e ultimamente di quelli indossabili, richiede una elevata capacità di aggiornamento autonomo. Il corso metterà gli studenti in condizioni di poter comprendere autonomamente la documentazione tecnica resa disponibile dalle comunità di sviluppatori di sistemi operativi e dalle principali aziende produttrici di software, con particolare riferimento ai sistemi open source.

Obiettivi

Il corso di Sistemi Operativi ha l’obiettivo di presentare agli studenti l’organizzazione e i componenti dei moderni sistemi operativi utilizzati in diversi contesti applicativi: sistemi operativi per computer desktop o portatili, sistemi operativi utilizzati nei server in ambito industriale e all’interno delle strutture di fornitori di servizi, sistemi operativi per dispositivi mobili, sistemi operativi ‘embedded’ e per applicazioni real-time. Le lezioni teoriche saranno affiancate da esercitazioni pratiche utilizzando UNIX/Linux come caso d’esempio.
Nel dettaglio, gli obiettivi formativi, declinati secondo i Descrittori di Dublino, e in accordo con gli obiettivi formativi del Corso di Laurea Magistrale in Ingegneria Elettronica, sono i seguenti.

Conoscenza e comprensione:
Lo studente, al termine del corso dovrà conoscere e comprendere:
- l’architettura (componenti e funzionalità) dei sistemi operativi attualmente usati nelle diverse categorie di sistemi;
- i meccanismi di funzionamento del sistema operativo Linux/Unix;
- le caratteristiche dei sistemi operativi per dispositivi mobili, con particolare riferimento al sistema Android;
- i meccanismi per la virtualizzazione dei sistemi;
- le principali attività svolte per la progettazione e gestione di un moderno sistema operativo.

Capacità di applicare conoscenza e comprensione
Lo studente, al termine del corso, dovrà:
- saper programmare una applicazione utilizzando correttamente gli strumenti di base messi a disposizione dai sistemi operativi;
- saper usare le metodologie per configurare correttamente, anche dal punto di vista della sicurezza informatica e della privacy, un sistema operativo in base alla funzione del computer su cui è installato.

Autonomia di giudizio
Lo studente, al termine del corso, dovrà saper selezionare il sistema operativo più idoneo per una data applicazione in base ai requisiti operativi richiesti.

Abilità comunicative
Lo studente, al termine del corso, dovrà essere capace di illustrare in modo organico l’interdipendenza dei diversi moduli che compongono un sistema operativo, e il loro legame con l’architettura hardware sul quale vengono eseguti.

Capacità di apprendimento
L’evoluzione dei dispositivi mobili, e ultimamente di quelli indossabili, richiede una elevata capacità di aggiornamento autonomo. Il corso metterà gli studenti in condizioni di poter comprendere autonomamente la documentazione tecnica resa disponibile dalle comunità di sviluppatori di sistemi operativi e dalle principali aziende produttrici di software, con particolare riferimento ai sistemi open source.

Prerequisiti

Sono prerequisiti necessari la conoscenza delle architetture dei calcolatori elettronici e la capacità di saper scrivere dei programmi di media complessità utilizzando il linguaggio di programmazione C, linguaggio sviluppato e usato per la programmazione di sistemi UNIX/Linux. Queste conoscenze, abilità e competenze sono di solito acquisite durante i corsi di laurea di primo livello.

Contenuti

Componenti principali di un sistema operativo ed esempi con i sistemi operativi della famiglia Linux/Unix (4 ore teoria - 2 ore esercitazione)
Processi e thread (8 ore teoria - 4 ore esercitazione)
Scheduling dei processi (3 ore teoria - 1 ora esercitazione)
Mutua esclusione, sincronizzazione e stallo dei processi (6 ore teoria - 2 ore esercitazione)
Gestione della memoria principale (6 ore teoria - 2 ore esercitazione)
File system (3 ore teoria - 1 ora esercitazione)
Gestione del sistema ingresso/uscita e dei dischi (3 ore teoria - 1 ora esercitazione)
Sicurezza dei sistemi operativi (3 ore teoria - 1 ora esercitazione)
Virtualizzazione e cloud computing (4 ore teoria - 2 ora esercitazione)
Sistemi operativi real time (4 ore teoria)
Sistemi operativi embedded (2 ore teoria)
Peculiarità dei sistemi operativi per dispositivi mobili (4 ore teoria)
Caso di studio: il sistema operativo Android (4 ore esercitazione)

Contenuti

Componenti principali di un sistema operativo ed esempi con i sistemi operativi della famiglia Linux/Unix (4 ore teoria - 2 ore esercitazione)
Processi e thread (8 ore teoria - 4 ore esercitazione)
Scheduling dei processi (3 ore teoria - 1 ora esercitazione)
Mutua esclusione, sincronizzazione e stallo dei processi (6 ore teoria - 2 ore esercitazione)
Gestione della memoria principale (6 ore teoria - 2 ore esercitazione)
File system (3 ore teoria - 1 ora esercitazione)
Gestione del sistema ingresso/uscita e dei dischi (3 ore teoria - 1 ora esercitazione)
Sicurezza dei sistemi operativi (3 ore teoria - 1 ora esercitazione)

Metodi Didattici

Il corso è organizzato con
- lezioni frontali con supporto di presentazioni grafiche
- esercitazioni basate sul sistema operativo UNIX/Linux e Android
- esercitazioni su sistemi di virtualizzazione
- un seminario o visita di istruzione

Il materiale didattico è disponibile nel sito ufficiale del corso http://people.unica.it/giorgiogiacinto/didattica/insegnamenti/materiale-didattico/sistemi-operativi/

Il docente è disponibile a fornire spiegazioni e chiarimenti sia durante l'intervallo fra ore consecutive di lezione, sia durante l'orario di ricevimento, sia a mezzo posta elettronica.

Verifica dell'apprendimento

La verifica dell’apprendimento viene effettuata attraverso una prova scritta e una prova pratica.
La prova scritta contiene:
- domande a risposta aperta
- esercizi numerici
- esercizi di programmazione (pseudocodice)
al fine di verificare
- le conoscenze
- le abilità
- le competenze
che coprono l’intero programma del corso. In particolare io studente dovrà mostrare di:
- conoscere e aver compreso i concetti di processo e thread;
- conoscere le tecniche per la mutua esclusione e sincronizzazione fra processi con particolare riferimento ai problemi classici che definiscono le diverse casistiche di comportamento;
- conoscere l’organizzazione della memoria principale e il funzionamento delle tecniche e algoritmi per la gestione della memoria attraverso la soluzione di alcuni problemi numerici;
- conoscere l’organizzazione della memoria di massa e il funzionamento delle tecniche e algoritmi per la gestione della memoria attraverso la soluzione di alcuni problemi numerici;
- conoscere l’organizzazione del file system;
- conoscere l’organizzazione e le tecniche di gestione del sistema di ingresso/uscita;
- conoscere gli strumenti per la virtualizzazione;
- conoscere la struttura del sistema operativo Android;
- saper descrivere le principali differenze fra sistemi operativi per diversi contesti applicativi
- conoscere le principali problematiche legate alla sicurezza dei sistemi.

La prova pratica sarà costituita dalla partecipazione in aula alle esercitazioni che proporranno alcuni schemi di base relativi ala scrittura di codice in linguaggio C utilizzando le primitive dei sistemi UNIX/Linux per la creazione e comunicazione fra processi.

A ciascun esercizio della prova scritta è assegnato un punteggio massimo. Ciascun esercizio viene valutato con un punteggio compreso fra 0 e il punteggio massimo assegnato. Il punteggio massimo viene assegnato in caso di risposta corretta, mentre viene assegnato un punteggio inferiore in presenza di errori. Errori di distrazione o dovute a incomprensioni del testo attribuibili a possibili ambiguità nel testo stesso, avranno un peso inferiore rispetto a errori concettuali chiaramente causati da una conoscenza parziale dell’argomento.

La valutazione della partecipazione alla prova pratica sarà suddivisa in 4 punti, 1 punto per ciascuna delle esercitazioni in cui lo studente sarà chiamato ad applicare le conoscenze acquisite nelle esercitazioni precedenti proponendo la propria soluzione.

Il voto finale si ottiene come somma dei punteggi ottenuti in ciascun esercizio e dei punti relativi alla partecipazione alle prove pratiche. Il punteggio massimo della prova è pari a 32. Chi ottiene un punteggio complessivo pari a 32 avrà il voto pari a 30 e lode.

E' possibile sostenere una prova orale integrativa.

Verifica dell'apprendimento

La verifica dell’apprendimento viene effettuata attraverso una prova scritta contenente
- domande a risposta aperta
- esercizi numerici
- esercizi di programmazione (sistema Linux o pseudocodice)
al fine di verificare
- le conoscenze
- le abilità
- le competenze
che coprono l’intero programma del corso. In particolare io studente dovrà mostrare di:
- conoscere e aver compreso i concetti di processo e thread;
- saper risolvere un problema di programmazione che richiede la scrittura di un frammento di programma in linguaggio C utilizzando le primitive dei sistemi UNIX/Linux per la creazione e comunicazione fra processi;
- conoscere le tecniche per la mutua esclusione e sincronizzazione fra processi con particolare riferimento ai problemi classici che definiscono le diverse casistiche di comportamento;
- conoscere l’organizzazione della memoria principale e il funzionamento delle tecniche e algoritmi per la gestione della memoria attraverso la soluzione di alcuni problemi numerici;
- conoscere l’organizzazione della memoria di massa e il funzionamento delle tecniche e algoritmi per la gestione della memoria attraverso la soluzione di alcuni problemi numerici;
- conoscere l’organizzazione del file system;
- conoscere l’organizzazione e le tecniche di gestione del sistema di ingresso/uscita;
- conoscere gli strumenti per la virtualizzazione;
- conoscere la struttura del sistema operativo Android;
- saper descrivere le principali differenze fra sistemi operativi per diversi contesti applicativi
- conoscere le principali problematiche legate alla sicurezza dei sistemi.

A ciascun esercizio è assegnato un punteggio massimo. Ciascun esercizio viene valutato con un punteggio compreso fra 0 e il punteggio massimo assegnato. Il punteggio massimo viene assegnato in caso di risposta corretta, mentre viene assegnato un punteggio inferiore in presenza di errori. Errori di distrazione o dovute a incomprensioni del testo attribuibili a possibili ambiguità nel testo stesso, avranno un peso inferiore rispetto a errori concettuali chiaramente causati da una conoscenza parziale dell’argomento.

Il voto finale si ottiene come somma dei punteggi ottenuti in ciascun esercizio. Il punteggio massimo della prova è pari a 32. Chi ottiene un punteggio complessivo pari a 32 avrà il voto pari a 30 e lode.

E' possibile sostenere una prova orale integrativa.

Testi

William Stallings
Operating Systems: Internals and Design Principles, 9/E
Pearson - ©2018
ISBN 9781292214290

Altre Informazioni

Sono disponibili copie delle presentazioni usate a lezione e del materiale usato per le esercitazioni al seguente indirizzo: http://people.unica.it/giorgiogiacinto/didattica/insegnamenti/materiale-didattico/sistemi-operativi/ 

credits unica.it | accessibilità Università degli Studi di Cagliari
C.F.: 80019600925 - P.I.: 00443370929
note legali | privacy

Nascondi la toolbar