09/08/2013
M. Malatesta 1-Nucleo e processi-15 1
Modulo T3
1-Nucleo e processi
Corso di Informatica
Prerequisiti
Concetto stack
Programmazione elementare
Struttura elementare del computer
Concetto intuitivo di sottoprogramma
09/08/2013
M. Malatesta 1-Nucleo e processi-15 3
Introduzione
Vediamo più da vicino ora il nucleo e i processi che esso è in grado di gestire.
Come fa il nucleo a far avanzare in parallelo più processi?
Come fanno i vari processi ad essere indipendenti?
Cosa vuol dire che un processo “avanza”?
Come individuare l’avanzamento di un processo?
A queste domande diamo una risposta in questa Unità.
Esecuzione parallela
Nell’ottica di perseguire il massimo sfruttamento possibile della risorsa CPU sono state introdotte tecniche di parallelismo che prevedono la presenza di più di un processore. Pertanto, distinguiamo:
1. multitasking
2. multiprogrammazione 3. multielaborazione
09/08/2013
M. Malatesta 1-Nucleo e processi-15 5
Esecuzione parallela
- multitasking
Il multitasking di tipo più semplice si realizza con 2 soli processori:
CPU
Processore di I/O
Questa tecnica consiste nell’avere più programmi indipendenti caricati in memoria. Qualora uno di essi faccia richiesta di I/O, la sua esecuzione viene delegata al processore di I/O, mentre la CPU può passare ad eseguire un altro programma tra quelli presenti in memoria.
Esecuzione parallela
- multiprogrammazione
La multiprogrammazione è una evoluzione del multitasking che prevede l’aggiunta di tecniche per la protezione della memoria che rendono effettivamente indipendenti le aree di essa destinate ciascuna ad un diverso programma.
In sostanza si tratta di uno pseudo-parallelismo che prevede che la CPU operi tra i vari programmi, mentre in parallelo operano le periferiche.
09/08/2013
M. Malatesta 1-Nucleo e processi-15 7
Esecuzione parallela
- multielaborazione
La multielaborazione (multiprocessing) è una evoluzione della
multiprogrammazione adottata nel caso di elaboratori con più CPU e più processori di I/O.
I processori di I/O assumono un nome diverso a seconda del tipo di elaboratore:
DMA(Direct Memory Access) nel caso dei personal computer;
Canale di I/Onegli elaboratori di grosse dimensioni (mainframe).
Parallelismo e processi
Il concetto di processo che abbiamo intuitivamente introdotto, nasce a causa del fatto che l’esecuzione di un programma su un processore può più volte essere sospesa in un certo intervallo di tempo.
Analogamente in un certo intervallo di tempo, un processore può eseguire sequenze di istruzioni appartenenti a programmi diversi.
In pratica, un processo può essere:
un programma in esecuzione;
un’attività asincrona (leggere un file da disco)
09/08/2013
M. Malatesta 1-Nucleo e processi-15 9
Definizione di processo
Il processo P(X) associato al programma X rappresenta la sequenza di azioni svolte da un processore P per eseguire
le istruzioni di X.
Gerarchie di processi
Come sappiamo, un processo può generare, in modo gerarchico, altri processi detti processi figli o sottoprocessi.
In ambiente UNIX, ad esempio, il processo che nasce al momento del boot è chiamato init.
Da questo, successivamente, nascono i processi:
di configurazione della macchina
dei terminali
degli utenti
Esistono anche altri processi, trasparenti agli utenti, ma visibili nella process table, che restano in vita durante tutto il periodo
09/08/2013
M. Malatesta 1-Nucleo e processi-15 11
Il nucleo e le system call
Tra i vari compiti del nucleo c’è la gestione dei processi, una serie di operazioni che possono anche essere eseguite da programma, invocando apposite routine di sistema (generalmente in linguaggio C) che sono le system call(SC).
Nella gestione dei processi da programma, sono previste le seguenti operazioni:
creazione
sospensione
terminazione
In questa sede diamo una panoramica delle funzionalità delle chiamate di sistema, rimandando al corso di programmazione avanzata il loro effettivo utilizzo all’interno di programmi
Creazione di processi
Un processo può esere creato ad esempio facendo doppio click su un’icona o istanziando in un programma P (ad esempio scritto in C) una delle due chiamate di sistema seguenti:
fork(): crea un processo P’, figlio di P e indipendente da questo; i due processi avanzano entrambi in parallelo;
exec (program): sostituisce il processo P chiamante con quello P’
generato dall’esecuzione di program.
Il fatto che la SC exec() sostituisce P con
09/08/2013
M. Malatesta 1-Nucleo e processi-15 13
Creazione di processi
- fallimento di una SC
A volte, una SC fallisce, ossia non può produrre l’azione richiesta, per una serie di motivi; in genere il fallimento di una SC si verifica quando essa restituisce il valore -1.
È bene che il programmatore preveda nel suo programma un controllo sul successo o meno della SC.
Ad esempio, le due chiamate possono fallire per varie cause:
la fork() può fallire se, ad esempio la tabella dei processi è piena e non c’è più spazio per allocare i dati di un nuovo processo;
la exec() può fallire se, ad esempio, il file program, che specifica il programma da mandare in esecuzione, non esiste.
Avanzamento di processi
Poichè il concetto di processo coinvolge la nozione di tempo, come sappiamo è preferibile parlare di stato di avanzamento di un processo P(X)all’ìstante t, piuttosto che di esecuzione di X.
Ma come fa il nucleo a tenere traccia dello stato di avanzamento di ogni processo presente nel sistema?
09/08/2013
M. Malatesta 1-Nucleo e processi-15 15
Avanzamento di processi
- descrittore di processo
Per poter gestire i processi il nucleo deve disporre di tutte le informazioni ad essi relative. Queste informazioni sono contenute in una struttura dati detta descrittore di processoo PCB (Process Control Block), appartenente allo spazio di indirizzamento del processo.
Alcune delle informazioni più importanti nel PCB sono:
pid(process identifier), numero intero che individua univocamente il processo;
identificatore del padre (ppid);
priorità del processo;
puntatore alla lista dei figli;
puntatore alla lista delle aree di memoria usate;
puntatore alla lista delle risorse usate;
area di salvataggio dello stato della CPU (per le interruzioni). Segue
Avanzamento di processi
- descrittore di processo
valore del program counter
valori dei registri della CPU (stack pointer, registro indice, ecc)
elenco dei file in uso
contabilizzazione delle risorse
09/08/2013
M. Malatesta 1-Nucleo e processi-15 17
Terminazione di processi
Un processo viene terminato con la chiamata di sistema al nucleo
kill(pid)
dove pid indica il process identifier del processo da terminare.
Altre system call sono reperibili nella documentazione del linguaggio C avanzato.
Ovviamente, altri casi in cui un processo termina sono quando il programma tenta un’operazione illecita, o quando si verifica un errore irrecuperabile
Argomenti
Esecuzione parallela – multitasking
– multiprogrammazione – multielaborazione
Parallelismo e processi
Definizione di processo
Gerarchie di processi
Il nucleo e le system call
Creazione di processi – fallimento di una SC
09/08/2013
M. Malatesta 1-Nucleo e processi-15 19
Altre fonti di informazione
A. Lorenzi, D.Rossi – I fondamenti della programmazione-ATLAS