SISTEMI OPERATIVI canale 2
Docente coordinatore e verbalizzante: N/D
Modulo 1: I MODULO
- Tipologia
- Discipline Informatiche
- SSD
- INF/01
- Anno
- N/D
- Semestre
- N/D
- CFU
- 6
- Distribuzione delle ore
- 36 classroom hours, 24 training hours
- Docenti
Modulo 2: II MODULO
- Tipologia
- Discipline Informatiche
- SSD
- INF/01
- Anno
- N/D
- Semestre
- N/D
- CFU
- 6
- Distribuzione delle ore
- 36 classroom hours, 24 training hours
- Docenti
- EMILIANO CASALICCHIO
EMILIANO CASALICCHIO
Obiettivi formativi
Obiettivi generali:
Il corso ha come obiettivi i concetti, la struttura, e i meccanismi dei sistemi operativi. Verranno trattate caratteristiche fondamentali, presenti fin dai sistemi più tradizionali, ma anche peculiarità dei sistemi moderni che nascono come conseguenza dell’evoluzione ricorrente della tecnologia.
Conoscere ed usare l'interfaccia di programmazione fra sviluppatore software e kernel relativamente ai servizi base di accesso alle risorse del sistema operativo Linux.
Obiettivi specifici:
Caratteristiche e concetti dei sistemi operativi moderni, con particolare riferimento ai sistemi Unix e Linux. Si inizierà con una descrizione dell’evoluzione dei sistemi operativi nel tempo, per continuare con concetti fondamentali come i processi, lo stallo, e relativi meccanismi di prevenzione, la concorrenza tra processi, la gestione della memoria, processore e I/O, i file system e la sicurezza.
Conoscere i concetti (processi, espressioni regolari, file system) e i comandi shell più importanti di Linux. Saper creare script in Bash. Saper scrivere programmi C che usino le system call di Linux.
Conoscenza e comprensione:
Capire in modo profondo come i sistemi operativi danno supporto all’esecuzione dei programmi degli utenti e gestiscono le periferiche hardware di un computer. Metodi e tecniche fondamentali per la rappresentazione dei processi in memoria e la gestione efficiente di multiprogrammazione—molteplici processi eseguiti contemporaneamente in un sistema con risorse limitate.
Conoscenza del funzionamento interno del sistema operativo Linux. Conoscenza del funzionamento della shell Bash. Fondamenti del linguaggio C. Conoscenza delle principali system call di Linux.
Applicare conoscenza e comprensione:
Progettare programmi a livello utente e di sistema in modo efficiente e sicuro.
Saper creare script in Bash in grado di risolvere problemi pratici. Saper scrivere programmi in C che sfruttino le system call di Linux per ottimizzare l'uso delle risorse.
Capacità critiche e di giudizio:
Essere in grado di predire l’uso delle risorse richieste da un programma, di scoprire una possibile situazione di stallo in un sistema multiprogrammato, garantire la mutua esclusione tra processi e l’accesso protetto a zone di memoria o risorse sensibili.
Saper valutare la soluzione più appropriata per ottenere un determinato risultato, usando o singoli comandi shell, o uno script Bash, o un programma C basato su system call di Linux.
Capacità comunicative:
Saper comunicare in modo chiaro e preciso le caratteristiche dei sistemi operativi e i loro meccanismi di supporto software/hardware.
Essere in grado di comunicare e documentare script Bash e programmi C basati su system call di Linux.
Capacità di apprendimento:
Saper sfruttare la conoscenza acquisita nella progettazione di sistemi e di programmi utente nel modulo successivo del corso. Essere in grado di usare questa conoscenza nell’apprendimento di proprietà di sistemi più complessi come quelli distribuiti e cloud.
Essere in grado di usare i concetti appresi in corsi avanzati da sistemista aziendale, o in un eventuale corso avanzato che richieda interazione con Linux, come ad es.: programmazione di sistema, cloud computing, sistemi distribuiti, cybersecurity.
Risultati di apprendimento attesi
Modulo: I MODULO
N/D
Modulo: II MODULO
Lo studente apprendera'
- i fondamenti dalla programmazione C
- i fondamentei della programmazione di sistema in Linux
Prerequisiti
Modulo: I MODULO
N/D
Modulo: II MODULO
Sistemi Operativi I modulo
Programma dell’insegnamento
Modulo: I MODULO
N/D
Modulo: II MODULO
Introduzione al corso, storia del sistema operativo linux, Cenni Basilari Sulla Shell;
- Il File system
- I Processi
Introduzione al C
- Loop statements; Array, stringhe, controllo di flusso, esercizi, I/O da stdin, Allocazione dinamica, Struct, File I/O
System programming;
- System call gestione memoria e file (open(), close(), read(), write(), dup, stat, chmod, chown); "
- System call gestione processi
- System call IPC (Signals, PIPE, FIFO; socket)
- Thread: (libreria PThread: creazione, gestione e sincronizzazione dei thread)
GDB + Makefile; Bash: Scripting, variabili di ambiente
Testi di riferimento
Modulo: I MODULO
N/D
Modulo: II MODULO
- Materiale presentato a lezione (slides e codice)
- W. R. Stevens, S. A. Rago, “Advanced Programming in the UNIX Environment 3rd ed.”, Addison-Wesley
Bibliografia
Modulo: I MODULO
N/D
Modulo: II MODULO
• Glass, Ables, “Linux for Programmers and Users", Prentice Hall
• Johnson, “Pro Bash Programming", Apress
• B. Kernighan e D. Ritchie, “Il Linguaggio C", Jackson Libri
Modalità di svolgimento
Modulo: I MODULO
N/D
Modulo: II MODULO
Lezioni in laboratorio: presentazioni concetti fondamentali, esperienze pratiche
Frequenza
Modulo: I MODULO
N/D
Modulo: II MODULO
La frequenza del corso è fortemente consigliata
Modalità di esame
Modulo: I MODULO
N/D
Modulo: II MODULO
La valutazione avviene per mezzo di
- Esame Scritto. L'esame consiste in un test a risposta multipla su tutti gli argomenti del corso.
- Homework (uno su programmazione C e uno su Programmazione di Sistema)
Esempi di domande
Modulo: I MODULO
N/D
Modulo: II MODULO
N/D
Programmazione delle attività didattiche
Modulo: I MODULO
N/D
Modulo: II MODULO
- Esercitazioni di laboratorio
- Homeworks
- Anno accademico2026/2027
- Corso di studio a cui afferisce l’insegnamentoInformatica
- CurriculumTecnologico
- Linguaita
- CFU12 CFU distribuiti in 2 moduli didattici integrati
- Durata complessiva120 ore