Diario delle Lezioni
A.A. 2023/2024

Sistemi Operativi e Lab.
Ingegneria Informatica - Laurea Triennale


Data
Argomento
Tipo
N Ore
Riferimento
Lun. 26/02/2024
Spiegazione dell'orario e dell'organizzazione delle lezioni/esercitazioni. Illustrazione di Moodle: la sezione delle slide (comunicazione della password di lettura) e del sito: oltre le slide, il registro on-line delle lezioni. Introduzione al corso: programma, modalità di esame (con date fino a Settembre 2023); liste esami su ESSE3, ma necessità di registrazione all'applicazione per gli esami per gestione voti esami; testi consigliati (Slide Programma).
Generalità su cosa è un Sistema Operativo e, soprattutto, su cosa fa un Sistema Operativo. Definizione di Multiprogrammazione e di Sistema Operativo Multiprogrammato: introduzione al concetto di processo (entità attiva che esegue un programma, entità passiva) e ai vari 'tipi' di processi (I-O bound e CPU bound). Definizione di Multiprocesso e di Multiutenza. Brevemente il caso dei Sistemi Operativi Time-sharing (scheduling a quanti di tempo). Sistema Operativo come gestore delle risorse; punti di vista esterno ed interno nello studio di un S.O. (Slide Introduzione sui SO, 1-7)
L
2
Mer. 28/02/2024
GENERALITÀ - Ripreso brevemente i vari gestori di un Sistema Operativo visti alla fine della lezione precedente.
Gestore dei processi (Nucleo/Kernel). Ripreso concetto di processo, spiegato processi utente e processi di sistema, funzioni tipiche di un kernel (in particolare scheduling). Stati di un processo (esecuzione, sospeso e pronto) e transizioni di stato, descrittore di processo (code dei processi pronti e code di sospensione) e cambio di contesto (Slide Introduzione sui SO, 7-9).
Algoritmi di scheduling non preemptive e preemptive; esempi di algoritmi di scheduling: algoritmo round-robin basato su quanti di tempo (preemptive con uso di un timer); algoritmo di scheduling a priorità statica basato su più code, una per ogni livello di priorità, algoritmo a priorità dinamica con uso di quanti di tempo differenti e meccanismi di penalizzazione/promozione con priorità che quindi cala o cresce sulla base del consumo del quanto di tempo (Slide Introduzione sui SO, 10-12).
Introdotto i due tipi di interazione fra processi in ambito di programmazione concorrente: interazione indiretta o competizione e interazione diretta o cooperazione (Slide Introduzione sui SO, 13).
Problema del deadlock (Slide Introduzione sui SO, 14-15).
Praticamente saltato Gestore dei dispositivi di I/O (Slide Introduzione sui SO, 16).
Gestore della memoria centrale: in particolare gestione della allocazione con tecnica della paginazione (TDP, traduzione indirizzi logici in fisici e cache delle pagine). Memoria virtuale, in particolare gestione basata su segmentazione paginata (Slide Introduzione sui SO, 16-19).
Molto veloce Gestione della memoria secondaria (Slide Introduzione sui SO, 20).
Gestione interfaccia utente: interfacce grafiche e testuali (Slide Introduzione sui SO, 21).
L
2
Gio. 29/02/2024
FILE SYSTEM - Definizione di file, funzioni tipiche del gestore, tipi di file. Punto di vista dell'utente con illustrazione veloce dei principali comandi. Concetto di descrittore di file e di directory (derivazione da telephone directory). Strutturazione delle directory: Directory ad albero (nome assoluto, relativo alla directory corrente e relativo semplice) e a grafo (concetto di Link) (Slide File System, 1-7).
UNIX - Introduzione: storia e connessione con Linguaggio di Programmazione (di sistema) C; Unix come sistema operativo multigrammato (e multiprocesso) e multiutente (Slide UNIX-Shell 1).
Fase di autenticazione: necessità di login e logout (Slide UNIX-Shell 2): concetto di terminale (nelle lezioni se ne userà uno virtuale).
File in UNIX: file come stream di byte e come astrazione unificante per file ordinari, directory e file speciali come i dispositivi (contenuti in /dev) (Slide UNIX-Shell 3). Struttura del File System di UNIX: directory tipiche (Slide UNIX-Shell 3).
Spiegazione della fase di autenticazione: file /etc/passwd con suo formato (comando cat per visualizzare un file di testo) e file /etc/shadow (Slide UNIX-Shell 4 e 5).
Shell - Uso di PC collegato ad un server Linux. Nel seguito fra parentesi si indicano le slide su "UNIX e la Shell" cui il registro fa riferimento.
Mostrato sul server Linux la fase di autenticazione; le directory tipiche della directory radice (/). Mostrato file /etc/passwd in due modi e quindi mostrato risultato del comando cd per cambiare directory e del comando pwd per visualizzare la directory corrente (all'inizio è la HOME directory: comando echo $HOME). Mostrato che non è possibile visualizzare il file /etc/shadow (Slide 5): precisazione sull'utente 'root' e spiegazione sudoers. Comando id per vedere UID e GID.
Dimostrazione della multi-utenza: collegamento anche con un secondo account (sonod) e mostrato di nuovo comando id e comando who (anche versione w).
Esempio di utente che ha un comando 'strano' inserito nel file /etc/passwd invece che una shell (Slide 5): prova di collegamento di questo utente.
Spiegazione funzionamento della shell come processore comandi con, in genere, creazione di un processo figlio (sotto-shell) che esegue il comando (Slide 6): verifica con uso del comando ps. Introdotto alcune opzioni del comando ps: a) -f che mostra la relazione di parentela; b) -l con anche stato; c) -e per vedere tutti i processi. Precisazione su significato di R del ps -l: Running e Runnable e quindi Ready! Comandi which e whereis per avere indicazioni dove si trova l'eseguibile e, nel secondo caso, anche il manuale. Quindi, introdotto il comando man (manual) (Slide 8).
L
4
Lun. 04/03/2024
Shell - Ripreso concetto di HOME directory e introdotto la variabile di ambiente HOME e il comando echo $HOME.
Ripreso funzionamento della shell come processore comandi: di nuovo comando ps con le opzioni -lf. Possibilità di 'lanciare' quindi usare diverse shell (Slide 8): verifica dei rispettivi processi con comando ps.
Ripreso organizzazione del File System e nomi di file assoluti, relativi alla directory corrente e relativi semplici (Slide 9). Nomi di file molto lunghi e con più caratteri punto: introdotto comando ls (list).
Caso particolare di nomi che iniziano con il carattere punto: uso di opzione -A di ls per visualizzare questi nomi "nascosti". Spiegato perché di questa scelta, introducendo i due elementi sempre presenti in ogni directory: "." e ".." e il loro effetto sull'albero che diventa un grafo e mostrato esempi di uso: in particolare, ls -a, cd .. o cd ../.. (sempre Slide 9). Mostrato simulazione della gerarchia della Slide 9 (comando ls -R, cioè ricorsione). Approfondimento su ls: varie opzioni (Slide 10); esempi di ls -r, ls -t, ls -F e ls -l e spiegato nel dettaglio importanza di ls -d (Slide 10).
Metacaratteri principali trattati dalla shell (* e ?) (sempre Slide 9): spiegato concetto di pattern matching ed esempi di uso; mostrato effetto dell'uso di * e ? utilizzando sh -x.
Protezione dei file (Slide 11): diritti di accesso (r, w e x) per user, group e other e uso di ls -l (long). Concetto di superutente (root) e spiegato come avvengono i controlli: fatto vedere diritti di /etc/passwd e di /etc/shadow.
L
2
Mer. 06/03/2024
Shell - Ripreso discorso su protezione dei file (Slide 11): diritti di accesso (r, w e x) per user, group e other e uso di ls -l (long); fatto vedere accesso allo stesso file da parte di due utenti diversi, ma appartenenti allo stesso gruppo. Il comando chmod, versione simbolica ed ottale: mostrato esempio di uso sull'accesso ad un file. Significato dei diritti di accesso per le directory. Comandi chown e chgrp solo per il SUPERUTENTE (Slide 12).
Creazione di una directory (comando mkdir) e cancellazione di una directory(comando rmdir, solo con directory vuota). Copia di un file in una directory, copia normale, copia che preserva i timestamps del file sorgente e copia ricorsiva. Cancellazione di file (comando rm e importanza della opzione -i, interactive); opzione -r di rm per cancellazione ricorsiva e quindi anche di directory. Comando cat e comando more per visualizzare il contenuto di file di testo: differenze (Slide 13).
Generalizzazione del concetto di file (Slide. 8 del File System). Concetto di filtro e di standard input, standard output e standard error: associazioni di default e loro modifica con RIDIREZIONE (Slide 14, 15 e 16). Primi esempi di ridirezione in uscita e in append usando il comando pwd e ls. Comandi che possono essere usati sia come comandi normali che come comandi-filtri (di nuovo Slide 18). Uso come comandi-filtri, in particolare, per ridirezione in ingresso oltre che in uscita: in specifico, il filtro cat usato come semplice editor; concetto di EOF da tastiera (^D) e differenza dall'abort di un comando con ^C; cat usato come alternativa al comando cp.
L
2
Gio. 07/03/2024
Esercitazione in Laboratorio (S1) - Usato il LINFA allargato con l'aiuto di Silvia Cascianelli: si veda il documento Esercitazione7Marzo2024.pdf.
E
4
Lun. 11/03/2024
Shell - Ripreso discorso sulla ridirezione (Slide 14, 15 e 16). Ridirezione a vuoto: sia per azzerare un file che per crearlo (vuoto). Mostrato programma in C che si comporta come il comando-filtro cat: esempio di uso senza ridirezione e quindi con ridirezione in ingresso e anche in uscita.
Altri esempi di filtri (di nuovo Slide 14): comando/filtro more; comando/filtro sort [opzioni -r, reverse, -f, insensibile a maiuscole/minuscole, -c/-C, check se ordinato (spiegato valore di successo e di insuccesso con echo $?), -u, unique cioè ordinamento con eliminazione dei doppi]; comando/filtro grep [opzioni -n per vedere il numero d'ordine della linea nel file, -i per cercare il pattern maiuscolo o minuscolo, -v per invertire la ricerca e sintassi particolari come '^c' per cercare le linee che iniziano per c, 'a$' per cercare le linee che terminano per a, e infine '\.$' per cercare le linee che terminano con il carattere punto (necessità di usare il meta-carattere di escape \); comando/filtro wc (con opzioni -c, -w, -l e differenze fra filtro e comando); comandi/filtri head e tail (opzione con numero di linee); comando/filtro rev.
Chiarimento su numeri impliciti della ridirezione dello standard input e dello standard output. Ridirezione dello standard error (Slide 17) con esempi: in particolare, uso di /dev/null. (Slide 18 per ora saltato).
Piping: composizione di comandi/filtro (Slide 19 e 20). Realizzazione mediante più processi e canali di comunicazione. Esempi semplici con uso anche del filtro tee ed esempio che mostra la presenza di un processo per ogni comando in piping.
Sottolineato di non usare il piping quando non serve con precisazione sul comando more usato come comando in presenza di file eseguibili!
L
2
Mer. 13/03/2024
Shell - Introduzione alla programmazione in shell (Slide 21): in particolare, introdotto convenzione nei nomi dei file comandi (.sh) e spiegato necessità di introdurre lo shabang (#!/bin/sh).
Spiegato concetto di variabile di shell (Slide 22): valore come stringa, sintassi assegnamento e sintassi per riferire il valore.
Concetto di ambiente di shell (Slide 23 e 24): il processo SHELL generato per l'esecuzione di ogni comando riceve per copia l'ambiente dello shell padre (con ad esempio, PATH, HOME e directory corrente): comando env per visualizzare l'ambiente.
Differenza fra variabili di ambiente e variabili di shell: il comando export per passare una variabile di shell nell'ambiente ed esempio relativo (di fatto primo esempio di file comandi cioè di script e quindi spiegato come scriverlo con un editor e quindi impostargli il diritto di esecuzione). Mostrato che una modifica di una variabile di ambiente effettuata da un sotto-shell ha effetto solo per quel processo e non anche nel processo padre (con due altri file comandi, il secondo con le variabili di ambiente PATH, HOME e directory corrente).
Sostituzioni attuate dallo shell (Slide 25 e 26). Mostrati gli ulteriori metacaratteri [ ] con vari esempi (Slide 27). Introdotto il carattere ESCAPE (cioè il backslash \).
Ripreso concetto di variabile (Slide 28):Esempio di variabili shell con necessità sia di valutazione di comandi (uso di backquote ``) che del comando expr (con un altro file comandi): mostrato interattivamente tutte le operazioni (+,-,/,%,*; attenzione che si deve usare \*).
L
2
Gio. 14/03/2024
Esercitazione in Laboratorio (S2) - Usato il LINFA allargato con l'aiuto di Silvia Cascianelli: si veda il documento Esercitazione14Marzo2024.pdf.
E
4
Lun. 18/03/2024
FATTA UN'ORA DI RECUPERO PRIMA DELLA SOLITA LEZIONE E QUINDI IN TUTTO 3 ORE
Shell - Inibizione delle sostituzioni attuate dallo shell (Slide 29): esempi vari e necessità di eval.
Passaggio di parametri nei file comandi (Slide 30): $1, $2, $3, etc; spiegato significato di $0; spiegato comandi shift e set.
Introdotto quindi altre pseudo-variabili predefinite (Slide 30): $*, $#, $?, $$: mostrato esempio di file comandi (file provaPar) e suo funzionamento con 4 parametri e spiegato il funzionamento del comando shift. Mostrato un esempio di file comandi (file DIR.sh) con uso della pseudo-variabile/parametro $0 e varie invocazioni. Ripreso concetto di return code dei comandi (Slide 31).
La struttura di controllo if per realizzare l'alternativa semplice (Slide 32): primi esempi semplici (file if1.sh, if2.sh e if3.sh). Introdotto il comando test (Slide 33): altri esempi di if (if4.sh e if5.sh). LASCIATO DA GUARDARE AGLI STUDENTI la differenza di test -eq e di test =. Altri esempi di if anche con il comando read (Slide 34, file LeggiEMostra.sh): uso di ridirezione per i file comandi e necessità di ridirezione su /dev/tty.
La struttura di controllo case per realizzare l'alternativa multipla (Slide 35): primo esempio di uso che consente maggiore flessibilità nella interazione con l'utente (file readCase.sh).
Struttura di controllo per i cicli enumerativi: for (Slide 36). Mostrato diversi esempi (file for1.sh, for1-conConteggio.sh e crea.sh). Altri esempi di liste usabili nei for (file for4.sh e for4Bis.sh).
Lasciato da guardare agli studenti le altre strutture di controllo per i cicli non enumerativi: while e until (Slide 37): un esempio ciascuno (file ce.sh e ceUtente.sh).
L
3
Mer. 20/03/2024
Shell - Discorso generale di come strutturare le soluzioni (presentazione powerpoint): due file comandi, uno iniziale e uno ricorsivo dato che la struttura gerarchica del file system è una struttura dati ricorsiva e spiegato la necessità del file iniziale per controlli, preparazione dell'ambiente (settaggio della variabile di ambiente PATH e suo export) e invocazione del file ricorsivo. Primo esempio di ricerca di un file in una gerarchia con due file comandi: illustrato il primo file comandi (Slide 38, file Beginc.sh) e tutti i controlli. Esempi di invocazioni sbagliate/corrette lasciate da guardare agli studenti.
Mostrato secondo file comandi, quello ricorsivo, nella versione con ricerca breath-first (Slide 39, file Cercafile.sh): mostrato tramite una presentazione powerpoint passo-passo quello che succede nelle varie attivazioni ricorsive su una semplice gerarchia. Lasciato da guardare agli studenti cosa succede nel caso di ricerca in DEPTH-FIRST.
Concetto di link (hardware) per i file (comando ln, Slide 40): comando ln. Spiegato come si realizza in UNIX il concetto di link: struttura directory (Slide 41) con i-number e i-node: mostrato uso di opzione -i di ls e spiegato significato seconda colonna mostrata da -l (cioè numero di link). Spiegato contenuto dell'I-NODE velocemente, ma in particolare numero di link (Slide 42). Lasciato da verificare che. cambiando il file dal link. il cambiamento è visibile anche dal link originale. Differenze con il comando cp per copiare file.
Ripreso comando rm, ma spiegato che in realtà opera la cancellazione di un link e, se numero di link uguale a zero, anche del contenuto del file (Slide 41).
Comando per spostare i file o semplicemente rinominarli (comando mv): spiegazione in base ai comandi ln e rm (Slide 41).
L
2
Gio. 21/03/2024
Esercitazione in Laboratorio (S3) - Usato il LINFA allargato con l'aiuto di Silvia Cascianelli: si veda il documento Esercitazione21Marzo2024.pdf.
E
4
Lun. 25/03/2024
Shell - Ripreso discorso su organizzazione a grafo del file system e discorso dei link hardware e loro implementazione (I-NUMBER e I-NODE) . Quindi mostrato funzionamento dei link hardware per le directory.
Concetto di link software per file e directory (comando ln -s) e differenza rispetto al link hardware (slide 42): in particolare, mostrato comportamenti diversi in caso di cancellazione link software e di cancellazione del file (dangling reference); necessità di uso per le directory e per creare link in gerarchie residenti su dispositivi fisici diversi. Presentato esercizio che conta tutti i file presenti in una gerarchia: mostrato in modo approfondito la versione (ver1) con file temporaneo globale che raccoglie tutti i nomi assoluti dei file contati e stampa il loro nome assoluto nel file comandi principale e mostrato il contenuto del file comandi ricorsivo. Lasciato come esercizio di guardare le altre versioni: versione con variabile di ambiente e valore di ritorno (ver2), versione con variabile di shell e valore di ritorno (ver3) e versione con uso di scrittura e lettura in un file temporaneo globale del valore del conteggio (ver4).
Esecuzione di comandi in background (Slide 44 e 45): problema di ridirezione standard output e standard error (consigliate) e dello standard input (necessaria almeno in Bourne shell!). Uso del comando kill.
Altri comandi: date, diff con dettaglio sul valore di ritorno (Slide 46); lasciato da guardare il comando find, ma precisazione che non va usato nelle soluzioni dei compiti!
L
2
Mer. 27/03/2024
Shell - Svolta la parte SHELL di 3 esercizi di esame:
1) Soluzione della prima prova in itinere del 7 Aprile 2017 (presenza di nome relativo semplice di file, con conteggio globale dei file sorted creati): spiegato tramite una presentazione powerpoint il testo, i requisiti del problema, una invocazione di prova e due gerarchie di prova; mostrato file FCP.sh e FCR.sh e funzionamento sulle due gerarchie di prova.
2) Soluzione della parte in Shell del 18 Gennaio 2017 (presenza di nome relativo semplice di directory): mostrato file 18Gen17.sh e FCR.sh e funzionamento sulla gerarchia di prova.
3) Soluzionedella parte in Shell del 17 Gennaio 2018 (presenza di numeri > 0 e singolo carattere); spiegato tramite una presentazione powerpoint il testo e mostrato file FCP.sh e FCR.sh e funzionamento sulla gerarchia di prova, oltre ai casi di errore per il secondo e terzo parametro e per il quarto parametro.
L
2
Mer. 03/04/2024
Shell - ULTIMA LEZIONE SULLA SHELL.
Svolta la parte SHELL di 3 esercizi di esame:
1) Soluzione parte SHELL dell'esame del 7 Settembre 2022 (concetto di posizione di file all'interno di una directory): spiegato tramite una presentazione powerpoint il testo, i requisiti del problema; mostrato file FCP.sh e FCR.sh e funzionamento su tre gerarchie di prova.
2) Soluzione della prima prova in itinere dell'11 Aprile 2014 (necessità di tanti file temporanei): spiegato tramite una presentazione powerpoint il testo, i requisiti del problema, una invocazione di prova e due gerarchie di prova; mostrato file fasi.sh e FCR.sh e funzionamento sulle due gerarchie di prova.
3) Soluzione della prima prova in itinere del 13 Aprile 2012 (due fasi A/B e conteggio livelli delle gerarchie): spiegato tramite una presentazione powerpoint il testo, i requisiti del problema, una invocazione di prova e una gerarchia di prova con 4 livelli; mostrato ver1 della soluzione e quindi file fasi1e2.sh e FCR.sh e funzionamento sulla gerarchia di prova.
3) Soluzione della prima prova in itinere dell'15 Aprile 2016 (ricerca di directory foglia con ulteriore vincolo sui file): spiegato tramite una presentazione powerpoint il testo, i requisiti del problema, una invocazione di prova e tre gerarchie di prova; mostrato file fasi.sh e FCR.sh e funzionamento sulle tre gerarchie di prova.
Mostrato presentazione powerpoint in cui sono riportate le caratteristiche generali dei testi delle parti SHELL dei testi di esame con la classificazione degli esercizi visti finora e di quelli che verranno proposti alla prossima esercitazione (il file verrà caricato dopo l'esercitazione di domani).
Mostrato sul sito dell'insegnamento dove si trovano i due script che consentono di creare delle gerarchie di prova.
L
2
Gio. 04/04/2024
Esercitazione in Laboratorio (S5) - Quinta esercitazione perché la quarta esercitazione è quella data a casa per le Vacanze di Pasqua. Usato il LINFA allargato con l'aiuto di Silvia Cascianelli: si veda il documento Esercitazione4Aprile2024.pdf.
E
4
Lun. 08/04/2024
Visione di insieme punti di vista esterno: shell e linguaggio C; accenno a punto di vista interno.
Il linguaggio C come linguaggio di sistema (Slide C/UNIX 1-3): caratteristiche di basso livello ed interazione con il sistema operativo UNIX. Spazio di indirizzamento di un processo: introdotto area dati, area codice e area Kernel: per quest'ultima, spiegato argc, argv e envp (con parallelismo con i concetti della shell), introdotto tabella dei file aperti. Spiegato cosa sono le primitive. Presentato in generale le operazioni di sistema (PRIMITIVE) per accedere ai file (Slide File System 9-11): creazione/cancellazione e lettura/scrittura; ottimizzazione: apertura/chiusura. Visione di basso livello dei file per UNIX/LINUX (Slide C/UNIX 4-6) e operazioni su file: creat, open, close. Tabella dei file aperti (TFA) per ogni processo ===> file descriptor (o handle) come indice della TFA. File descriptor per standard input, output ed error. Note su close e open/creat (Slide C/UNIX 7). Spiegato velocemente uso del man anche per le primitive (in particolare sezione 2, man -s 2 <primitiva>). Esempi di apertura: 1) di un file con stampa del file descriptor ritornato dalla open con verifica anche di rassegnazione dello stesso fd in seguito ad una close; 2) ripetuta dello stesso file per calcolare la dimensione della TFA di ogni processo. Discorso generale sui metodi di accesso: spiegato il metodo di accesso sequenziale (concetto di file pointer o I/O pointer) (Slide File System 12). Ripreso concetto di File pointer in C/UNIX (Slide C/UNIX 9) e introdotto le operazioni di basso livello sui file in UNIX/LINUX (Slide C/UNIX 10): read e write. Osservazioni importanti sui tipi di dati che possono essere letti da e scritti su file (Slide C/UNIX 11).
L
2
Mer. 10/04/2024
File C - Esempi di read e write: a) copia di file con parametri e controlli (Slide 15) con spiegazione di BUFSIZ ; b) copia di file con PERM diversi e spiegazione su influenza di umask che può avere effetto sui diritti specificati all'atto della creazione; c) copia con ridirezione (Slide C/UNIX 16); d) Implementazione di un 'clone' di cat.
Rimarcato che la molteplicità di caratteri da leggere con una read dipende dalla specifica del problema (Slide C/UNIX 16). Sottolineato che i controlli che avvengono all'apertura/creazione di un file sono basati su Effective UID ed Effective GID del processo che richiede l'operazione (che possono essere diversi dal Real UID e Real GID) (Slide C/UNIX 12). Illustrazione del concetto di File System CONDIVISO fra tutti i processi (Slide C/UNIX 13).
Implementazione della ridirezione in ingresso e in uscita (Slide C/UNIX 17): simulazione in C della ridirezione in ingresso e in uscita, con anche versione con stampa degli fd usati in input e in output su /dev/tty.
Ripreso discorso generale sui metodi di accesso: spiegato il metodo di accesso diretto (spotsamneto di file pointer o I/O pointer che dir si voglia) (Slide File System 13). Operazione non sequenziali: lseek (Slide C/UNIX 18). Esempio di append su un file (Slide C/UNIX 19): implementazione della ridirezione in uscita in append (cioè >>).
L
2
Gio. 11/04/2024
Esercitazione in Laboratorio (C1) - Usato il LINFA allargato con l'aiuto di Silvia Cascianelli: Prima ora: prove di collegamento OLJ e VPN-FTP in vista della prima prova in itinere (o di un normale esame). Quindi, presentazione della utility make da parte di Silvia Cascianelli e poi primi esercizi su C come linguarggio di sistema: i veda il documento Esercitazione11Aprile2024.pdf
E
4
Lun. 15/04/2024
File C - Spiegato significato della atomicità delle operazioni primitive, in particolare read e write su file (Slide C/UNIX 20).
Ripreso schema del funzionamento della SHELL per generare un processo figlio per eseguire un comando non interno.
Processi UNIX: modello ad ambiente locale e sua eccezione relativamente al file system e ottimizzazione della condivisione del codice (S. Processi 1). Tipi di processi, scheduling, memoria virtuale, swapping e modi di esecuzione dei processi (S. Processi 2). Ripreso concetto di spazio di indirizzamento/immagine di un processo: parte utente e di kernel e Tabelle di sistema: Process Table e Text Table, per la condivisione del codice (S. Processi 4-7): spiegato descrittore di processo. Stati di un processo in UNIX (S. Processi 9) con confronto stati di un processo nei Sistemi Operativi multiprocesso generali.
Primitive per la gestione dei processi: creazione (fork) e sui effetti (S. Processi 10-11). Primo esempio semplice (programma unoDue.c) con anche presentazione in powerpoint. Mostrato, anche, il problema di 'mescolamento' delle stringhe scritte su standard output a causa dello standard output condiviso (anche come I/O Pointer). Illustrato primitive getpid, getppid, getuid, geteuid, getgid e getegid (S. Processi 19): ulteriore esempio (programma unodueConPID-UID-GID.c). Valore di ritorno della fork (S. Processi 12): altro esempio semplice con differenziazione del codice (programma unoEdue.c).
Osservazioni su fork (S. Processi 13). Primitiva wait in generale (S. Processi 20-21 e 23). Esempio di uso di fork e wait, ma senza uso del valore ritornato dal figlio con la exit (programma provaWait.c). Velocemente: a) mostrato altro esempio di uso di wait con recupero valore di exit, con mascheramento a mano (programma status1.c); b) spiegato vincolo che il valore che può essere ritornato con la exit al padre debba essere compreso fra 0 e 255.
L
2
Lun. 22/04/2024
Processi UNIX - Possibili terminazioni di un processo: anormale e normale, in particolare con la exit (S. Processi 22). Ripreso significato del valore ritornato dalla wait come effetto collaterale sul parametro intero di cui deve essere passato l'indirizzo e spiegato le operazioni di mascheramento sui byte di tale intero e schema di invocazione della wait (S. Processi 23) anche con presentazione in powerpoint. Rivisto il secondo esempio di uso di wait con recupero valore di exit visto la lezione scorrsa: con mascheramento a mano (programma status1.c, mentre programma status2.c lasciato da guardare agli studenti). Spiegato vincolo che il valore che può essere ritornato con la exit al padre debba essere positivo e minore o uguale a 255. Rispiegato funzionamento shell nel caso di esecuzione di un comando non interno in foreground (fork+wait) e in background (solo fork): ancora uso della stessa presentazione in powerpoint: manca ancora capire come avviene l'esecuzione del comando da parte del processo figlio della shell. Quindi, famiglia di primitive EXEC: execv, execl, execvp e execlp; effetti exec (S. Processi 26-27). Esempi semplici di uso (S. Processi 28-29): richiesta di esecuzione di ls con due esempi corretti (myls1.c e myls2.c) e un esempio sbagliato (mylsErrato.c); richiesta di esecuzione di un programma eseguibile definito dall'utente (callecho.c e myecho.c). Uso di exec dopo fork e presentato situazione dei processi padre e figlio prima e dopo l'invocazione della primitiva exec (S. Processi 32-33): spiegazione su ottimizzazione di Linux (S. Processi 18).Esempi di uso di fork ed exec (S. Processi 31): mylsConFork.c e myGrepConFork.c con connessione con comportamento della SHELL, in particolare, implementazione ridirezione dello standard output.Esempio di un programma (comando.c) che simula in modo molto semplice un processore dei comandi (S. Processi 36): uso della variabile errno e della primitiva di gestione degli errori perror (S. Processi 36).
L
2
Mer. 24/04/2024
Processi UNIX - Ripreso, anche con una presentazione in powerpoint (prima slide), il concetto che i controlli sui diritti di accesso fanno sempre riferimento a UID/GID effettivi (S. 43 - SHELL). Quindi, completato discorso sui 2 bit speciali che sono presenti nell'I-NODE di un file solo nel caso che sia eseguibile (S. 43 - SHELL); in particolare, comportamento del SUID nel comando passwd e sul file /etc/shadow. Mostrato quindi un esempio di uso del SUID con vari programmi scritti in C che usano fork/exec/wait (leggiPippo.c, suid.c e contro-esempio suid-sbagliato.c) che evidenziano che il comportamento della exec è appunto di modificare in caso di SUID l'UID effettivo: mostrato il tutto anche con le successive slide della presentazione sopra citata.
Illustrato schema di generazione di N processi e successiva attesa presente nella esercitazione proposta a casa.
Ripreso slide stati di un processo UNIX (Slide Processi 9): spiegazione dettagliata dello stato ZOMBIE e della sua necessità. Processi ZOMBIE (Slide Processi 24) ed ereditati da INIT (Slide Processi 25): due esempi relativi (figlio-zombieConStato.c e figlio-initConGetppid.c). Parlato anche dei processi zombie ereditati da init. Inizializzazione del sistema UNIX e comportamento della shell (Slide Processi 33-34).
L
2
Lun. 29/04/2024
PROCESSI UNIX - Ripreso inizializzazione del sistema UNIX e comportamento della shell (Slide Processi 34): mostrato verifica dell’esistenza dei processi che eseguono getty sia su un Sistema Linux con una versione meno recente di Linux e sia sul sistema Linux usato normalmente.
File UNIX - Ripreso discorso su Tabella dei file aperti (TFA) per ogni processo e fatto notare che era stato detto che il collegamento con i file era più complicato in UNIX di quanto spiegato come concetto (Slide C/UNIX 6). Relazioni fra TFA dei singoli processi e tabelle di sistema (Slide Unix Tabelle 1-2): Tabella dei file aperti di Sistema e Tabella degli I-NODE attivi.
Processi UNIX - Quindi dopo aver introdotto queste due tabelle si possono capire due discorsi lasciati indietro e cioè: Condivisione di file e I/O pointer per file aperti da padre prima della fork (Slide Processi 14-15) e condivisione in generale di un file (Slide Processi 16-17).
File UNIX - Approfondimenti su open (Slide C/UNIX 8): unico esempio con vari casi.
Introdotto struttura del File System fisico (Slide Unix Tabelle 3): concetto di MOUNT. File system logico (Slide Unix Tabelle 4): rispiegato necessità di link software per traversare file system fisici diversi! Rivisto informazioni nell'I-NODE (Slide Unix Tabelle 5) e spiegato significato dei 13 indirizzi (Slide Unix Tabelle 6). Fatto vedere comando DF per vedere i file system fisici montati (con anche opzione -i per vedere gli i-node occupati e liberi) e caratteristiche dei dispositivi /dev/xxx usati come file system fisici.
PROCESSI UNIX - Primitive viste finora (S. Processi 37-38).
L
2
Gio. 02/05/2024
Esercitazione in Laboratorio (C3) - Terza esercitazione perché la seconda esercitazione è quella data a casa per il 25 Aprile 2024. Usato il LINFA allargato con l'aiuto di Silvia Cascianelli: si veda il documento Esercitazione2Maggio2024.pdf.
E
4
Lun. 06/05/2024
Processi UNIX - Presentazione associazione AVIS.
PIPE - Interazione fra processi in UNIX (S. Pipe 1). Presentato in generale problema produttori-consumatori per passare informazioni (dati) da un processo all'altro. Comunicazione mediante PIPE (S. Pipe 2): comunicazione fra processi: in particolare, introdotto i termini di Produttore-Consumatore, Sender-Receiver, Mittente-Destinatario e Client-Server (declinati al singolare o al plurale). Creazione pipe e omogeneità con i file (S. Pipe 3-4). Calcolo della lunghezza di una pipe (S. Pipe 5). Uniformità con i file e differenze sostanziali (Slide Pipe 5). Processi che possono comunicare tramite una pipe: necessità di relazione di parentela (Slide Pipe 6). Esempio Produttore (figlio) e Consumatore (padre) usando una pipe (Slide Pipe 7): necessità di chiusura dei lati non necessari (Slide Pipe 8-9). Dettagli su tabella interna associata ad ogni pipe (Slide Pipe 10).
L
2
Mer. 08/05/2024
PIPE - Problemi (Slide Pipe 11-12): a) pipe senza scrittore; b) caso pipe senza lettore con invio del segnale SIGPIPE.
Esame del 5 Giugno 2015 (seconda prova in Itinere, quindi solo parte C): processo nipote che esegue tail -1 su file associato e figlio connesso in pipe che ricava lunghezza linea e la comunica al padre: presentato preliminarmente una versione ridotta del testo, che esclude la presenza dei processi nipoti e analizzate dettagliatamente le specifiche: mostrato codice e funzionamento.
Per poter svolgere il testo completo della seconda prova in itinere del 5 Giugno 2015 bisogna prima analizzare una ulteriore primitiva: Primitiva DUP (Slide Pipe 13). Esempio di possibile implementazione del PIPING dei comandi (Slide Pipe 14-15). Verifica su jsh (che è una shell che a livello implementativo è simile alla BOURNE Shell) del legame di parentela fra processi coinvolti e chi esegue cosa e verifica anche nella BASH in cui l’implementazione è differente.
L
2
Gio. 09/05/2024
Esercitazione in Laboratorio (C4) - Usato il LINFA allargato con Silvia Cascianelli e Letizia Leonardi collegata in remoto: si veda il documento Esercitazione9Maggio2024.pdf.
E
4
Lun. 13/05/2024
Processi UNIX - Precisazione su esercizio 6 della scorsa esercitazione.
Esercizi: 1) Ripreso il testo completo della seconda prova in itinere del 5 Giugno 2015 e analizzate dettagliatamente le ulteriori specifiche: mostrato codice e funzionamento.
Mostrato presentazione sui diversi schemi di comunicazione che poi verrà resa disponibile alla fine delle lezioni/esercitazioni.
2) Seconda prova in itinere del 26 Maggio 2017: analizzato lo schema di comunicazione a pipeline, in particolare il numero di pipe che servono (N, e cioè quanti i processi figli) e il fatto che nella soluzione ogni figlio Pi legge dalla pipe i-1 e scrive sulla pipe i; al padre arriva una singola struttura (con 3 campi); necessità che il padre salvi in un array creato dinamicamente i pid dei figli per quello che deve stampare una volta ricevuta la struttura dall'ultimo figlio.
L
2
Mer. 15/05/2024
Processi UNIX – SOLO ESERCIZI:
1) Parte C dell'esame del 12 Febbraio 2016: N + 1 parametri, N file e un singolo carattere alfabetico minuscolo (Cx); padre genera N processi figli; ogni figlio è associato ad un file; comunicazione in pipeline dal primo figlio all'ultimo e poi al padre; i figli devono passare in avanti un array dinamico di strutture; al padre deve arrivare un array di N strutture i cui campi vanno stampati insieme a Cx e al pid dei figli corrispondenti. Mostrato soluzione e prova di funzionamento.
2) Parte C dell'esame del 12 Luglio 2017: 2N parametri, nomi assoluti di file intercalati da numeri interi (strettamente positivi) che rappresentano la loro lunghezza in linee; padre genera N processi figli; ogni figlio genera un nipote; i nipoti sono associati agli N file, devono generare un numero random (r) compreso fra 1 e la lunghezza in linee e poi devono passare ai figli le prime r linee usando il comando head "-r" (-r inteso come la stringa corrispondente); ogni figlio deve ricevere tutte le linee e per ogni linea ricevuta deve mandare al padre una struttura con 3 campi; il padre deve ricevere tali strutture in un ordine bene preciso: prima la prima struttura dal primo figlio, poi la prima struttura dal secondo figlio e così via fino a che tutti i figli non hanno terminato di inviare. Mostrato soluzione e prova di funzionamento.
L
2
Gio. 16/05/2024
Esercitazione in Laboratorio (C5) - Usato il LINFA allargato con Silvia Cascianelli e Letizia Leonardi collegata in remoto: si veda il documento Esercitazione16Maggio2024.pdf.
E
4
Lun. 20/05/2024
SEGNALI - Sincronizzazione in UNIX mediante SEGNALI: definizione dei segnali (Slide Segnali 1) e loro trattamento (Slide Segnali 2). Elenco (parziale) segnali (Slide Segnali 3). Primi esempi di segnali semplici (Slide Segnali 4) con programma loop: SIGINT (CTRL-C), SIGTERM e SIGKILL. Primi esempi di segnali semplici (ancora Slide Segnali 4) con programma illegal: SIGILL. Primitiva SIGNAL (Slide Segnali 5): definizione di un HANDLER, default e possibilità di ignorare un segnale. Osservazione sui segnali (Slide Segnali 6) e in particolare: a) comportamento in seguito a fork ed exec (Slide Segnali 7); b) differenze di gestione fra versione BSD e System V (Slide Segnali 6) con esempio di uso del segnale corrispondente al CTRL-C: comportamento in BSD (Slide Segnali 8) con prova di funzionamento e spiegato solo a parole comportamento in System V (Slide Segnali 9). Primitiva KILL (Slide Segnali 10) e PAUSE (Slide Segnali 11). Primo esempio semplice di uso di KILL e PAUSE (oltre che di SIGNAL) (Slide Segnali 12-13).
L
2
Mer. 22/05/2024
Processi UNIX – SOLO ESERCIZI:
1) Esame dell'11 Luglio 2018 (solo parte C): figli comunicano posizione del carattere da cercare al padre e attesa dell'OK o meno dal padre ai figli se riportare delle informazioni su standard output. Analisi dettagliata delle specifiche e individuato alcuni elementi importanti della soluzione: due array di pipe e array finito e lo schema di comunicazione fra figli e padre. Mostrato soluzione e mostrato funzionamento in particolare per i due file mostrati nella presentazione powerpoint.
2) Presentato Parte C dell'esame del 17 Febbraio 2021: Q parametri, Q file; padre genera Q processi figli; ogni figlio è associato ad un file; tutti i file hanno lunghezza in linee uguale; comunicazione a ring dal primo figlio all'ultimo e poi di nuovo al primo, con il padre che fa l'innesco; i figli devono cercare in ogni linea i caratteri numerici e quando hanno l'OK devono scrivere su standard output alcune informazioni insieme con la linea stessa. Mostrato soluzione e prova di funzionamento.
L
2
Gio. 23/05/2024
Esercitazione in Laboratorio (C6) - Usato il LINFA allargato con l'aiuto di Silvia Cascianelli: si veda il documento Esercitazione23Maggio2024.pdf.
E
4
Lun. 27/05/2024
SEGNALI - Primitiva ALARM (Slide Segnali 11): Esempio di pause e alarm (Slide Segnali 14-15).
PIPE e SEGNALI - Ripreso esempio calcolo lunghezza pipe (Slide Pipe 16): trattamento mediante SIGALRM. Ripreso esempio di pipe senza lettore (Slide Pipe 17): trattamento segnale SIGPIPE.
Processi UNIX - Esercizio: Parte C dell'esame del 19 Gennaio 2022: N + 1 parametri, N file e un intero positivo e dispari (C); padre genera 2 * N processi figli; i figli devono essere considerati a coppie: figlio Pi e figlio Pi+N; ogni coppia è associata allo stesso file; comunicazione dal primo figlio della coppia al secondo figlio della coppia; il secondo figlio della coppia deve creare un file con nome ottenuto dal concatenamento del nome del suo file e della stringa ".mescolato" e deve leggere a blocchi di grandezza C dalla seconda metà del file, mentre il primo figlio della coppia deve leggere dalla prima metà del file sempre blocchi di grandezza C; il secondo figlio scrive sul file creato i blocchi in modo mescolato, alternativamente i suoi e quelli ricevuti dal primo figlio. Mostrato soluzione e prova di funzionamento.
Come argomento conclusivo ripreso schemi di comunicazione parte C, già mostrati in una precedente lezione con, in aggiunta, la classificazione dei vari esercizi visti a lezione e proposti ad esercitazione.
L
2
Mer. 29/05/2024
NO LEZIONE perchè terminato le ore e anzi fatte più di quelle assegnate!
L
2
Gio. 30/05/2024
NO ESERCITAZIONE, MA SECONDA PROVA IN ITINERE: solo per chi ha superato la Prima Prova in itinere!
E
4
Lun. 03/06/2024
NO LEZIONE perchè terminato le ore e anzi fatte più di quelle assegnate!
L
2
Mer. 05/06/2024
NO LEZIONE perchè terminato le ore e anzi fatte più di quelle assegnate!
L
2

Legenda:
E= Esercitazione
L= Lezione