2011-11-07 3 views
8

Mentre studiavo su libreria condivisa ho letto una dichiarazionecondiviso spazio di indirizzamento biblioteca

Sebbene il codice di una libreria condivisa è condivisa tra più processi, le sue variabili non sono. Ogni processo che utilizza la libreria ha le proprie copie delle variabili globali e statiche che sono definite all'interno della libreria.

Ho solo pochi dubbi.

  1. Se la parte di codice di ciascun processo si trova in uno spazio di indirizzi separato?
  2. Se la parte del codice della libreria condivisa si trova in uno spazio di indirizzi globale (univoco).

Sono solo un antipasto quindi per favore aiutami a capire.

Grazie!

+0

È "processo", non "avanzamento". –

+2

Controlla questo link: http: //duartes.org/gustavo/blog/post/anatomy-of-a-program-in-memory. Spiega molto bene il programma in memoria. È possibile vedere che le librerie condivise di solito sono mappate in memoria nello spazio degli indirizzi virtuali del processo –

risposta

17

Le librerie condivise vengono caricate in un processo tramite la memorizzazione della memoria del file in una parte dello spazio di indirizzamento del processo. Quando più processi caricano la stessa libreria, il sistema operativo consente semplicemente loro di condividere la stessa RAM fisica.

Parti della libreria che possono essere modificate, come globals statici, vengono generalmente caricate in modalità copia su scrittura, in modo che quando si tenta una scrittura, si verifichi un errore di pagina, il kernel risponde copiando la pagina interessata a un'altra pagina fisica di RAM (solo per quel processo), la mappatura viene reindirizzata alla nuova pagina e infine l'operazione di scrittura viene completata.

Per rispondere alle vostre punti specifici:

  1. Tutti i processi hanno un proprio spazio di indirizzamento. La condivisione della memoria fisica tra i processi è invisibile a ogni processo (a meno che non lo faccia deliberatamente tramite un'API di memoria condivisa).
  2. Tutti i dati e il codice si trovano nella RAM fisica, che è una sorta di spazio indirizzo. La maggior parte degli indirizzi che si vedono probabilmente, tuttavia, sono indirizzi di memoria virtuale che appartengono allo spazio di indirizzamento di un processo o di un altro, anche se quel "processo" è il kernel.