Data la complessità di un SO, esso può avere componenti alquanto
diverse tra loro e un sistema può differire da un altro per moltissimi
aspetti.
Tuttavia allinterno di un qualsiasi SO è quasi sempre possibile
trovare dei sottosistemi che interagiscono tra loro per realizzare
le funzioni necessarie alla gestione dellintero sistema di
elaborazione:
1. Gestione dei processi
2. Gestione della memoria principale
3. Gestione della memoria secondaria
4. Gestione del file system
5. Gestione dei dispositivi di I/O
6. Protezione delle risorse
7. Interprete dei comandi
Un concetto chiave in tutti i sistemi operativi è il processo,
ovvero listanza di un programma in esecuzione, che è costituito
da:
1. il codice eseguibile (detto anche testo);
2. i dati su cui il codice lavora;
3. una lista (più o meno lunga) di strutture dati e informazioni
che occupano risorse di sistema.
E indispensabile comprendere che programma e processo sono
due cose distinte.
Un programma è unentità passiva, un codice binario
che può risiedere in un sistema di memorizzazione (come il disco)
anche se il computer è spento e la cui durata può essere (almeno
in teoria) infinita.
Di contro, un processo è unentità attiva, che scaturisce
da un programma quando questo viene mandato in esecuzione e la cui
durata è variabile e dipende dallambiente di esecuzione.
Inoltre per esistere un processo ha bisogno che il computer sia
almeno acceso :-).
Per chiarire meglio il concetto facciamo un esempio.
Quando in un sistema Microsoft WindowsÒ eseguiamo lapplicazione
Notepad (Blocco note nella versione italiana),
il sistema crea un processo a partire dal programma notepad.exe
che si trova nella directory di sistema (tipicamente C:\WINDOWS).
Il processo non esiste finché non ne invochiamo esplicitamente la
creazione, mentre il programma era già nel computer quando il sistema
è stato avviato.
Se, inoltre, mandiamo più volte in esecuzione il programma
(attenti a non esagerare!), vedremo aprirsi tante finestre dell'editor
quante sono state le nostre selezioni: ciascuna copia del Notepad
non è altro che un'istanza dello stesso programma notepad.exe,
e per il sistema ognuna di esse è un processo distinto.
Altrettanto avviene in qualsiasi altro SO, anche se esistono varianti
che al momento non è il caso di considerare.
Per potere eseguire un programma è necessario che esso sia caricato
in memoria principale, insieme ad una serie di informazioni indispensabili,
come ad es. valori di variabili e il puntatore alla prima istruzione
da eseguire (noto come program counter, spesso indicato con
la sigla pc), che complessivamente prendono il nome di contesto
del processo.
Durante lesecuzione il pc viene continuamente aggiornato per
puntare alla locazione di memoria che contiene listruzione
da eseguire al passo successivo.
Se un SO permette lesecuzione contemporanea di più processi,
detti anche task, allora si dice che il SO è multitasking
o multiprogrammato.
Tutti i sistemi attuali sono multitasking, classici esempi di sistemi
monoprogrammati sono le versioni di MS-DOS precedenti alla 5.0.
In sistemi con un solo processore (per intenderci, la stragrande
maggioranza dei PC) non è possibile che più processi vengano eseguiti
contemporaneamente dallunica CPU, ma esistono dei meccanismi
del SO che consentono di avere lillusione che ciò avvenga,
attraverso un continuo passaggio da un processo allaltro;
si parla perciò di pseudo-parallelismo, per distinguerlo
dal parallelismo reale che avviene nei sistemi con più CPU.
Perché il multitasking possa funzionare è necessario che il SO,
prima di passare da un processo ad un altro, salvi il contesto del
processo che sta eseguendo attualmente, in modo che quando esso
verrà rimesso in esecuzione, potrà proseguire dal punto in cui era
stato sospeso senza accorgersi di nulla.
Quando un processore passa da un processo ad un altro si dice che
esegue un cambio di contesto, ovvero un context switch.
Nella prossima puntata continueremo a parlare di processi.
Torna all'indice Generale del corso di Corso di Sistemi Operativi di Software Planet