Come è già stato accennato, la nascita di un processo può avvenire solo tramite una richiesta da parte di un altro processo già esistente, utilizzando la chiamata di sistema fork (man page fork(2)) (per esempio, quando si avvia un programma attraverso il terminale, è la shell che genera il processo relativo al programma lanciato). Quando viene creato un processo, viene creata in memoria centrale la struttura dati task_struct28 definita in include/linux/sched.h. I processi sono raggiungibili dal sistema attraverso due meccanismi diversi:
|
Nella release del kernel 2.2 i processi erano raggiungibili dal sistema operativo attraverso il task vector, un vettore di puntatori in cui ogni elemento puntava ad una struttura task_struct32. Questo limitava il numero di processi contemporanei presenti su una macchina alla dimensione massima di tale vettore, ovvero a 512 elementi. |
Ad ogni processo, come illustrato nella fig. 7.1, vengono assegnati automaticamente dal sistema un canale (file) per l’input, ovvero il canale attraverso il quale il processo potrà ricevere gli eventuali dati da elaborare, uno per l’output, cioè il canale attraverso il quale il processo potrà fornire gli eventuali risultati, ed uno per l’error, che, come indica il nome, sarà utilizzato dal processo per fornire eventuali messaggi relativi ad errori riscontrati durante l’esecuzione. Lo standard input è associato al buffer di tastiera ed è individuato dal file descriptor 0, lo standard output è associato al buffer dello schermo ed è individuato dal file descriptor 1 e lo standard error è anch’esso associato al buffer dello schermo ed è individuato dal file descriptor 2.33
Ad ogni processo viene assegnato anche un ambiente (environment), ovvero un apposito spazio di memoria che contiene le impostazioni di variabili, dette appunto variabili di ambiente (v. sez. 3.4.4), alle quali il processo può fare riferimento. Ad esempio ...
[da completare ...]
È opportuno sottolineare il fatto che lo spazio di memoria riservato all’ambiente è limitato, quindi l’utilizzo di un numero molto elevato di variabili di ambiente oppure l’utilizzo di variabili di ambiente che fanno uso di molto spazio di memoria, può facilmente fuoriuscire da tale spazio di memoria, causando problemi.