Slide sul Modello a Processi. Il Pdf esplora il modello a processi nei sistemi operativi, trattando l'esecuzione sequenziale e parallela, lo stack e gli stati di un processo. Questo materiale di Informatica, adatto per l'Università, offre una panoramica chiara e concisa degli argomenti.
Mostra di più32 pagine


Visualizza gratis il Pdf completo
Registrati per accedere all’intero documento e trasformarlo con l’AI.
Esecuzione sequenziale, parallela, spazio d'indirizzamento,
gerarchia processi
A supporto dell'esecuzione parallela i sistemi operativi hanno introdotto il
concetto di processo
Un processo
- rappresenta un'istanza di esecuzione di un programma
- può essere considerato un "esecutore virtuale"
- permette di gestire l'accesso concorrente alle risorse
Programma
1
Programma
2
Programma
N
Risorse condivise
Hardware
Programma
1
Programma
2
Programma
N
>
Processo 1
Processo 2
Processo N
Risorse
virtuali
Risorse
virtuali
Risorse
virtuali
Sistema Operativo
V
Hardware
Programma
1
Programma
2
Programma
N
>
Processo 1
Processo 2
Processo N
Risorse
virtuali
Risorse
virtuali
Risorse
virtuali
Sistema Operativo
Hardware
Un processo è identificato da un PID (Process IDentifier) univoco
- ogni processo è creato da un altro processo detto "padre"
- unica eccezione è il processo "init", il primo ad essere eseguito dal S.O.
Il sistema operativo mantiene una tabella che associa ad ogni PID una struttura dati detta Process
Descriptor che contiene tutte le informazioni ad esso relative
Il Process Descriptor
contiene
- PID del processo padre
- Informazioni sul"utente (uid, gid, permessi)
- Informazioni sulla memoria
- Riferimenti alle tabelle di sistema
- Informazioni sui tempi di esecuzione
–
...
Ogni processo dispone di un insieme di risorse virtuali
- Memoria
- File
- Periferiche
In generale, durante la sua esecuzione un processo può creare altri processi
utilizzando opportune chiamate di sistema fornite dal kernel.
· Il processo genitore prende il nome di processo padre ed il processo creato il
nome di processo figlio. Ciascuno di questi nuovi processi può creare a sua volta
altri processi, formando così un albero di processi.
P
P2
P1
P3
P4
Quanto segue è vero in generale, ma faremo riferimento specificamente ai sistemi operativi UNIX/Linux
Tutti i processi sono figli del processo "init"
- da questo discende il processo "login" e la relativa "shell"
- da una shell discende la gerarchia dei processi utente
init
login A
login B
login C
shell
shell
shell
P A1
P A2
P C1
P A11
P A12
P A21
P C11
P C12
P C13
dal punto di vista logico, la memoria di un processo è organizzata in "segmenti".
Ogni segmento contiene un tipo specifico di informazioni
· Dati
· Codice
· Informazioni di Sistema Operativo
Come vede la memoria un programma C in esecuzione?
232 - 1
Stack
Pila di FRAME, uno per ogni
chiamata di funzione da cui non
abbiamo ancora fatto ritorno
Area vuota
Heap
Variabili allocate dinamicamente
es. malloc()
Data
Variabili globali inizializzate e non
Text
Traduzione in codice macchina delle
funzioni che compongono il
programma
0
232 - 1
Stack
Area vuota
Heap
Data
Text
All'inizio dell'esecuzione lo stack contiene solo il FRAME
per la funzione main
Successivamente :
●
ogni volta che viene chiamata una nuova funzione
viene inserito un nuovo frame nello stack
●
ogni volta che una funzione termina (es. return 0)
viene eliminato il frame in cima dello stack e
l'esecuzione viene continuata a partire dall'indirizzo di
ritorno
0
232 - 1
Stack
Area vuota
Heap
Data
Text
Contenuti tipici di un FRAME :
●
variabili locali della funzione
· indirizzo di ritorno (indirizzo dell'istruzione successiva
a quella che ha effettuato la chiamata alla funzione)
· copia del valore parametri attuali
0
Un processo durante la sua esecuzione, esegue transizioni di stato che sono causate sia dall'esecuzione
delle istruzioni del processo stesso, come ad esempio quando esso esegue operazioni di I/O, sia da
eventi esterni asincroni con la sua esecuzione, come ad esempio la ricezione di segnali.
· Un processo entra nello stato nuovo quando è creato, ad esempio quando si avvia un programma.
· Un processo passa dallo stato nuovo allo stato di pronto dopo che il SO ha verificato che esso può
essere effettivamente eseguito (ad esempio il processo ha i diritti di esecuzione).
· Un processo passa dallo stato di pronto allo stato di esecuzione quando ad esso è assegnato il
processore.
· Un processo è nello stato attivo quando si trova nello stato di pronto o di esecuzione.
· Un processo passa dallo stato di esecuzione allo stato di bloccato quando è in attesa di qualche
evento.
terminazione
esecuzione
terminato
sospensione
scheduler
Assegnazione cpu
prerilascio
bloccato
pronto
riattivazione
nuovo
Il processo ritorna nello stato di pronto quando l'evento atteso si è verificato.
· La transizione dallo stato di esecuzione allo stato di pronto è chiamato prerilascio (preemption) o revoca.
· Il prerilascio può avvenire per vari motivi, come ad esempio, quando un processo ha esaurito il suo quanto di
tempo (nei sistemi timesharing), o è presente nella coda di pronto un altro processo con priorità più alta.
· Il passaggio dallo stato di pronto allo stato di esecuzione è gestito dallo scheduler, un componente del kernel
che seleziona un processo cui assegnare la CPU, tra tutti i processi che si trovano nello stato di pronto. Lo
scheduler ha il compito di garantire che tutti i processi pronti possano avanzare nella loro esecuzione.
· Il processo passa nello stato terminato quando ha terminato l'esecuzione del suo programma o quando si è
verificato un'eccezione di vario tipo.
In molti sistemi è previsto che un processo sia trasferito dalla memoria principale alla memoria secondaria
(disco) in modo da ottenere spazio per altri processi. Tale operazione prende il nome di swapping (scambio) e
lo stato relativo è detto swapped.
· Vedremo un diagramma di transizione di stato con lo stato swapped quando parleremo della gestione della
memoria.