Il Modulo SOSA - Sistemi Operativi e Sistemi Aperti, tenuto dal Prof. Maurelio Boari e realizzato secondo il Modello didattico del NETTUNO, è un corso propedeutico alle attività formative nell'ambito del progetto AIPA di "Formazione Informatica per la Pubblica Amministrazione" destinata a specialisti di architetture e gestione di reti, specialisti di ambienti aperti e sistemi distribuiti, progettisti di applicazioni, programmatori e gestori di applicazioni sul web. Il corso è fruito in autoapprendimento, e prevede un attività di tutoraggio in rete di supporto alle videolezioni e agli strumenti multimediali proposti, secondo le metodologie didattiche a distanza del NETTUNO
Il corso si propone di illustrare le proprietà fondamentali dei moderni sistemi operativi (facendo riferimento espressamente a UNIX e Windows NT) ed il loro utilizzo sia in architetture di tipo tradizionale che in sistemi distribuiti di tipo aperto. Il corso è stato strutturato in due parti. La prima, costituita da 8 ore di videolezioni digitalizzate, punta soprattutto alla definizione delle proprietà fondamentali dei sistemi operativi e delle funzioni svolte, alla loro classificazione ed utilizzazione in ambienti operativi diversi. La seconda parte contenuta in un Cd di approfondimento, descrive con più dettaglio le proprietà dei due sistemi operativi, facendo riferimento agli argomenti trattati nelle videolezioni, analizzando i tipi di soluzioni adottate ed illustrandone la storia, le prospettive ed i campi di applicazione.L'enfasi è sulle modalità di utilizzo dei sistemi operativi e dei relativi ambienti di programmazione.
Per rendere evidente l'integrazione tra le due parti, durante le videlezioni il docente indica quali argomenti possono essere approfonditi sul CD; e nel CD di approfondimento sono presenti link che rimandano alla parte teorica trattata nelle videolezioni. Come metodologia di studio si consiglia di analizzare dapprima il contenuto delle videolezioni, cercando di fare propri i principi generali in esse evidenziati. Per facilitare la comprensione, all'inizio di ogni lezione vengono precisati gli argomenti trattati, il loro legame e gli obiettivi della lezione stessa. Al completamento di ogni argomento ne vengono riassunti i punti principali e viene espressamente indicato se un loro approfondimento richiede l'utilizzo del materiale contenuto nel CD di approfondimento. Successivamente, o se espressamente indicato nella videolezione, si potrà consultare il CD di approfondimento esaminando i tipi di soluzione dati ai problemi in UNIX e Windows NT. Attraverso un servizio di Tutoring on-line, l'utente potrà ottenere maggiori informazioni relative ad argomenti del corso risultati poco chiari.
Sarà infine possibile verificare il grado di comprensione degli argomenti, trattati sia nelle videolezioni che nel CD di approfondimento, attraverso il test di autovalutazione contenuto nel CD stesso. La valutazione del livello di apprendimento potrà altresì essere effettuata in sessioni di Tutoraggio Telematico attraverso chat e video-chat.

Contenuti delle videolezioni:

1 - Funzioni di un sistema operativo Vengono chiarite le funzioni fondamentali di un sistema operativo, precisando le sue relazioni da un lato con l'hardware del sistema di elaborazione dall'altro con il software di sistema e con i programmi applicativi. Sono introdotte alcune definizioni relative alle modalità di funzionamento dei sistemi di elaborazione precisando il significato dei termini: sistemi monoprogrammati, multiprogrammati, a divisione di tempo (time sharing), in tempo reale (real time), sistemi dedicati,sistemi transazionali e sistemi distribuiti. Con riferimento a questa classificazione sono collocati i sistemi operativi Windows NT e UNIX .

2 - Struttura dei sistemi operativi Sono introdotte le componenti fondamentali di un sistema operativo. Per ciascuna di esse sono indicati gli obiettivi e viene fornita una breve descrizione. Viene precisato come le system call rappresentino lo strumento con il quale i programmi in esecuzione possono utilizzare le funzioni di un sistema operativo . I programmi in esecuzione possono essere programmi di utente o programmi di sistema utilizzati tramite opportuni comandi a disposizione dell'utente. Facendo riferimento ad entrambi i sistemi operativi, viene mostrata la gerarchia degli strati software dell'ambiente di programmazione e le relative interfacce a supporto delle richieste degli utenti. Viene infine presentata l'organizzazione interna di un sistema operativo facendo riferimento come esempi ad UNIX e NT e rinviando al CD per ulteriori approfondimenti.

3 - Introduzione ai processi Viene precisato il significato del termine processo confrontato con il termine programma e ne vengono definite le proprietà fondamentali ( stato, descrittore etc..) . Vengono introdotti il concetto di interazione tra processi ed i relativi modelli di riferimento (a memoria comune e a scambio di messaggi). Viene fatto un breve accenno ai problemi di sincronizzazione tra processi ed ai relativi strumenti rinviando alla parte sul CD per ulteriori precisazioni sui sistemi operativi UNIX e NT. Viene introdotto il Kernel di un sistema operativo con particolare riferimento alla gestione del salvataggio e ripristino dei contesti dei processi, alla scelta dei processi da mettere in esecuzione, alla ricezione e gestione delle interruzioni ed alla realizzazione delle system call.

4 - Esempi di funzioni del sistema operativo. Vengono illustrate con maggiore dettaglio due tra le principali funzioni svolte dal sistema operativo: l'assegnazione della CPU tra i processi e la gestione della memoria principale, rinviando al CD di approfondimento per l'illustrazione di altre funzioni. Per la parte relativa allo scheduling si provvede ad una classificazione degli algoritmi e ad una illustrazione dei livelli di scheduling. Per quanto riguarda la gestione della memoria viene introdotto il concetto di memoria virtuale e la sua realizzazione mediante le tecniche di impaginazione e segmentazione.

5 - Sistemi distribuiti e sistemi aperti Vengono introdotte le proprietà fondamentali dei sistemi distribuiti e la loro evoluzione. Viene presentato il concetto di sistema aperto facendo riferimento da un lato alla necessità di fare colloquiare tra lo loro sistemi distribuiti collegati in rete e dall'altro ai problemi dovuti alle diversità di questi sistemi sia per aspetti architetturali che per i diversi tipi di sistemi operativi e di gestione dei data-base utilizzati. Sono precisate le proprietà fondamentali dei sistemi aperti: interoperabilità, portabilità, consistenza, modularità. Sono classificati gli standard a livello di prodotti software di base e viene messa in evidenza la loro importanza nell'ambito dei sistemi aperti.

6 - Protocolli di comunicazione Viene precisato il significato di servizi di rete e viene presentata la loro strutturazione in livelli secondo il modello OSI. Sono precisate le funzioni svolte da ciascun livello e viene introdotto il protocollo TCP/IP Viene infine precisata la differenza tra sistemi a connessione e sistemi senza connessione.

7 - Architetture client-server Viene introdotto il modello client-server come modello di coordinamento tra le attività dei diversi elaboratori in un sistema distribuito. Sono indicate le varie architetture dei sistemi client-server (a due o tre livelli) e i vari tipi di suddivisione delle funzioni tra client e server. Sono indicati i differenti tipi di server e viene precisato il ruolo degli standard.

8 - Middleware Viene precisato come con questo termine si intenda quel complesso di programmi che controllano la comunicazione tra client e server ed eseguono tutte le trasformazioni necessarie per rendere comprensibile una richiesta client al server. Sono precisate le funzioni fondamentali del middleware (localizzazione del server, risoluzione delle potenziali incompatibilità tra i protocolli di comunicazione, trasmissione delle richieste, ricezione delle risposte etc..). Sono introdotte la chiamata di procedura remota (RPC), come strumento per la comunicazione in ambiente distribuito ed i processi leggeri(thread), con l'obiettivo di migliorare le prestazioni dei server.