Corso di laurea

Programmazione e gestione di sistemi informatici

Università degli Studi di Perugia · 13 materie · 0 file condivisi

Ecco tutti i dettagli sul corso di laurea selezionato. Sul UniDocs troverai gli appunti condivisi dagli altri studenti del tuo corso di laurea, ordinati per materia. Ricordati che per poter visualizzare il materiale devi essere registrato al sito e possedere un numero di crediti sufficiente.

Sfoglia il materiale didattico

Con UniDocs hai l'opportunità di studiare insieme a tutto il tuo corso di laurea. Guadagna subito dei crediti, carica il materiale del tuo ultimo esame!
Più condividi, più tempo avrai per studiare con tutta la community!

Materie del corso

Algoritmi E Strutture Dati 1° anno · 2° semestre · 6 CFU · INFO-01/A · 0 file

Il corso fornisce le conoscenze fondamentali per comprendere, progettare e analizzare algoritmi e strutture dati. Al termine del corso lo studente sarà in grado di descrivere algoritmi mediante pseudocodice; valutarne…

Scheda dell'insegnamento

Obiettivi formativi

Il corso fornisce le conoscenze fondamentali per comprendere, progettare e analizzare algoritmi e strutture dati. Al termine del corso lo studente sarà in grado di descrivere algoritmi mediante pseudocodice; valutarne correttezza e complessità temporale; risolvere semplici ricorrenze; scegliere strutture dati appropriate; applicare algoritmi di ordinamento, ricerca e gestione di insiemi dinamici; rappresentare grafi e applicare i principali algoritmi di visita, copertura minima e cammino minimo. Lo studente saprà inoltre motivare le scelte algoritmiche e confrontare soluzioni alternative in termini di correttezza ed efficienza.

Programma

Fondamenti di analisi degli algoritmi e notazione asintotica. Tecniche divide et impera e algoritmi di ordinamento. Heap e code di priorità. Strutture dati elementari, tabelle hash, alberi binari di ricerca, alberi rosso-neri e insiemi disgiunti. Rappresentazione dei grafi, visite, alberi di copertura minimi e cammini minimi.

Conoscenze di base di programmazione: variabili, tipi di dato, espressioni, strutture di controllo, funzioni, ricorsione e array. Sono inoltre richieste conoscenze matematiche di base, capacità di ragionamento logico e familiarità con insiemi, funzioni, sommatorie e logaritmi.

Il corso comprende 42 ore di lezioni frontali. Le lezioni alternano la presentazione dei concetti teorici alla descrizione mediante pseudocodice, all’analisi della correttezza e della complessità e allo svolgimento guidato di esempi ed esercizi. Particolare attenzione è dedicata alla simulazione passo per passo degli algoritmi e al confronto tra strutture dati e soluzioni alternative.

1. Algoritmi, pseudocodice, modello RAM, correttezza e invarianti di ciclo. Analisi del caso peggiore e tasso di crescita. 2. Insertion Sort, Merge Sort e paradigma divide et impera. Ricerca binaria. 3. Notazioni asintotiche O, O e T. Funzioni di crescita. Ricorrenze, metodo di espansione e Teorema del Master. 4. Heap binari, Heapify, costruzione di heap, Heap Sort e code di priorità. 5. Quick Sort: partizionamento e analisi. Limite inferiore per gli ordinamenti per confronto. Counting Sort, Radix Sort e Bucket Sort. 6. Array, matrici, pile, code, liste concatenate e alberi radicati. 7. Indirizzamento diretto e tabelle hash. Concatenamento, indirizzamento aperto, ispezione lineare e doppio hashing. 8. Alberi binari di ricerca: visite, ricerca, minimo, massimo, successore, predecessore, inserimento e cancellazione. 9. Alberi rosso-neri: proprietà, rotazioni e inserimento. 10. Insiemi disgiunti: Make-Set, Find-Set e Union; implementazioni mediante liste e foreste, unione per rango e compressione dei cammini. 11. Grafi e loro rappresentazione. Visita in ampiezza e cammini minimi non pesati. 12. Visita in profondità, classificazione degli archi, ordinamento topologico e componenti fortemente connesse. 13. Alberi di copertura minimi, proprietà di taglio, algoritmi di Kruskal e Prim. 14. Cammini minimi da sorgente singola, rilassamento, Bellman-Ford, cammini minimi nei DAG e algoritmo di Dijkstra.

Modalità d'esame

L’esame consiste in una prova scritta individuale della durata massima di due ore, senza consultazione di materiale. La prova comprende esercizi riguardanti l’analisi degli algoritmi, l’esecuzione delle principali operazioni sulle strutture dati e l’applicazione degli algoritmi studiati, nonché domande teoriche di approfondimento. Negli esercizi può essere richiesto di mostrare i passaggi principali, motivare le scelte effettuate, indicare le strutture ausiliarie utilizzate e determinare la complessità asintotica. La valutazione considera la correttezza dei risultati, la completezza del procedimento, la capacità di analisi e l’uso appropriato della terminologia.

Testi di riferimento

T. H. Cormen, C. E. Leiserson, R. L. Rivest, C. Stein, Introduzione agli algoritmi, quarta edizione. Slide, esercizi e materiali integrativi messi a disposizione dal docente sulla piattaforma UniStudium.

Codice insegnamento 419789

Basi Di Dati 1° anno · 1° semestre · 6 CFU · IINF-05/A · 0 file

Lo scopo del corso è quello di acquisire competenze e capacità operative relativamente alla progettazione e all'utilizzo di basi di dati.

Scheda dell'insegnamento

Obiettivi formativi

Lo scopo del corso è quello di acquisire competenze e capacità operative relativamente alla progettazione e all'utilizzo di basi di dati.

Programma

Basi di Dati Relazionali: Modello e Linguaggi. Modello relazionale. Vincoli di integrità. Algebra Relazionale: Unione, Intersezione, Differenza, Selezione, Proiezione e Join. Calcolo Relazionale: Calcolo su domini, Calcolo su tuple con dichiarazione di range. Il linguaggio SQL: definizione dei dati, interrogazioni, manipolazione dei dati. Progettazione di Basi di Dati: Metodologie e Modelli di progetto. Il modello Entità-Relazione. Progettazione Concettuale. Progettazione Logica: ristrutturazione di schemi E-R, traduzione verso il modello relazionale.

Nessuno.

Lezioni frontali in classe.

  • Basi di Dati Relazionali: Modello e Linguaggi. - Modello relazionale. Vincoli di integrità. - Algebra Relazionale: Unione, Intersezione, Differenza, Selezione, Proiezione e Join. - Calcolo Relazionale: Calcolo su domini, Calcolo su tuple con dichiarazione di range. - Il linguaggio SQL: definizione dei dati, interrogazioni, manipolazione dei dati. - Progettazione di Basi di Dati: Metodologie e Modelli di progetto. Il modello Entità-Relazione. - Progettazione Concettuale. - Progettazione Logica: ristrutturazione di schemi E-R, traduzione verso il modello relazionale.

Modalità d'esame

L'esame consiste in una prova di natura sia teorica che pratica.

Testi di riferimento

"BASI DI DATI." P. ATZENI, S. CERI, P. FRATERNALI, S, PARABOSCHI, R. TORLONE, MCGRAW HILL, VI EDIZIONE. Slide fornite dal docente.

Codice insegnamento 419794

Elementi Di Architettura Degli Elaboratori E Sistemi Operativi 1° anno · 1° semestre · 6 CFU · INFO-01/A · 0 file

Alla fine di questo corso, gli studenti comprenderanno le architetture dei sistemi informatici. Gli studenti saranno in grado di comprendere il funzionamento dei sistemi operativi, i clici di vita dei processi e le…

Scheda dell'insegnamento

Obiettivi formativi

Alla fine di questo corso, gli studenti comprenderanno le architetture dei sistemi informatici. Gli studenti saranno in grado di comprendere il funzionamento dei sistemi operativi, i clici di vita dei processi e le principali tecniche per evitare deadlock e allocare correttamente le risorse della macchina.

Programma

Il corso è diviso in due moduli. Il primo modulo è Architettura degli Elaboratori, il secondo è Sistemi Operativi. Il primo modulo introduce le basi fondamentali per comprendere le architetture degli elaboratori. Il secondo modulo, Sistemi Operativi, tratterà nello specifico il sistema operativo Unix, la gestione dei processi, l'allocazione delle risorse del sistema operativo e Bash.

Nessun prerequisito richiesto

Il corso prevede lezioni teoriche e discussioni in classe. Le lezioni saranno frontali e si svolgeranno in aula presso il DMI secondo il calendario pubblicato sul sito del dipartimento.

Il corso è diviso in due moduli. Il primo modulo è Architettura degli Elaboratori, il secondo è Sistemi Operativi. Il primo modulo introduce le basi fondamentali per comprendere le architetture degli elaboratori. Verranno illustrati i principali eventi storici che hanno portato alle architetture moderne trattando le principali generazioni nelle architetture dei computer. Verranno poi trattati i seguenti argomenti: organizzazione della CPU, differenze e caratteristiche di RISC e CISC, la memoria principale, la memoria secondaria, la tecnica Hit and miss, l'input e l'output, il livello logico digitale con richiami a porte logiche e circuiti, il livello di microarchitettura, il livello di architettura ISA ed esempi di istruzioni, ciclo per l'esecuzione di una istruzione, le interruzioni, i sistemi RAID. Il secondo modulo, Sistemi Operativi, tratterà nello specifico: il sistema operativo Unix, le sue caratteristiche e gli schemi di funzionamento che lo governano, i processi, i thread e il loro ciclo di vita. Successivamente verrà trattata: la sincronizzazione dei processi, il blocco critico, lo scheduling della CPU, lo scheduling dei sistemi I/O. Il corso proseguirà trattando: la struttura del file system, e si concluderà con la spiegazione di come si utilizza bash, sia tramite approfondimenti teorici che tramite esercizi pratici di programmazione.

Modalità d'esame

La valutazione del corso avverrà tramite un esame scritto da svolgere in aula tramite LibreEOL e un esame orale.

Testi di riferimento

La letteratura consigliata è la seguente: 1) Andrew S. Tanenbaum, Architettura dei Calcolatori un approccio strutturale, Pearson 2) Abraham Silberschatz et Al, Sistemi operativi. Concetti ed esempi, Pearson Oltre ai due testi consigliati il docente fornirà del materiale di studio aggiuntivo sotto forma di slide che sarà sufficiente alla preparazione dell'esame.

Codice insegnamento 419786

Matematica Per L'Informatica 1° anno · 2° semestre · 6 CFU · MATH-03/A · 0 file

Fornire le basi del ragionamento logico, comprendere le basi di calcolo numerico, padroneggiare gli strumenti fondamentali dell'analisi matematica.

Scheda dell'insegnamento

Obiettivi formativi

Fornire le basi del ragionamento logico, comprendere le basi di calcolo numerico, padroneggiare gli strumenti fondamentali dell'analisi matematica.

Programma

Il corso si propone di fornire le basi matematiche allo studente con una particolare attenzione ai legami con l'informatica.

Nessuno

Lezioni frontali in aula con esercizi

Cenni di logica matematica, insiemi numerici, funzioni e proprietà principali, limiti, continuità, cenni sulle serie, derivabilità, applicazioni del calcolo differenziale, formula di Taylor e sviluppi in serie di Taylor, integrazione secondo Riemann, cenni di analisi numerica.

Modalità d'esame

L'esame verterà su una prova scritta con esercizi e domande di teoria. Per informazioni sui servizi di supporto agli studenti con disabilità e/o DSA visita la pagina http://www.unipg.it/disabilita-e-dsa

Testi di riferimento

  • Calogero Vinti, Lezioni di Analisi Matematica, Margiacchi - Galeno editrice, 2003. - Marco Bramanti, Carlo Pagani, Sandro Salsa, Analisi Matematica 1 - Zanichelli, 2008 - Alessandro Languasco, Analisi Matematica 1, Hoepli, 2017.

Codice insegnamento 419785

Programmazione I 1° anno · 1° semestre · 6 CFU · INFO-01/A · 0 file

Il corso introduce i principi fondamentali della programmazione e fornisce le competenze necessarie per progettare, implementare, verificare e correggere programmi in C++. Al termine del corso lo studente sarà in grado…

Scheda dell'insegnamento

Obiettivi formativi

Il corso introduce i principi fondamentali della programmazione e fornisce le competenze necessarie per progettare, implementare, verificare e correggere programmi in C++. Al termine del corso lo studente sarà in grado di analizzare semplici problemi, tradurli in algoritmi e implementarli utilizzando tipi di dato, strutture di controllo, funzioni, array, puntatori e riferimenti. Saprà definire strutture e classi, applicare i principi di incapsulamento, gestire la memoria dinamica e utilizzare i concetti fondamentali della programmazione orientata agli oggetti, quali ereditarietà e polimorfismo. Sarà inoltre in grado di leggere e tracciare l’esecuzione di codice C++, individuare errori e motivare le principali scelte implementative.

Programma

Fondamenti della programmazione e del linguaggio C++. Tipi di dato, variabili, operatori, input/output e strutture di controllo. Funzioni, array, puntatori, riferimenti e strutture. Programmazione orientata agli oggetti: classi, incapsulamento, costruttori, memoria dinamica, ereditarietà e polimorfismo. Eccezioni, debugging e programmazione generica mediante template.

Non sono richieste conoscenze pregresse di programmazione. Sono richieste conoscenze matematiche di base, capacità di ragionamento logico e familiarità con l’uso di un computer.

Il corso comprende 42 ore di lezioni frontali. Le lezioni alternano la presentazione dei concetti teorici alla scrittura, analisi e discussione di programmi C++. Gli argomenti sono accompagnati da esempi, esercizi guidati e attività di tracciamento del codice. Al termine delle lezioni vengono proposti esercizi mirati, discussi successivamente in aula, per consolidare progressivamente sintassi, capacità di problem solving e debugging.

1. Introduzione alla programmazione e al C++. Fasi di compilazione, linking ed esecuzione. Struttura di un programma. 2. Tipi primitivi, variabili, costanti, conversioni, casting e operatore sizeof. 3. Operatori aritmetici, relazionali, logici e bit a bit. Precedenza e associatività. 4. Input e output. Istruzioni condizionali if, if-else e switch. 5. Cicli while, do-while e for. Istruzioni break e continue. 6. Funzioni: dichiarazione, definizione, parametri, valori di ritorno, visibilità, overloading, parametri di default e ricorsione. 7. Array monodimensionali e multidimensionali. Stringhe C. Passaggio degli array alle funzioni. 8. Puntatori: indirizzi, dereferenziazione, nullptr, aritmetica dei puntatori, doppi puntatori e void*. 9. Riferimenti e passaggio dei parametri per valore, puntatore e riferimento. Uso di const. 10. Strutture, array di strutture e passaggio alle funzioni. 11. Classi e oggetti: campi, metodi, livelli di accesso, incapsulamento, costruttori e distruttori. 12. Oggetti e metodi const, costruttore di copia e membri static. 13. Organizzazione del codice in file header e sorgenti. Namespace e dichiarazioni extern. 14. Funzioni e classi friend. Sovraccarico degli operatori aritmetici, relazionali e di stream. 15. Allocazione dinamica mediante new, delete, new[] e delete[]. Stack e heap, shallow copy, deep copy e regola del tre. 16. Gestione degli errori mediante eccezioni. Tecniche e strumenti di debugging, assert e debugger. 17. Ereditarietà singola e multipla, livelli di accesso, costruttori e distruttori nelle gerarchie e diamond problem. 18. Polimorfismo, funzioni virtuali, override, classi astratte e distruttori virtuali. 19. Programmazione generica: template di funzione e di classe.

Modalità d'esame

L’esame consiste in una prova scritta individuale della durata massima di due ore e trenta minuti, senza consultazione di materiale. La prova comprende domande teoriche sui concetti del corso, esercizi di progettazione e implementazione di programmi in C++ su carta ed esercizi di tracciamento dell’esecuzione e determinazione dell’output. Può essere richiesto di definire funzioni, strutture e classi, gestire collezioni di oggetti e memoria dinamica e motivare le scelte progettuali. La valutazione considera la correttezza delle risposte e del codice, la capacità di applicare i concetti, la chiarezza della soluzione e l’uso appropriato della terminologia.

Testi di riferimento

H. M. Deitel, P. J. Deitel, C++ Fondamenti di programmazione, seconda edizione. Slide, esercizi e materiali integrativi messi a disposizione dal docente sulla piattaforma UniStudium.

Codice insegnamento 419792

Reti Di Computer Ed Internet 1° anno · 2° semestre · 6 CFU · IINF-05/A · 0 file

L'obiettivo principale dell'insegnamento è quello di introdurre lo studente allo studio delle reti, in particolare della rete Internet e dei Servizi che sono alla base della straordinaria evoluzione della comunicazione e…

Scheda dell'insegnamento

Obiettivi formativi

L'obiettivo principale dell'insegnamento è quello di introdurre lo studente allo studio delle reti, in particolare della rete Internet e dei Servizi che sono alla base della straordinaria evoluzione della comunicazione e dell'accesso alle informazioni, in modo da essere protagonisti attivi delle tecnologie emergenti ICT. Le principali conoscenze acquisite saranno:Topologia e metodi di accesso per le reti locali, in particolare del protocollo di rete Ethernet; Tecnologie per la realizzazione di reti local e geografiche; Autonomous Systems e Protocolli di Routing, sia di tipo Interior Gateway Protocol (OSPF, RIP) che Exterior Gateway Protocol (BGP) Protocollo Ipv4, IPv6 and IPv8. Famiglia dei protocolli TCP/IP. Servizi di Rete Internet: loro disegno e relativa implementazione Firewall e sicurezza di rete Monitoraggio di reti e servizi. Le principali abilità (vale a dire la capacità di applicare le conoscenze) acquisite sono: Capacità di disegnare e implementare una rete di trasmissione dati, evitandone le possibili criticità; Capacità di disegnare e implementare i servizi di rete Internet, con capacità di evitare i principali problemi; Capacità di pianificare ed implementare una efficiente sicurezza di rete; Capacità di pianificare ed implementare il monitoraggio della rete e dei servizi per prevenire possibili problemi e interruzioni.

Programma

Viene presentata la rete Internet e l’architettura delle reti. Viene presentato il modello di riferimento ISO/OSI ed i servizi di rete con i relativi protocolli TCP/IP coinvolti: DNS, SSH, FTP e Telnet, NIS, NFS, Automount, Email, HTTP, SNMP, Firewall e Sicurezza di Rete. Verrà discussa l’evoluzione del protocollo IP (IPv4, IPv6, IPv8). Verranno discussi alcuni casi di studio.

Nessun prerequisito è richiesto allo studente; si considera che lo studente abbia comunque dimestichezza con i servizi della rete Internet almeno dal punto di vista utente. La conoscenza approfondita dei sistemi operativi open source come Linux agevola l'acquisizione dei concetti del corso. Nel corso delle lezioni verranno comunque forniti esempi e casi d'uso volti ad agevolare l'apprendimento dei concetti illustrati a lezione.

Lezione frontale con l'ausilio di strumenti multimediali (slides, video, etc). Esercitazione in sala computer.

Presentazione delle reti. Viene illustrato il modello di riferimento ISO/OSI e l’architettura delle reti. In particolare vengono presentate in dettaglio le tecnologie Ethernet e le sue varianti. Vengono illustrati in dettaglio la famiglia dei protocolli TCP/IP, collocandoli nel Modello di Riferimento ISO/OSI. Vengono presentate le versioni 4, 6 e 8 del protocollo IP. Vengono illustrati e discussi i principali servizi Internet ed i protocolli TCP/IP coinvolti: DNS, SSH, FTP, Telnet, NIS, NFS, Automount, Email (protocollo di trasporto SMTP e Mail User Agent), HTTP, SNMP, Firewall e Sicurezza di rete. Vengono presentati il concetto di Autonous System ed i protocolli di routing dinamici OSPF, RIP (Interior Gateway Protocols) e BGP (Exterior Gateway Protocols). Viene presentata la sicurezza di rete, il Firewall e i sistemi di prevenzione e identificazione di intrusioni nella rete. Sono presentati e discussi i principali file di configurazione di questi servizi e vengono discussi alcuni casi di studio tipici. Viene presentata l'architettura e le problematiche di gestione e governo della rete Internet, indicandone i principali momenti fondamentali per il suo sviluppo.

Modalità d'esame

L'esame prevede una prova scritta da sostenere al computer con il sistema LibreEOL, nel quale vengono presentate allo studente un insieme di test che prevedono diversi tipi di risposta: multiple choice e/o multiple response e/o drag and drop e/o a risposta aperta. Inoltre è previsto un esame orale di circa 20 minuti nel quale lo studente deve dimostrare la padronanza dei concetti richiesti, una adeguata proprietà di linguaggio e la capacità di organizzare i concetti da esporre in modo adeguato.

Testi di riferimento

Andrew S. Tanenbaum, David J. Wetherall, Computer Networks, Pearson ISBN13: 978-0-13-212695-3 Douglas E. Comer, Internetworking With TCP/IP Volume 1: Principles Protocols, and Architecture, 6th edition, 2013. ISBN-10: 0-13-608530-X ISBN-13: 9780136085300. Materiale didattico fornito dal docente con riferimenti bibliografici

Codice insegnamento 419797

Artificial Intelligence 2° anno · 1° semestre · 6 CFU · INFO-01/A · 0 file
Cloud Computing 2° anno · 2° semestre · 6 CFU · INFO-01/A · 0 file

Spiegare l'evoluzione dell'informatica dai mainframe al cloud computing. Definire il cloud computing e distinguere tra cloud privato, pubblico e ibrido. Confrontare IaaS, PaaS e SaaS, identificandone i casi d'uso e i…

Scheda dell'insegnamento

Obiettivi formativi

Spiegare l'evoluzione dell'informatica dai mainframe al cloud computing. Definire il cloud computing e distinguere tra cloud privato, pubblico e ibrido. Confrontare IaaS, PaaS e SaaS, identificandone i casi d'uso e i compromessi. Valutare i vantaggi e i limiti delle risorse cloud dedicate rispetto a quelle condivise. Descrivere il ruolo della virtualizzazione nel cloud computing e distinguere i tipi di hypervisor. Analizzare la virtualizzazione assistita da hardware e le sfide legate all'escalation dei privilegi. Identificare i carichi di lavoro non adatti al cloud e proporre soluzioni alternative. Comprendere i concetti di autoscaling, elasticità e bilanciamento del carico nelle architetture cloud. Valutare gli accordi sul livello di servizio (SLA) e le strategie di riduzione del rischio per i data center. Discutere le sfide legali, di conformità e di certificazione del cloud computing. Configurare macchine virtuali utilizzando strumenti come cloud-init. Applicare tecniche di isolamento della rete e riconoscere le minacce alla sicurezza (ad esempio, gli attacchi MITM). Automatizzare la configurazione dell'infrastruttura utilizzando Ansible (playbook, moduli, template). Risolvere gli errori di configurazione e convalidare gli stati del sistema con Ansible. Confrontare la paravirtualizzazione con la virtualizzazione completa, in particolare con KVM/VirtIO. Gestire le soluzioni di storage delle macchine virtuali (SAN, ZFS, snapshot) e ottimizzare le prestazioni. Eseguire la migrazione live delle macchine virtuali e illustrare le tecniche di espansione della memoria. Confronto tra container e macchine virtuali, con particolare attenzione all'isolamento (cgroup, namespace). Distribuire i container utilizzando Docker/Podman e gestire immagini, livelli e storage.

Programma

1. Panoramica del corso Introduzione generale alla struttura del corso Riferimenti e materiali richiesti Formato dell'esame e criteri di valutazione Organizzazione del corso e dipendenze 2. Fondamenti del cloud computing Evoluzione dell'informatica: dai mainframe all'utility computing Definizione e caratteristiche principali del cloud computing Tipi di cloud computing: privato, pubblico, ibrido Principali fornitori di servizi cloud (AWS, Azure, GCP, ecc.) Modelli di servizi cloud: IaaS (Infrastructure as a Service) PaaS (Platform as a Service) SaaS (Software as a Service) Risorse dedicate vs. risorse condivise 3. Virtualizzazione nel cloud computing Scenari applicativi e terminologia Vantaggi della virtualizzazione Livelli di implementazione della virtualizzazione Tipi di hypervisor (Tipo 1 vs. Tipo 2) Implicazioni sulle prestazioni Livelli di privilegio e virtualizzazione della CPU assistita dall'hardware 4. Sfide e soluzioni del cloud computing Applicazioni non adatte al cloud computing Provisioning statico vs. scalabilità dinamica Fluttuazioni del carico di lavoro e scalabilità automatica Elasticità e bilanciamento del carico Architettura microservizi Accordi sul livello di servizio (SLA) Rischi dei data center e strategie di mitigazione Certificazioni cloud e conformità Implicazioni legali del cloud computing 5. Gestione delle macchine virtuali e infrastruttura come codice (IaC) Tecniche di acquisizione dei dati Processo di avvio e configurazione delle VM Metodi per la distribuzione delle configurazioni delle VM (ad es. cloud-init) Opzioni DHCP RFC 1497 Tecniche di isolamento della rete (ARP statico vs dinamico) Problemi di sicurezza: attacchi Man-in-the-Middle (MITM) Reti basate su hypervisor CGNAT e gateway lontani Strumenti di interazione delle VM Modelli di VM e personalizzazione Introduzione all'Infrastructure as Code (IaC) e Ansible 6. Gestione della configurazione con Ansible Raccolta di dati con Ansible Gestione dei file e delle configurazioni (lineinfile, moduli ini) Monitoraggio dello stato (ok, modificato) Espressioni regolari nell'automazione Modelli basati su variabili Strutture di controllo: loop, include, blocchi Registrazione dei risultati e preseeding debconf Gestione degli errori e dei guasti 7. Tecniche avanzate di virtualizzazione Paravirtualizzazione: concetti, motivazioni, pro e contro Integrazione con KVM e VirtIO Funzionalità dell'ambiente virtuale Proxmox Migrazione live e reti di archiviazione (SAN) Opzioni di archiviazione su disco delle VM ZFS: vdev, array, parità, pool e snapshot Gestione della memoria: ballooning 8. Tecnologie di containerizzazione Caratteristiche e implementazione dell'isolamento (cgroup, namespace) Definizione e architettura dei container Differenze tra VM e container Container privilegiati e non privilegiati Funzionalità Linux Software di containerizzazione comuni (LXC, containerd, Docker, Podman) Immagini, livelli e archiviazione dei container Container stateless e stateful 9. Alta disponibilità e disaster recovery Definizioni: alta disponibilità (HA), continuità operativa (BC), disaster recovery (DR) Metriche chiave: MTBF (tempo medio tra i guasti), MTTR (tempo medio di riparazione) Single Point of Failure (SPOF) Modelli di ridondanza: Attivo/Attivo, Attivo/Passivo, Attivo/Backup Ridondanza N+1 e 2N+1 Meccanismi di failover automatico Configurazioni di record DNS multi-A Bilanciatori di carico: Bilanciatori di carico L3 vs. L7 Controlli di integrità e heartbeat 10. Networking e orchestrazione dei container Tipi di driver di rete e loro caratteristiche Presentazioni degli studenti su: Algoritmi di bilanciamento del carico HAProxy Software grafico per la gestione dei container Server DNS integrato in Docker 11. Docker Compose e orchestrazione dei servizi Introduzione a Docker Compose Elementi di primo livello: Servizi, reti, configurazioni, segreti Parametri e configurazioni chiave Esempi pratici e flussi di lavoro di implementazione

Conoscenze derivanti dal corso di sistemi operativi: il funzionamento del sistema operativo e del kernel e le relative chiamate. Conoscenze derivanti dal corso di reti di calcolatori: indirizzamento, NAT, ARP, reti distribuite, VLAN, gateway, modello ISO/OSI, porte. Conoscenze basilari di programmazione.

Lezione frontale; flipped classroom; dibattito.

Modalità d'esame

Esame scritto (tramite LibreEOL) e orale. Entrambe le componenti devono essere sufficienti (18/30) perché l'esame sia passato.

Testi di riferimento

Dan Marinescu, "Cloud Computing: Theory and Practice, 3rd Edition", Morgan Kaufmann, 2022. Sean P. Kane and Karl Matthias, "Docker: Up & Running: Shipping Reliable Containers in Production", O'Reilly, 2023. Serena Sensini, "Docker: Sviluppare e rilasciare software tramite container", Apogeo, 2020.

Codice insegnamento 419806

Cybersecurity 2° anno · 1° semestre · 6 CFU · INFO-01/A · 0 file

Capire il significato di sicurezza informatica nei suoi attributi di confidenzialità, integrità e disponibilità. Capire le problematiche dei sistemi Sicuri ma connessi su reti insicure. Capire le nozioni più importanti…

Scheda dell'insegnamento

Obiettivi formativi

Capire il significato di sicurezza informatica nei suoi attributi di confidenzialità, integrità e disponibilità. Capire le problematiche dei sistemi Sicuri ma connessi su reti insicure. Capire le nozioni più importanti di sicurezza informatica, sicurezza di rete.

Programma

1 Introduction PART ONE: CRYPTOGRAPHY 2 Symmetric Encryption and Message Confidentiality 3 Public-Key Cryptography and Message Authentication PART TWO: NETWORK SECURITY APPLICATIONS 4 Key Distribution and User Authentication 5 Network Access Control and Cloud Security 6 Transport-Level Security 7 Wireless Network Security 8 Electronic Mail Security 9 IP Security PART THREE: SYSTEM SECURITY 10 Malicious Software 11 Intruders 12 Firewalls

Nessuno in particolare

Lezioni frontali e di laboratorio. Possibili seminari di ospiti.

1 Introduction 1.1 Computer Security Concepts 1.2 The OSI Security Architecture 1.3 Security Attacks 1.4 Security Services 1.5 Security Mechanisms 1.6 Fundamental Security Design Principles 1.7 Attack Surfaces and Attack Trees 1.8 A Model for Network Security 1.9 Standards PART ONE: CRYPTOGRAPHY 2 Symmetric Encryption and Message Confidentiality 2.1 Symmetric Encryption Principles 2.2 Symmetric Block Encryption Algorithms 2.3 Random and Pseudorandom Numbers 2.4 Stream Ciphers and RC4 2.5 Cipher Block Modes of Operation 3 Public-Key Cryptography and Message Authentication 3.1 Approaches to Message Authentication 3.2 Secure Hash Functions 3.3 Message Authentication Codes 3.4 Public-Key Cryptography Principles 3.5 Public-Key Cryptography Algorithms 3.6 Digital Signatures PART TWO: NETWORK SECURITY APPLICATIONS 4 Key Distribution and User Authentication 4.1 Remote User Authentication Principles 4.2 Symmetric Key Distribution Using Symmetric Encryption 4.3 Kerberos 4.4 Key Distribution Using Asymmetric Encryption 4.5 X.509 Certificates 4.6 Public-Key Infrastructure 4.7 Federated Identity Management 5 Network Access Control and Cloud Security 5.1 Network Access Control 5.2 Extensible Authentication Protocol 5.3 IEEE 802.1X Port-Based Network Access Control 5.4 Cloud Computing 5.5 Cloud Security Risks and Countermeasures 5.6 Data Protection in the Cloud 5.7 Cloud Security as a Service 5.8 Addressing Cloud Computing Security Concerns 6 Transport-Level Security 6.1Web Security Considerations 6.2 Transport Layer Security 6.3 HTTPS 6.4 Secure Shell (SSH) 7 Wireless Network Security 7.1 Wireless Security 7.2 Mobile Device Security 7.3 IEEE 802.11 Wireless LAN Overview 7.4 IEEE 802.11i Wireless LAN Security 8 Electronic Mail Security 8.1 Internet Mail Architecture 8.2 E-mail Formats 8.3 E-mail Threats and Comprehensive E-mail Security 8.4 S/MIME 8.5 Pretty Good Privacy 8.6 DNSSEC 8.7 DNS-Based Authentication of Named Entities 8.8 Sender Policy Framework 8.9 DomainKeys Identified Mail 8.10 Domain-Based Message Authentication, Reporting, and Conformance 9 IP Security 9.1 IP Security Overview 9.2 IP Security Policy 9.3 Encapsulating Security Payload 9.4 Combining Security Associations 9.5 Internet Key Exchange 9.6 Cryptographic Suites PART THREE: SYSTEM SECURITY 10 Malicious Software 10.1 Types of Malicious Software (Malware) 10.2 Advanced Persistent Threat 10.3 Propagation—Infected Content—Viruses 10.4 Propagation—Vulnerability Exploit—Worms 10.5 Propagation—Social Engineering—Spam E-mail, Trojans 10.6 Payload—System Corruption 10.7 Payload—Attack Agent—Zombie, Bots 10.8 Payload—Information Theft—Keyloggers, Phishing, Spyware 10.9 Payload—Stealthing—Backdoors, Rootkits 10.10 Countermeasures 10.11 Distributed Denial of Service Attacks 11 Intruders 11.1 Intruders 11.2 Intrusion Detection 11.3 Password Management 12 Firewalls 12.1 The Need for Firewalls 12.2 Firewall Characteristics and Access Policy 12.3 Types of Firewalls 12.4 Firewall Basing 12.5 Firewall Location and Configurations

Modalità d'esame

Colloquio orale della durata media di 30 minuti su argomenti di tutto il programma che evidenzia le capacità espositive dello studente, le sue capacità d'utilizzo appropriato di tecniche e nozioni fondamentali e l'approfondimento dello studio. Possibilità di specifici progetti o seminari. Su richiesta dello studente l'esame può' essere sostenuto in lingua Italiana o Inglese. Per informazioni sui servizi di supporto agli studenti con disabilità e/o DSA visita la pagina http://www.unipg.it/disabilita-e-dsa

Testi di riferimento

Network Security Essentials: Applications and Standards, Global Edition By: William Stallings Publisher: Pearson (Intl) Print ISBN: 9781292154855, 1292154853 eText ISBN: 9781292154916, 1292154918 Edition: 6th Copyright year: 2017 Cryptography and Network Security: Principles and Practice, G.E. - 8th Publisher: Pearson (Intl) Ed. ISBN9781292437477 Copyright year: 2024 Eventuale materiale integrativo fornito dai docenti.

Codice insegnamento 419804

Ingegneria Del Software 2° anno · 2° semestre · 6 CFU · INFO-01/A · 0 file

Il corso introduce i principi fondamentali dell’Ingegneria del Software, fornendo le basi teoriche e metodologiche per lo sviluppo sistematico di sistemi software di media complessità. L’insegnamento mira a sviluppare:…

Scheda dell'insegnamento

Obiettivi formativi

Il corso introduce i principi fondamentali dell’Ingegneria del Software, fornendo le basi teoriche e metodologiche per lo sviluppo sistematico di sistemi software di media complessità. L’insegnamento mira a sviluppare: comprensione dei principali modelli di processo software; capacità di analisi e specifica dei requisiti; competenze di base nella progettazione architetturale; capacità di modellazione tramite UML; conoscenza e applicazione dei principali Design Patterns; consapevolezza delle problematiche di qualità, testing e manutenzione del software. Il corso integra aspetti teorici e applicativi attraverso esercitazioni e attività progettuali.

Programma

Il corso fornisce una visione completa dell’Ingegneria del Software, affrontando principi, metodologie, tecniche e strumenti per l’analisi, progettazione, sviluppo e manutenzione di sistemi software complessi. La prima parte introduce i fondamenti dell’ingegneria del software, i modelli di processo (Waterfall, Incrementale, Agile, DevOps), l’ingegneria dei requisiti, le tecniche di raccolta e tracciabilità, la progettazione architetturale, la qualità del software, il testing e la gestione dell’evoluzione e della configurazione. La seconda parte è dedicata alla modellazione UML: diagrammi dei casi d’uso, delle classi, delle sequenze, delle attività e delle macchine a stati, con applicazione pratica tramite mini-progetto. La terza parte approfondisce i Design Patterns (GoF), suddivisi in creazionali, strutturali e comportamentali, con analisi dei pattern più rilevanti e applicazione progettuale in un progetto finale conclusivo.

Conoscenze di base di programmazione (preferibilmente orientata agli oggetti), strutture dati e fondamenti di informatica.

Lezioni frontali con supporto di slide, discussione di casi studio reali, esercitazioni guidate in aula, workshop sulla modellazione UML e sviluppo di un mini-progetto e di un progetto finale. Sono previste attività interattive e momenti di confronto su esempi applicativi.

Il corso è articolato in tre parti: Parte 1 – Software Engineering Introduzione all’ingegneria del software e ciclo di vita; modelli di processo (Waterfall, Incrementale, Agile, DevOps); ingegneria dei requisiti e tecniche di raccolta; tracciabilità; progettazione architetturale (MVC, 3-tier); qualità e metriche; testing (unit, integration, system, acceptance); evoluzione, manutenzione, refactoring e gestione della configurazione. Parte 2 – UML @ Classroom Introduzione a UML e strumenti di modellazione; diagrammi dei casi d’uso; diagrammi delle classi; diagrammi delle macchine a stati; diagrammi di sequenza; diagrammi di attività; revisione complessiva e mini-progetto. Parte 3 – Design Patterns Catalogo GoF; pattern creazionali (Factory Method, Abstract Factory, Singleton, Builder, Prototype); pattern strutturali (Adapter, Facade, Composite, Decorator, Proxy, Bridge); pattern comportamentali (Strategy, Observer, Command); applicazioni avanzate e progetto finale.

Modalità d'esame

La verifica dell’apprendimento prevede: L’utilizzo della piattaforma libreeol per le seguenti prove : - Esonero intermedio, non obbligatorio, al termine della seconda parte. Il superamento di tale prova consentirà di sostenere l’esame finale sulla sola ultima parte (Design Patterns) esclusivamente nel primo appello di esame dopo la fine del corso. - Esame finale Prova orale finale volta ad accertare la comprensione teorica e la capacità di applicazione pratica dei concetti trattati.

Testi di riferimento

  • Ian Sommerville, Software Engineering, Pearson. - Martina Seidl et al., UML @ Classroom, Springer. - Alexander Shvets, Dive into Design Patterns.

Codice insegnamento 419808

Programmazione Ii 2° anno · 1° semestre · 6 CFU · INFO-01/A · 0 file

Comprendere i concetti base di Python Comprendere variabili, tipi e liste Comprendere come usare le liste e le strutture di controllo evitando errori comuni Comprendere funzioni e classi e come utilizzarle Comprendere…

Scheda dell'insegnamento

Obiettivi formativi

Comprendere i concetti base di Python Comprendere variabili, tipi e liste Comprendere come usare le liste e le strutture di controllo evitando errori comuni Comprendere funzioni e classi e come utilizzarle Comprendere come testare la propria applicazione

Programma

Concetti di base di Python Variabili e tipi di dati Liste Strutture di controllo Funzioni Classi Files e Eccezioni Testing del codice Progetti

Nessuno

-Lezioni frontali -esercitazioni

Introduzione a Python 1)Concetti di base -Impostare l’ambiente di programmazione -Python in diversi sistemi operativi -Eseguire il programma di Hello World -Troubleshooting 2)Variabili e tipi di dati -Variabili -Stringhe -Numeri -Commenti 3)Introduzione alle liste -Cosa è una lista? -Modificare, aggiungere e rimuovere elementi -Organizzare una lista -Evitare gli errori quando si lavora con le liste 4)Lavorare con le liste -Looping in un’intera lista -Evitare errori di indentazione -Costruire liste numeriche -Lavorare con parti di una lista -Tuples 5) If statements -Tests condizionali -Usare if Statements con liste 6) Dictionaries -Lavorare con i Dictionaries -Looping su di un Dictionary -Nesting 7) User input e cicli while -Introduzione -Usare cicli while per Lists and Dictionaries 8)Funzioni 9)Classi 10)Files and Exceptions 12)Testing del codice 13)Progetti

Modalità d'esame

Esame scritto

Testi di riferimento

Python crash course, 3rd edition. a Hands-On, Project-Based Introduction to Programming by Eric Matthes Imparare Python.Mark Lutz

Codice insegnamento 419799

Sistemi Elettronici E Sensori Per L'Informatica 2° anno · 1° semestre · 6 CFU · PHYS-01/A · 0 file

Familiarizzare lo studente, sia sotto il profilo teorico che sperimentale, con il trattamento dei segnali, la conversione analogico/digitale, il loro studio in frequenza. Familiarizzare lo studente con le caratteristiche…

Scheda dell'insegnamento

Obiettivi formativi

Familiarizzare lo studente, sia sotto il profilo teorico che sperimentale, con il trattamento dei segnali, la conversione analogico/digitale, il loro studio in frequenza. Familiarizzare lo studente con le caratteristiche e funzionalità di chip logici digitali programmabili (FPGA, Field Programmable Gate Array)

Programma

Utilizzo di tecnologie hardware e software per lo studio, analisi e gestione dei segnali digitalizzati

Per poter seguire con profitto il corso è necessario aver sostenuto gli esami di Analisi Matematica e Fisica Generale, o comunque avere familiarità con gli argomenti trattati nei due corsi. Conoscenze base di programmazione

Lezioni in aula su tutti gli argomenti del corso. Esercitazioni di laboratorio per lo studio sperimentale delle caratteristiche dei segnali con la realizzazione di semplici applicativi software. Le esercitazioni di laboratorio saranno svolte in gruppi di massimo tre studenti. Al termine delle esercitazioni guidate gli studenti avranno libero accesso al laboratorio per ulteriori esercitazioni, se necessario

Definizione di segnale, classificazione dei tipi di segnali. Trasformata di Fourier di segnali continui e discreti. Proprietà della trasformata di Fourier. Condizione di Nyquist e teorema del campionamento. Risposta impulsiva e in frequenza di un sistema. Definizione di Decibel. Filtri: passa basso, passa alto, passa banda e elimina banda. Conversione analogico/digitale e trattamento dei segnali digitali. Sviluppo di applicativi Python per lo studio dei segnali. Caratteristiche e uso di FPGA. Il linguaggio Verilog e sviluppo di semplici programmi.

Modalità d'esame

L'esame prevede una prova orale e l'esposizione di un elaborato tecnico. La prova orale consiste in una discussione della durata di circa 30 minuti finalizzata ad accertare il livello di conoscenza e di comprensione, da parte dello studente, degli argomenti indicati nel programma. La prova orale sarà finalizzata anche alla verifica della capacità dell'allievo di esprimersi con proprietà di linguaggio sugli argomenti della discussione. La prova consiste inoltre nella discussione di un elaborato tecnico, realizzato individualmente o in gruppo, sulle attività di laboratorio svolte durante il corso. Nel caso in cui lo studente intenda anticipare l’esame in un anno precedente a quello programmato nel piano di studio, si raccomanda di frequentare il ciclo delle lezioni e di sostenere l’esame nel primo appello utile dopo che le lezioni medesime siano terminate, nel rispetto quindi del semestre di programmazione dell’insegnamento

Testi di riferimento

Teoria dei segnali analogici (3ed) - M. Luise, G.M. Vitetta - McGraw-Hill Signal Processing and Linear Systems – B.P. Lathi, R. Green - Oxford University Press Presentazioni fornite dal docente (disponibili su UniStudium) Lo studente può usare qualunque testo su digital signal processing

Codice insegnamento 419802

Machine Learning 1° semestre · 6 CFU · INF/01 · 0 file

Recensioni del corso

Studi qui? Accedi per lasciare la tua recensione e aiutare altri studenti a scegliere.

★

Nessuna recensione per ora — e la prima è la più preziosa. Condividi la tua esperienza e orienta le future matricole.