Sistemi operativi e reti
Numero di crediti ECTS: 10 (96 ore frontali)
SSD di riferimento: INF/01
Docente: G.B. Ianni
Prerequisiti
Conoscenza di un linguaggio di programmazione ad oggetti (preferibilmente Java), e dell'architettura di un calcolatore.
Interfacce grafiche e programmazione ad eventi.
Obiettivi
- Conoscenza dell’architettura dei sistemi operativi, con particolare riferimento a gestione di memoria, dispositivi hardware, e unità di calcolo
- Capacità di riconoscere il ruolo delle componenti architetturali astratte nei sistemi operativi reali Windows e Linux
- Capacità di amministrare sistemi standalone
- Conoscenza di un linguaggio di scripting (perl)
- Conoscenza delle principali metodologie di programmazione concorrente
- Conoscenza architetturale delle reti di calcolatori e dei protocolli di rete più comuni, con particolare riferimento allo stack TCP/IP e ai protocolli di livello applicazione principali
- Capacità di progettazione e messa in sicurezza di reti LAN
Programma
- Parte I (Sistemi operativi)
- Definizione di sistema operativo. Componenti base di un sistema operativo. Meccanismi di interrupt e DMA.
- Concetto di processo e di thread. Operazioni di task switching. Il Program Control Block.
- Diagramma a stati dell’attività di un thread. Multitasking con e senza prelazione. Scheduling dei processi nell’architettura Win32 e Linux.
- Sincronizzazione tra processi. Monitor e altre strutture dati di base in Java. Problemi tipici di sincronizzazione: buffer limitato, lettori e scrittori, problema dei cinque filosofi.
- Situazioni di stallo tra processi. Grafo dell’allocazione delle risorse. Situazioni di starvation.
- Gestione della memoria. Paginazione: politiche di swap in e swap out delle pagine. Protezione della memoria. Caricamento in memoria di programmi. Rilocazione. Chiamata a funzioni di sistema.
- Tool per il monitoraggio dell’attività dei processi Windows e Linux (procmon, procexp, top, ps).
- File Systems: strutture dati di supporto alla gestione di file e directory. Mappatura tra dispositivi fisici e entità su livello di astrazione superiore.
- Linux: layout del file system. Attributi e permessi di accesso. Gestione dei processi.
- Comandi shell Linux: gestione dei file e dei permessi di accesso, piping e redirezione. Comandi di gestione dei processi. Avvio di processi in background. Variabili d’ambiente, passaggio di parametri su linea di comando.
- Linguaggi di scripting (Perl)
- Parte II (Reti di Calcolatori)
- Concetto di gerarchia di protocolli.
- Livello applicazione: Uso dei socket in Java. Gestione di protocolli di livello applicazione in Java. I protocolli HTTP e SMTP. Application multiplexing. Risoluzione dei nomi e DNS.
Livello di trasporto: Protocolli TCP e UDP. Protocolli di comunicazione stop & wait e a finestra mobile. Controllo di congestione e di flusso. Protocolli di connessione e disconnessione. Handshaking a tre vie.
Livello di rete: concetto di qualità del servizio: latenza, jitter, banda, affidabilità. Architetture di interconnessione store & forward. Protocollo IP: sistema di numerazione degli host, struttura di un frammento IP. Tabelle di routing. Cenni alle tecniche di routing dinamico.
Livello ‘data link’: Protocollo ARP. Protocolli di condivisione del mezzo trasmissivo. Protocolli Ethernet e WiFi 802.11. Struttura di un frame Ethernet e sistema di addressing. Dispositivi di ripetizione del segnale: hub, switch e access point.
- Il livello fisico. Cenni di teoria dei segnali. Nozioni di latenza e banda di un canale trasmissivo. Teorema di Nyquist. Principali mezzi trasmissivi. Commutazioni di circuito, di frequenza, di tempo, di pacchetto.
- Esercitazioni: le esercitazioni di laboratorio sono principalmente svolte con l’ausilio dei software open source Wireshark (analizzatore del traffico di rete), e Netkit (ambiente per la simulazione di reti virtuali), nonché facendo uso dei tool di sistema forniti dai sistemi operativi Windows e Linux.
- a. Livello applicazione: programmazione di un client SMTP e di un client HTTP.
- b. Livello di trasporto: comandi di monitoraggio delle connessioni: netstat. Port scanners. Interpretazione dell’evoluzione dei protocolli più comuni con Ethereal/Wireshark (DNS, HTTP, TCP).
- c. Livello di rete: interpretazione e configurazione di una tabella di routing con Netkit, concetto di mascheramento e di subnet. Comando route. Protocollo ICMP: ping, tracert.
- d. Firewalling: configurazione di un firewall sotto linux con iptables.
- e. Livello data link: monitoraggio e configurazione di una rete ethernet, principali comandi di gestione Windows e Linux: ipconfig, ifconfig, arp.
- f. Livello fisico: visita agli apparati di rete dipartimentali. Principali mezzi trasmissivi.
Bibliografia
- H.M.Deitel, P.J.Deitel, D.R.Choffnes, Operating Systems, 3d Edition, Pearson Education.
- Randal L. Schwartz, Tom Phoenix, Brian d. Foy, "Learning Perl", O’ Reilly.
- J. F. Kurose e K.W. Ross, “Computer Networking: A Top-Down Approach", 6th edition, Pearson Education.
- Dispense e materiale didattico fornito dal docente sulla pagina Web del corso.
Tipologia di attività didattiche
Lezioni frontali interattive, esercitazioni guidate in laboratorio, esercitazioni autonome.
Metodi di valutazione
Prova scritta in laboratorio, progetto didattico e prova orale.