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
    • Testi di riferimento: Vedi schedule del corso

  • Homeworks
    • Testi di riferimento: Vedi schedule del corso


  • Anno accademico2026/2027
  • Corso di studio a cui afferisce l’insegnamentoInformatica
  • CurriculumTecnologico
  • Linguaita
  • CFU12 CFU distribuiti in 2 moduli didattici integrati
  • Durata complessiva120 ore