Sistemi Operativi: gestione dei processi



In questo articolo spiegherò cosa sono e come vengono gestiti dal sistema operativo i processi.

Innanzitutto, cosè un processo? All’interno di un sistema operativo un processo rappresenta un programma in esecuzione. Tutti sanno che un programma (qualunque esso sia) ha bisogno di essere caricato in memoria centrale per essere eseguito (perchè la CPU non può leggere direttamente dal disco per eseguire un programma).

Una prima impressione potrebbe portare a pensare che quindi un processo sia un’immagine di un programma che è stata copiata in memoria centrale, ma questo è inesatto, il codice esegubile di un programma è solo una parte del processo in sè e per sè, il quale ha bisogno di altre informazioni che devono risiedere in memoria.

La caratteristica principale di un processo è che durante la sua vita (da quando è caricato in memoria fino a che termina la sua esecuzione) può cambiare “stato”.
Gli stati ammissibili sono (con qualche variazioni a seconda dell’OS):
-> Nuovo (stato iniziale del processo);
-> Esecuzione (indica che il processo sta usando la CPU);
-> Attesa (indica che il processo attende un evento)
-> Pronto (indica che il processo è pronto ad usare la CPU);
-> Terminato (indica che il processo ha finito la sua esecuzione e viene terminato);

Tutte le informazioni che sono relative allo stesso processo in memoria vengono raggruppate in un’unica struttura dati, il blocco di controllo del processo (Process Control Block, PCB).

Il PCB contiene numerose informazioni, tra cui:
-> Stato del processo;
-> Informazioni sulla gestione della memoria (Serve per tradurre lo spazio di indirizzi logici del   processo in indirizzi fisici, riguarda la gestione della memoria e non sarà trattata in questa sede)
-> Informazioni sullo scheduling
-> Informazioni sull’I/O (Ad esempio la lista dei files aperti da quel processo);

Infine il sistema operativo fornisce ovviamente dei metodi per creare e terminare processi.
In genere (nella maggior parte degli OS) un processo può creare (tramite un’apposita chiamata di sistema, fork() in Linux) altri processi e passargli tutte le proprie risorse. Il processo figlio sarà quindi un duplicato del padre e avrà le stesse sue risorse disponibili. Quando invece un processo termina la propria esecuzione chiede al sistema operativo (con un’altra chiamata di sistema, exit()) di essere rimosso dalla memoria per liberare risorse, in questo caso il padre di quel processo potrà ricevere lo stato di uscita del figlio con la chiamata di sistema wait() con la quale attende la terminazione del processo.

Detto ciò sappiamo cosa si aun processo e come venga rappresentato in memoria.
Sappiamo anche come viene creato e terminato un generico processo.
Ciò che manca è sapere come il sistema operativo organizza l’esecuzione dei processi.
Infatti i sistemi operativi moderni consentono l’esecuzione concorrente di più processi, quindi tengono più PCB in memoria.
Tutti questi PCB in memoria vengono organizzati in code, delle strutture dati che tengono i PCB aggregati seconodo un ordine. Le code presenti nei sistemi operativi possono essere svariate, ma quelle principali sono la coda dei processi pronti (ready queue), che contiene i PCB dei processi il cui stato è PRONTO e le code di dispositivo, che contengono i PCB dei processi che sono in attesa di un particolare evento di un dispositivo (ad esempio la lettura da disco).

Ogni volta che la CPU passa in uno stato di inattività (magari perchè il processo in esecuzione è in stato di attesa) il sistema operativo sceglie tra la coda dei processi pronti il processo che verrà mandato in esecuzione. Il modulo del SO che si occupa di questo è lo scheduler che tramite un algoritmo di scheduling estrae un PCB e lo passa ad un altro modulo, il dispatcher, che si incaricherà di effettuare il cambio di contesto (operazione tramite la quale vengono salvati i risultati temporanei del processo da sostituire e viene caricato il nuovo processo) tra i processi e avviare l’esecuzione del nuovo processo.

Lo scheduler si avvale di un algoritmo di scheduling per estrarre il PCB del processo da eseguire. DI algoritmi di scheduling ce ne sono innumerevoli, ma non saranno trattati in questo articolo, in quanto il suo unico scopo era introdurre il funzionamento (in linea teorica) dei processi all’interno di un sistema operativo.
Spero sia stato utile.

Annunci sponsorizzati:
Condividi su Facebook Condividi su Twitter!
Pinterest