Sistemi operativi: manuale pratico/Processi/Introduzione
Sistemi operativi: manuale pratico/Processi/Introduzione
Algoritmo
modificaUn algoritmo e' un procedimento logico che permette la risoluzione di un problema in un numero finito di passi
Programma
modificaUn programma e' un'entita' passiva (file in memoria) che formalizza un algoritmo attraverso un linguaggio di programmazione
Processo
modificaUn processo e' un'entita' attiva (operazioni compiute dal processore) che corrisponde ad un'astrazione di un programma in esecuzione; un processo e' composto da:
- codice sorgente
- area dati (variabili statiche globali)
- stack (variabili statiche locali)
- heap (variabili dinamiche)
Processi sequenziali
modificaI processi sequenziali sono processi in cui ogni operazione viene eseguita dopo il termine di quella precedente (comportamento deterministico)
Processi concorrenti
modificaI processi concorrenti sono processi in cui le operazioni possono essere eseguite contemporaneamente (comportamento non deterministico) La concorrenza puo' essere: reale (sistemi multiprocessore e multi-core) o fittizia
Processi automatici
modificaI processi automatici sono processi che vengono eseguiti al bootstrap e terminati allo shut-down (attesa messaggi posta elettronica, controllo virus)
Processi su richiesta dell'utente
modificaI processi su richiesta dell'utente sono processi la cui esecuzione viene avviata in modo esplicito da parte dell'utente (stampante, browser)
Stati di un processo
modificaGli stati di un processo durante la sua esecuzione sono:
- new: il processo viene creato e sottomesso al SO
- running: il processo e' in esecuzione
- ready: il processo e' pronto per l'esecuzione e in attesa di risorse dal processore
- waiting: il processo e' in attesa di risorse da parte del sistema
- terminated: il processo termina e rilascia le risorse utilizzate
Context switch
modificaUn context switch (cambiamento di contesto) e' uno stato del SO in cui avviene un cambio del processo correntemente in esecuzione sulla CPU; il context switch genera un ritardo temporale tra l'esecuzione di un processo e l'altro
Process Control Block (PCB)
modificaIl PCB e' un blocco di dati associato ad ogni processo; tali dati riguardano:
- stato del processo
- program counter (indirizzo dell'istruzione successiva)
- registri della CPU
- informazioni per lo scheduling della CPU
- informazioni per la gestione della memoria
- informazioni sulle operazioni di I/O
Process Identifier (PID)
modificaIl PID e' un intero non negativo (UNIX/linux), generato automaticamente dal SO, che identifica in modo univoco ciascun processo
PID riservati
modificaI PID riservati dal SO UNIX/linux sono:
- PID : per lo scheduler dei processi
- PID : per il processo (invocato al termine del bootstrap) che e' l'antenato di tutti i processi
Terminazione
modificaUn processo puo' essere terminato in modi:
- standard
return
dalmain
exit
o_exit
o_Exit
da un suo thread- un suo thread riceve un segnale di terminazione
- non standard
abort
- ricevere un segnale di terminazione
- cancellare l'ultimo thread del processo
Al termine di ogni processo il kernel invia al padre un segnale SIGCHLD
(Signal Child)
Scheduler
modificaLo scheduler e' un programma che stabilisce un ordinamento temporale per l'esecuzione dei processi attraverso algoritmi di scheduling; lo scheduler si occupa di:
- inserisce i PCB dei processi che richiedono una risorsa in una coda (ogni coda si riferisce ad un possibile stato dei processi: coda di ready, coda di running,...)
- preleva dalle code i processi che andranno eseguiti
Architetture parallele
modificaEsistono diverse architetture parallele:
- Single Instruction Single Data (SISD): in un certo istante una singola istruzione viene eseguita da un singolo processo su un singolo dato (no parallelismo; bit)
- Single Instruction Multpile Data (SIMD): in un certo istante una singola istruzione viene eseguita da piu' processi su piu' dati (dati parallelizzati; numeri)
- Multiple Instruction Single Data (MISD): in un certo istante piu' istruzioni vengono eseguite da piu' processi su un singolo dato
- Multiple Instruction Multiple Data (MIMD): in un certo istante piu' istruzioni vengono eseguite da piu' processi su piu' dati (parallelismo su dati e su istruzioni)
Speed-up
modificaI vantaggi in termini di tempo ottenibili da architetture concorrenti sono lineari (solo per un numero ridotto di processori)
Grafo di precedenza
modificaUn grafo di precedenza e' un grafo aciclico diretto in cui:
- i nodi corrispondono a istruzioni o a processi
- gli archi corrispondono a condizioni di precedenza: ogni nodo puo' essere eseguito solo dopo che il padre e' terminato
Condizioni di Bernstein
modificaLe condizioni di Bernstein sono le condizioni necessarie affinché un algoritmo possa essere scritto in modo concorrente; dati due processi Pi
e Pj
, essi sono parallelizzabili se valgono le seguenti condizioni (R(P)
: input del processo P
; W(P)
: output del processo P):