PROCESSO: flusso esecutivo gestito dal sistema operativo per eseguire parte di un programma
generato da un programma quando quest’ultimo è in uso.
PROBLEMA: i processi sono tipicamente indipendenti tra loro ma non consentono una comunicazione o una condivisione di risorse, rendendo inefficiente l'esecuzione parallela di processi all'interno di un singolo programma
SOLUZIONE: nei sistemi moderni, i processi possono contenere…
THREAD:flussi di esecuzione più piccoli e paralleli
consentono di eseguire più compiti contemporaneamente all'interno dello stesso processo
condividono facilmente informazioni e risorse.
Esempio: su word ci sono diversi thread: autocorrezione, autosalvataggio, scrittura…
ciclo di vita:
ready(pronto per usare la CPU)
running(usa la CPU)
block(non è pronto per usare la CPU pk mancano dei dati)
Struttura della Memoria dei Processi in UNIX
In UNIX, la memoria di un processo è suddivisa in tre segmenti:
Segmento di testo: contiene il codice eseguibile del processo
Segmento dati (heap): contiene variabili del programma e cresce verso indirizzi di memoria più alti
Segmento stack: contiene le chiamate di funzione e le variabili locali. Cresce verso indirizzi di memoria più bassi
Tra il segmento dati e segmento stack c’è uno spazio vuoto.
L'espansione del segmento stack è automatica
quella del segmento dati richiede una system call (brk)
QUAL’è IL PRIMO PROCESSO DELL’ALBERO?
I processi possono creare altri processi grazie alla system call: fork
system call: è un meccanismo che permette a un programma utente (user mode) di richiedere servizi direttamente al sistema operativo (kernel mode).
questo crea una struttura ad albero in cui i rami collegano il processo padre col processo figlio
Il primo processo dell’albero è chiamato init, ed è contenuto nel kernel, quindi all’avvio del computer, per eseguire il processo init, bisogna caricare il kernel in memoria (ci rimane finchè il pc è acceso). Ciò avviene per mezzo del boot sector (una sezione del disco rigido)
SPAZIO DI INDIRIZZAMENTO della CPU/processo/bus dati
💡
della CPU → rappresenta il numero totale di indirizzi di memoria che la CPU è in grado di utilizzare, sia nella memoria fisica che nella memoria virtuale.
del bus dati →a memoria totale indirizzabile tramite il bus indirizzi
Si riferisce solo alla memoria fisica direttamente accessibile
del processo → la memoria occupabile da un processo
EVOLUZIONE DELLA MEMORIA DEI PROCESSORI (poco chiaro)
processori con un sistema di indirizzamento a 20 bit → 1MG di memoria
processore 356
sistema di indirizzamento a 32 bit → 4GB di memoria
all’epoca nn l’aveva nessuno pk costoso
metronomo interno per il time-sharing
PROBLEMA
A questo punto si è cominciato a domandarsi come si potesse fare per dare l’impressione di avere 4 GB per processo in termini di prestazione, quando si avevano solo 32 MB effettivi.
SOLUZIONE
Virtual machine: la memoria è virtualizzata dal sistema operativo, ovvero con una serie di accorgimenti il processore si comporta come una memoria da 4GB quando ne ha effettivamente di meno
FILE SYSTEM (lettura)
💡
struttura dati ad albero con un meccanismo per immagazzinare permanentemente i dati
COMPONENTI:
files
directory: identifica la sua posizione nel file system ed i file che contiene:
termine derivante dalle Hall (grandi centri commerciali) del Regno unito, in ogni piano avevano una directory che identificava la posizione dei negozi.
una directory nn è mai vuota pk contiene:
radice della struttura ad albero = root directory
un riferimento a se stessa
un riferimento alla directctoy precedente per tornare indietro
UNIX FILE SYSTEM vs WINDOWS FILE SYSTEM
FUNZIONALITA’
File System in Windows
In Windows, ogni disco e ogni sua partizione, ha una propria gerarchia di file. Per esempio:
Il Disco C: è solitamente il disco principale, e la sua root è indicata con C:\.
Se aggiungi un altro disco, come un Disco D:, esso avrà una sua root separata, indicata con D:\.
C:\
├── Program Files
├── Users
│ └── John
└── Windows
D:\
├── Movies
└── Documents
File System in Unix
In Unix, il concetto è diverso: c'è una sola root, rappresentata dal carattere /, e tutti i dischi o partizioni aggiuntive si collegano a questa struttura ad albero unica
/mnt è una directory speciale utilizzata nei sistemi operativi basati su Unix/Linux per montare file system aggiuntivi, come dischi esterni, partizioni secondarie o unità di rete. E’ un punto di montaggio temporaneo.
/
├── bin
├── home
│ └── john
├── var
├── mnt
│ └── disco1 (questo è un disco aggiuntivo montato)
└── etc
Permessi di Accesso in Unix
In Unix, i permessi sui file sono divisi in tre terne di valori, che sono i diritti di lettura, scrittura ed esecuzione per tre categorie di utenti:
Proprietario del file:
Permessi specifici per il proprietario, chi ha creato o possiede il file.
Esempio: rwx (lettura, scrittura, esecuzione).
Gruppo:
Permessi per gli utenti che appartengono al gruppo del proprietario del file.
Esempio: r-x (lettura, esecuzione, ma non scrittura).
Altri:
Permessi per tutti gli altri utenti del sistema che non fanno parte del gruppo.
Esempio: r-- (solo lettura).
In sintesi, i permessi si limitano a lettura (r), scrittura (w) e esecuzione (x), per le tre categorie sopra citate.
Permessi di Accesso in Windows
Oltre ai classici permessi di lettura, scrittura ed esecuzione, Windows offre opzioni più dettagliate
Questa maggiore complessità deriva dal fatto che Windows ha avuto più tempo per sviluppare un sistema di gestione degli accessi più articolato, dato che è nato successivamente rispetto a Unix.
In Unix, ogni file ha una struttura dedicata chiamata inode, checontiene tutte le informazioni fondamentali riguardanti quel file, ad eccezione del nome del file (viene mantenuto nella directory che contiene il file)
COSA CONTIENE
informazioni sui file (attributi)
indirizzi su disco dei blocchi che lo compongono
Permessi di accesso
Proprietario del file
Tipo di file
indica la natura o la funzione del file. Questo permette al sistema operativo di gestire diversi tipi di file in modo appropriato.
File regolare (regular file)
Contiene dati utente, come documenti di testo, immagini, eseguibili, ecc.
Può essere di due sottotipi:
File di testo (Non sono direttamente eseguibili dalla CPU, sono caratteri leggibili dall’uomo): contiene caratteri leggibili (ASCII, UTF-8).
File binario (formato non leggibile direttamente dall'uomo, viene eseguito direttamente dalla CPU
es. file eseguibili
Directory
È un file speciale che funge da contenitore per altri file e directory.
Memorizza le associazioni tra i nomi dei file e i relativi numeri di inode.
Link simbolico (symlink)
È un file che funge da riferimento (o scorciatoia) a un altro file o directory.
Contiene il percorso del file di destinazione.
Dimensione del file
Puntatori ai blocchi di dati del file sul disco (indirizzo),
utile per gli hard-link
Data di creazione e modifica
2 TIPI DI LINK UNIX
Hard Link (link fisico)
💡
collegamentodiretto all’ inode (quindi al file)
Quando crei un hard link, stai aggiungendo un nuovo nome in una posizione diversa della struttura ad albero, ma entrambi i nomi (il file originale e l'hard link) puntano allo stesso inode, quindi allo stesso blocco di dati
MODIFICHE SINCRONIZZATE
Vantaggi:
Risparmia spazio disco perché i dati non vengono duplicati → i file sono su disco
Se un file ha più hard link e uno di questi viene eliminato. in verità elimina solo il nome, pk l'inode non viene rimosso fino a quando tutti i collegamenti al file non vengono eliminati
è anche un problema…
Link Simbolico (symlink o link logico)
💡
file speciale che contiene solo il percorso verso un altro file o directory (ma non punta al file in modo diretto)
Il symlink ha il suo inode, che contiene informazioni relative a questo file speciale.
Contenuto: non è l'inode del file a cui punta, contiene solo ilpercorso verso il file originale.
Se sposto il file originale, il symlink diventa invalido
CARATTERISTICHE
Importanza del File System in Unix
In Unix, il file system è centrale non solo per l’archiviazione dei file, ma per l'intero funzionamento del sistema operativo. Tutto, incluse le periferiche hardware, i processi e le configurazioni di sistema, è rappresentato come file o directory. Pertanto, gestire correttamente il file system è fondamentale per garantire la stabilità e l'efficienza del sistema.
Struttura Dati Senza Cicli
In un file system Unix, la struttura dati non deve avere cicli.
Questo significa che non è possibile che una directory punti a sé stessa, creando una struttura ricorsiva infinita.
Questa proprietà è essenziale per mantenere la coerenza del file system e evitare malfunzionamenti.
ECCEZIONI
Directory Speciali (. e ..)
non crea cicli pk è stato espressamente progettato per essere gestito dal file system internamente (e non creato da me stesso)
serve ad esempio per creare percorsi relativi nei file system, a partire dal file corrente in cui mi trovo
I Symlink creano cicli se puntano a sé stessi o creano un riferimento circolare con altre directory.
Tuttavia, comandi standard come ls(utilizzato per elencare il contenuto di una directory) non seguono i symlink, quindi non entrano in un loop infinito, a meno che non vengano utilizzate opzioni specifiche
SYSTEM CALL
Non tutte le operazioni in un sistema operativo sono accessibili direttamente agli utenti o ai programmi. Molte di queste operazioni coinvolgonostrutture dati gestite dal kernel, le quali sono critiche per il corretto funzionamento del sistema operativo, quindi devono essere protette da modifiche accidentali o intenzionalmente dannose.
System Call POSIX (lettura)
Le system call POSIX sono un insieme standardizzato di chiamate di sistema utilizzate per interagire con il kernel e fargli eseguire delle operazioni privilegiate
Come Avviene una System Call
PREPARAZIONE
Il processo utente richiede un'operazione privilegiata, ad esempio la lettura di un file, quindi va in blocked, il tempo di eseguire l’istruzione
nn confondere con l’interrupt → il processo nn è che si arresta improvvisamente
Viene preparata la chiamata alla system call, inserendo i parametri necessari nello stack (letti nel codice del processo prima che andasse in blocked)
il file descriptor
buffer di destinazione
numero di byte da leggere
Il programma utente fa una jump verso un indirizzo in cui trova ed esegue una funzione di libreria standard (stub) che funge da interfaccia tra il programma utente e il kernel.
Lo stub recupera i parametri dallo stack e li memorizza nei registri del processore insieme al numero identificativo della system call (nn viene caricato temporaneamente nello stack)
TRAP
Lo stub esegue una speciale istruzione trap, che invia un segnale hardware alla CPU
CONSEGUENZE
la CPU cambia modalità, passando dalla modalità utente alla modalità kernel, e avvia l'esecuzione del codice del kernel.
il kernel avviato utilizza una sua componente (dispatch) per trovare nella System Call Table, l'handler associato alla system call in base al numero identificativo della system call
handler
Ogni system call ha un handler dedicato, che contiene il codice necessario per eseguire l'operazione richiesta
L'handler della system call esegue l'operazione richiesta, ad esempio la lettura del file, accedendo alle risorse protette.
RITORNO
Una volta completata l'operazione, la CPU ritorna alla modalità utente.
Il programma utente riprende l'esecuzione immediatamente dopo la chiamata alla system call utilizzando i dati caricati nel buffer di destinazione
4 FAMIGLIE DI SYSTEM CALL
Gestione dei processi (Come si esegue un processo)
(Padre) Funzione della system call fork
unico metodo per creare un nuovo processo, genera una copia esatta del processo originale
Le variabili condividono gli stessi valori al momento della creazione, male modifiche successive non si propagano tra i processi PADRE E FIGLIO
Il codice eseguibile del programma, che è immutabile, viene condiviso tra genitore e figlio.
Pk viene chiamata la fork?
Quando un comando viene digitato dall’utente, la shell crea un processo figlio che esegue il comando richiesto al posto del processo padre
Questo garantisce che qualsiasi errore o crash nel processo figlio non influenzi il processo padre, impedendo la perdita irreversibile del processo
Restituisce due valori diversi
Nel processo figlio: La chiamata a fork() restituisce 0. Questo serve al codice per identificare che si sta eseguendo all’interno del processo figlio.
Nel processo genitore: La chiamata a fork() restituisce il PID del figlio appena creato. Questo serve al genitore per distinguere il figlio tra altri eventuali figli.
PID: numero intero univoco assegnato dal sistema operativo a ogni processo in esecuzione
(Padre) Attesa waitpid o wait
Il processo genitore attende che il figlio termini l’esecuzione prima di procedere. Questa attesa viene realizzata tramite la system call waitpid.
La waitpid permette al genitore di attendere un processo figlio specifico oppure un qualsiasi processo figlio (impostando il primo parametro a -1).
Quando waitpid termina, il secondo parametro contiene lo stato di uscita del processo figlio che consente al processo genitore di sapere come è terminato il figlio e se ci sono stati errori.
Alternativa
wait è semplice ma limitato: aspetta passivamente qualunque figlio e blocca il padre finché non termina.
(Figlio) Esecuzione dei Comandi execve
Dopo che il processo figlio è stato creato, il figlio usa la system call execve per sostituire il proprio codice con il codice del programma da eseguire (ad esempio il programma cp).
execve carica eventuali argomenti e variabili d'ambiente necessari al programma.
(Figlio) System Call exit
La system call exit viene utilizzata per terminare il processo, che passa a zombie finchè il padre nn preleva il valore di ritorno che attendeva
Lo stato di uscita può essere un valore compreso tra 0 e 255.
è il valore che il processo genitore aspettava
Gestione dei file (Durante e Dopo l’apertura di un File)
Gestione delle directory e del file system
Gestione di operazioni di tipo variegato
TIPI DI ARCHITETTURA DEL SISTEMA OPERATIVO
SISTEMA MONOLITICO STRATIFICATO → UNIX
Il sistema operativo Unix è un sistema monolitico stratificato
MONOLITICO
tipo di architettura software in cui tutti i componenti e le funzionalità dell'applicazione sono sviluppati, e gestiti come un'unica unità, in cui ogni componente dell'applicazione è dipendente dagli altri
STRATIFICATO
gli strati sono livelli concettuali (procedure)che organizzano il sistema in sezioni con responsabilità diverse.
SISTEMI A MICROKERNEL
il kernel è ridotto alle sue funzionalità più essenziali
mentre molte delle altre funzionalità (tipicamente gestite dal kernel) vengono spostate in processi che lavorano in spazio utente e sono suddivisi in categorie
Esempi
Il file system è gestito da un processo della famiglia dei “server” (una famiglia di processi)
il disco è gestito da un processo della famiglia dei “driver”
VANTAGGIO
se non si ha bisogno di una certa funzionalità, posso rimuovere il processo che la gestisce e se la struttura a microkernel è sufficientemente snella si possono ottenere delle prestazioni molto buone
IL CLOUD COMPUTING NASCE CON L’EVOLVERSI DI 2 TECNOLOGIE:
SISTEMI DISTRIBUITI
pratica di suddividere e sparpaglare(distribuiere) le funzionalità di un sistema di calcolo su più hardware, e rifare chiamate ad ogni hardware per mezzo della rete in base alle necessità, le prestazioni all’epoca erano scarse pk la rete non reggeva queste operazioni
VIRTUALIZZAZIONE
💡
tecnologia che consente di creare una versione virtuale (e non fisica) di una risorsa hardware o software, lo scopo è poter eseguire due o più sistemi operativi nella stessa macchina (AMBIENTI DI SVILUPPO INDIPENDENTI E ISOLATI TRA LORO)
L'hypervisor è un software di virtualizzazione che consente di creare e gestire macchine virtuali (VM).
Una VM (Virtual Machine), o macchina virtuale, è un ambiente virtualizzato che
simula un computer fisico
con cui esegue un sistema operativo virtuale e le relative applicazioni come se fosse un vero e proprio dispositivo fisico
può interagire con l’hardware fisico per mezzo dell’hypervisor (intermediario fondamentale)
HV TIPO 1
Gli hypervisor di tipo 1, vengono installati direttamente sull'hardware fisico, senza la necessità di un sistema operativo come intermediario
FLESSIBILITA’: le VM possono emulare qs tipo di architettura, non devono adattarsi a un sistema operativo host garantendo maggior flessibilità di gestione
VIRTUALIZZAZIONE ASSISTITA: le istruzioni privilegiate vengono eseguite in modo quasi nativo dalla CPU, riducendo la necessità di traduzione o emulazione.
il sistema operativo host (ospitante) agisce come intermediario tra le VM e l'hardware fisico.
FLESSIBILITA’: stessa degli HV di tipo 1 ma data la presenza di un OS guest, usa un software di emulazione
NO VIRTUALIZZAZIONE ASSISTITA:
Il sistema operativo host esegue il software di emulazione, il quale deve tradurre ogni istruzione
prestazioni minori per la maggior complessità di calcolo
HV TIPO 2
il sistema operativo host (ospitante) agisce come intermediario tra le VM e l'hardware fisico.
FLESSIBILITA’:
diversamente dal Machine Simulator, esso non ha la libertà di emulare qs. architettura, ma solo quelle compatibili con il sistema operativo host
PROBLEMA nella VIRTUALIZZAZIONE ASSISTITA: l'accesso all'hardware dovrebbe passare attraverso il sistema operativo host, rallentando le prestazioni.
SOLUZIONE: estensioni del kernelmigliorando la comunicazione tra l’hypervisor e il kernel dell’host senza dover passare per l’ OS guest (riduce l’overhead)