next up previous contents index return to home!
Next: Il File System di Up: Processi Previous: Variabili di ambiente   Indice   Indice analitico

Layout di memoria di un processo

Ogni processo ha un suo spazio di indirizzamento privato e non visibile dall'esterno. Ciò vuol dire che due processi non possono accedere a una stessa zona di memoria[*]. Questa separazione totale degli spazi di indirizzamento è ottenuta sfruttando le caratteristiche hardware del processore (segmentazione, protezione di memoria, ecc.).

Figura 2.2: Tipico layout di memoria di un processo.
\begin{figure}\centerline{\psfig{figure=figs/proc-mem.eps,width=8cm}}\end{figure}

Lo spazio di indirizzamento di un processo è di solito logicamente organizzato come in figura 2.2. Naturalmente, l'esatto layout dipende dal processore utilizzato e dalle convenzioni del sistema operativo e del compilatore C. Per esempio, in certi sistemi lo stack cresce vero l'alto, al contrario di come mostrato in figura.

Si distingono:

In particolare, lo heap è quella zona di memoria a lunghezza variabile in cui vengono allocate le zone di memoria che l'utente alloca dinamicamente con le funzioni malloc e free:



#include<stdlib.h>

void *malloc(size_t size);
void free(void * ptr);


Queste funzioni non sono chiamate di sistema operativo (syscall), ma sono implementate nella C standard library, e dunque nello spazio utente (libcall). Esse comunque si appoggiano su delle chiamate di sistema (tipicamente la sbrk()), che permetteno di allargare o restringere la dimensione dello heap.

Bisogna fare molta attenzione nell'uso di queste due funzioni! Un problema abbastanza grosso è che le due funzioni in questione non sono rientranti, quindi non dovrebbero essere usate all'interno di signal handler, e comunque bisognerebbe utilizzarle con attenzione in presenza di segnali.


next up previous contents index
Next: Il File System di Up: Processi Previous: Variabili di ambiente   Indice   Indice analitico
Giuseppe Lipari 2002-10-27