SISTEMI OPERATIVI canale 1

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
PAOLO ZULIANI
PAOLO ZULIANI

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
Alla fine del corso lo studente avra' appreso:
- l'architettura generale di un sistema operativo tipi Unix/Linux
- l'uso della linea di comando in Unix/Linux
- i principi base della programmazione in C
- programmazione di sistema in Unix/Linux

Inoltre, lo studente sara' in grado di sviluppare applicazioni C di media complessita' in grado di interfacciarsi con Unix/Linux.

Prerequisiti

Modulo: I MODULO
N/D
Modulo: II MODULO
Nessuno requisito. E' consigliato aver sostenuto il modulo I.

Programma dell’insegnamento

Modulo: I MODULO
N/D
Modulo: II MODULO
Sistema operativo e kernel
Unix/Linux shell e suo uso
File system
Processi
Linguaggio C
Programmazione di sistema

Testi di riferimento

Modulo: I MODULO
N/D
Modulo: II MODULO
B. Kernighan & D. Ritchie, “Il Linguaggio C”, Jackson Libri o Pearson
W. Stevens & S. Rago. Advanced Programming in the UNIX Environment. 3a edizione, Addison-Wesley


Bibliografia

Modulo: I MODULO
N/D
Modulo: II MODULO
W. R. Stevens, S. A. Rago, “Advanced Programming in the UNIX  Environment 3rd ed.”, Addison-Wesley
G. Glass, K. Ables, “Linux for Programmers and Users”, Prentice Hall
C.F.A. Johnson, J. Varma, “Pro Bash Programming”, Apress

Modalità di svolgimento

Modulo: I MODULO
N/D
Modulo: II MODULO
Lezioni in laboratorio informatico.

Frequenza

Modulo: I MODULO
N/D
Modulo: II MODULO
Consigliata.

Modalità di esame

Modulo: I MODULO
N/D
Modulo: II MODULO
Questionario a risposta multipla.

(Opzionale) Sviluppo di un programma C di media complessità.

Date appelli ordinari:

09/06/2025
10/07/2025
04/09/2025


Esempi di domande

Modulo: I MODULO
N/D
Modulo: II MODULO
Esempi di testi d'esame verranno discussi a lezione e messi sul sito del corso.

Programmazione delle attività didattiche

Modulo: I MODULO
N/D
Modulo: II MODULO

  • Storia di Unix. Primi passi con shell e utenti (settimana 1).

  • Il file system e principali comandi per la gestione dei file (settimana 2).

  • I processi in Unix (settimana 3).

  • Introduzione al linguaggio C (settimana 4).

  • Cicli e array in C (settimana 5).

  • Funzioni e stringhe in C; make e makefiles (settimana 6).

  • Allocazione dinamica della memoria; strutture; file I/O (settimana 7).

  • Programmazione di sistema (settimana 8).

  • Chiamate di sistema; funzioni e variabili esterne (settimana 9).

  • Comunicazione interprocessi: segnali, pipe, fifo (settimana 10).

  • Comunicazione interprocessi: socket (settimana 11).

  • Multiprogrammazione: threads (settimana 12).


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