| Programma del corso | 
         
        
          
            
              
                | 1. | 
                Aspetti generali:
					
                 
					  - ruolo del sistema operativo (SO) in un sistema di calcolo;
 
					  - evoluzione dei SO; tipi di SO (batch/interattivi, time-sharing/dedicati, real-time, paralleli, distribuiti, sistemi embedded...);
 
					  - richiami sull'architettura di un sistema di calcolo (livelli di esecuzione delle istruzioni, gestione delle interruzioni, gestione dell'I/O);
 
					  - il SO come gestore di risorse: processi, memoria, dispositivi, file, interazione con l'utente;
 
					  - il SO come macchina virtuale: il nucleo, le chiamate di sistema;
 
					  - struttura di un sistema operativo (monolitico, a livelli, macchine virtuali, exokernel, microkernel client-server);
 
					  - esempi: Unix tradizionale, Linux, Solaris, Mach, Windows NT.
 
					 
                
					                  
					 | 
               
              
                |   | 
               
              
                | 2. | 
                Processi e Thread: 
				  
						- il concetto di processo: definizione e ruolo, il descrittore di processo;
 
						- la manipolazione dei processi: la creazione/terminazione di un processo, grafo degli stati di un processo, la commutazione di contesto, lo scheduling di processi;
 
						- i processi leggeri (threads): modello a thread, thread a livello utente vs. a livello kernel, soluzioni ibride, thread pop-up, passaggio da thread singolo a multithread;
 
						- ruolo del nucleo: gestione interruzioni e traps, operazioni di wait e signal su condizioni di attesa;
 
						- lo scheduling dei processori: concetti di base, criteri di scheduling, algoritmi di scheduling, scheduling di sistemi a multiprocessore, scheduling real-time.
 
					 
                 | 
               
              
                |   | 
               
              
                | 3. | 
                Programmazione concorrente: 
				  
						- race condition e sezioni critiche;
 
						- mutua esclusione;
 
						- sincronizzazione tra processi e memorie condivise;
 
						- scambio messaggi;
 
						- primitive di comunicazione e sincronizzazione: semafori, mutex, monitor, scambio di messaggi;
 
						- problemi classici: produttore/consumatore, filosofi, lettori/scrittori, barbiere;
 
						- stallo: definizione, modelli per lo stallo, identificazione, prevenzione.
 
					 
                 | 
               
              
                |   | 
               
              
                | 4. | 
                Gestione della memoria: 
				  
						- gerarchie di memoria: registri, cache, memoria centrale, memoria virtuale, dischi;
 
						- il binding degli indirizzi, spazi logici e fisici di indirizzamento, la rilocazione;
 
						- tecniche di allocazione: contigua, la paginazione, la segmentazione; la frammentazione;
 
						- la memoria virtuale: paginazione a richiesta, algoritmi di sostituzione delle pagine, il thrashing, il modello Working set.
 
					 
                 | 
               
              
                |   | 
               
              
                | 5. | 
                 Input/Output: 
				  
						- tipi di dispositivi di I/O - principi dell'hardware di I/O;
 
						- gestione a basso livello dei dispositivi di I/O - PIO, DMA, DVMA;
 
						- il trattamento delle interruzioni, i driver di I/O - I/O bloccante, non bloccante, asincrono - interfaccia per le applicazioni;
 
						- i dischi - algoritmi di schedulazione dei dischi.
 
					 
                 | 
               
              
                |   | 
               
              
                | 6. | 
                Il file system: 
				  
						- il file, attributi, operazioni, struttura fisica;
 
						- metodi di accesso sequenziale, diretto, a indice;
 
						- le directory e la struttura logica di un file system: piatta, gerarchica, a grafo;
 
						- la protezione; la consistenza;
 
						- implementazione dei file system: organizzazione, allocazione e gestione spazio libero, backup e restore;
 
						- struttura di un disco: gestione delle partizioni, gestione delle aree di swap;
 
						- il caso di Unix: UFS, EXT2. Tabelle in kernel. Il Virtual File System. Risoluzione dei nomi in inode;
 
						- operazioni su dischi, partizioni e file system;
 
						- cenni ai journaled file system.
 
					 
                 | 
               
              
                |   | 
               
              
                | 7. | 
                Sistemi con processori multipli: 
				  
						- concetti generali - processori strettamente/debolmente accoppiati;
 
						- multiprocessori - aspetti hardware, software. Limitazioni;
 
						- multicomputer - aspetti hardware - comunicazione a basso livello, a livello utente - RPC - memoria condivisa distribuita;
 
						- sistemi distribuiti - servizi e protocolli di rete, e distribuiti - il modello client/server, protocolli - modello ISO/OSI, la suite TCP/IP - middleware di comunicazione;
 
						- modelli distribuiti basati sulla migrazione dei dati, della computazione, dei processi; su coordinazione distribuita;
 
						- chiamate di procedure remote (RPC) - esempio di servizio distribuito: NFS.
 
					 
                 | 
               
              
                | 8. | 
                Introduzione a problematiche di sicurezza
                 | 
               
             
           
           | 
         
       
     |