Sistemi operativi: manuale pratico/Processi/Introduzione
Sistemi operativi: manuale pratico/Processi/Introduzione
Algoritmo
[modifica | modifica sorgente]Un algoritmo e' un procedimento logico che permette la risoluzione di un problema in un numero finito di passi
Programma
[modifica | modifica sorgente]Un programma e' un'entita' passiva (file in memoria) che formalizza un algoritmo attraverso un linguaggio di programmazione
Processo
[modifica | modifica sorgente]Un 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
[modifica | modifica sorgente]I processi sequenziali sono processi in cui ogni operazione viene eseguita dopo il termine di quella precedente (comportamento deterministico)
Processi concorrenti
[modifica | modifica sorgente]I 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
[modifica | modifica sorgente]I 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
[modifica | modifica sorgente]I 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
[modifica | modifica sorgente]Gli 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
[modifica | modifica sorgente]Un 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)
[modifica | modifica sorgente]Il 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)
[modifica | modifica sorgente]Il PID e' un intero non negativo (UNIX/linux), generato automaticamente dal SO, che identifica in modo univoco ciascun processo
PID riservati
[modifica | modifica sorgente]I 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
[modifica | modifica sorgente]Un 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
[modifica | modifica sorgente]Lo 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
[modifica | modifica sorgente]Esistono 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
[modifica | modifica sorgente]I vantaggi in termini di tempo ottenibili da architetture concorrenti sono lineari (solo per un numero ridotto di processori)
Grafo di precedenza
[modifica | modifica sorgente]Un 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
[modifica | modifica sorgente]Le 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):