Processi
Quando una singola CPU è presente viene usato lo pseudo parallelismo, per cui ad ogni processo è assegnato uno alla volta una CPU virtuale con registri isolati.
Anche lo spazio di indirizzamento è isolato, e contiene le regioni:
text
: contente il codice del programmadata
: contente le variabili del programmastack
: contente gli stack frame (i.e. variabili locali) delle chiamate delle funzioni in esecuzione
L'utilizzo della CPU si può stimare con la probabilità che sia in uso da almeno un processo con: dove è la probabilità che un processo sia in attesa I/O mentre è il numero di processi.
Descrittore
Contenuto nel Process Control Block ci sono:
- PID (Process ID)
- PPID (Parent Process ID)
- Stato del processo
- Registri come il Program Counter e lo Stack Pointer
- Priorità per lo scheduler
- Permessi
- Puntatore ai segmenti di memoria
- Lista dei dispositivi I/O allocati
Nel S.O. è salvata una tabella dei processi contenente le corrispondenze tra PID e rispettivi PCB, per lo scheduling e il rapido accesso alle informazioni di ogni processo.
Operazioni
Su ogni processo, il S.O. permette operazioni tra cui:
-
Creazione
Un processo è creato durante l'inizializzazione del sistema o tramite una chiamata di sistema.
Sono considerati in foreground se in uso da utenti, altrimenti sono in background (o demoni) se forniscono servizi come la gestione di stampa.
Su Unix un processo può essere clonato con la funzione
fork
, copiando l'intera memoria e registri ma mantenendo spazi di indirizzi separati, mentre su Windows può essere generato conCreateProcess
. -
Chiusura
Un processo può essere chiuso per un uscita:
- normale: come
exit(0)
- con errore: come
exit(1)
- forzata con un'eccezione: come con
SIGSEGV
(i.e. Segmentation fault) - forzata da un altro processo: come con
SIGKILL
All'uscita di un processo con figli, il S.O. può o distruggere i figli o consentire la loro esecuzione. Contrariamente a Unix, Windows non possiede un concetto di gerarchia di processi.
- normale: come
-
Blocco
Durante l'attesa della fine di un'operazione I/O, il processo viene bloccato per risparmiare tempo CPU.
Nel frattempo un'altro processo continuerà la sua esecuzione, fino alla fine dell'operazione I/O.
-
Sospensione e ripresa
Ad un processo sospeso è impedita l'esecuzione all'arrivo del segnale
SIGSTOP
da parte di un'altro processo o se stesso. La ripresa invece, avviene solamente con il segnaleSIGCONT
inviato da un'altro.
Ciclo di vita
Il S.O. mantiene una lista ready per scegliere i processi da eseguire, ed una lista blocked per quelli bloccati.
Durante il dispatch il S.O. assegna il processore ad uno dei processi pronti. Attraverso un timer ad intervalli, il S.O. riprende il controllo e causa il timeout (o prelazione) del processo in esecuzione.
Passando dall'esecuzione a pronto avviene un cambio di contesto, in cui viene salvato lo stato del processo nel rispettivo descrittore per essere poi caricato alla prossima esecuzione.
Segnali
I processi possono ricevere dei segnali, che notificano un evento, come interruzioni software. Il processo può:
- riceverli: esegue una funzione per la gestione del segnale
- ignorarli: lascia la gestione al S.O.
- mascherarli: evita che il S.O. li consegni fino alla rimozione del mascheramento
Comunicazione fra processi
La IPC (Inter-process Communication) avviene attraverso lo scambio di messaggi. Sono definiti bloccanti se il processo che li invia aspetta la conferma di chi li riceve.
Di solito il canale è una pipe, cioè un buffer in memoria in cui i processi scrivono i messaggi.
Nei sistemi distribuiti le perdite di messaggi sono evitate con acknowledgement e timeout per la ritrasmissione.