X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=process.tex;h=307ab489358e78614b1f114eebe1a79588ff9014;hp=ec40d300b64eb680d1e812926dcbea8bfc6c82a0;hb=c9c149db16c39efdfa53bde804b7a189dd923eef;hpb=7a51b7bb2f39f6a4c5ad3f1dfcf6eda60d7eec38 diff --git a/process.tex b/process.tex index ec40d30..307ab48 100644 --- a/process.tex +++ b/process.tex @@ -638,16 +638,17 @@ programma in esecuzione, e le varie funzioni utilizzabili per la sua gestione. \subsection{I concetti generali} \label{sec:proc_mem_gen} +\index{memoria~virtuale|(} + Ci sono vari modi in cui i sistemi operativi organizzano la memoria, ed i dettagli di basso livello dipendono spesso in maniera diretta dall'architettura dell'hardware, ma quello più tipico, usato dai sistemi -unix-like come Linux è la cosiddetta \index{memoria~virtuale} \textsl{memoria - virtuale} che consiste nell'assegnare ad ogni processo uno spazio virtuale -di indirizzamento lineare, in cui gli indirizzi vanno da zero ad un qualche -valore massimo.\footnote{nel caso di Linux fino al kernel 2.2 detto massimo - era, per macchine a 32bit, di 2Gb. Con il kernel 2.4 ed il supporto per la - \textit{high-memory} il limite è stato esteso anche per macchine a 32 bit.} - +unix-like come Linux è la cosiddetta \textsl{memoria virtuale} che consiste +nell'assegnare ad ogni processo uno spazio virtuale di indirizzamento lineare, +in cui gli indirizzi vanno da zero ad un qualche valore massimo.\footnote{nel + caso di Linux fino al kernel 2.2 detto massimo era, per macchine a 32bit, di + 2Gb. Con il kernel 2.4 ed il supporto per la \textit{high-memory} il limite + è stato esteso anche per macchine a 32 bit.} Come accennato nel cap.~\ref{cha:intro_unix} questo spazio di indirizzi è virtuale e non corrisponde all'effettiva posizione dei dati nella RAM del @@ -683,17 +684,17 @@ della funzione \func{printf} starà su una sola pagina di memoria reale che farà da supporto a tutte le pagine di memoria virtuale di tutti i processi che hanno detta funzione nel loro codice. -La corrispondenza fra le pagine della \index{memoria~virtuale} memoria -virtuale di un processo e quelle della memoria fisica della macchina viene -gestita in maniera trasparente dal kernel.\footnote{in genere con l'ausilio - dell'hardware di gestione della memoria (la \textit{Memory Management Unit} - del processore), con i kernel della serie 2.6 è comunque diventato possibile - utilizzare Linux anche su architetture che non dispongono di una MMU.} -Poiché in genere la memoria fisica è solo una piccola frazione della memoria -virtuale, è necessario un meccanismo che permetta di trasferire le pagine che -servono dal supporto su cui si trovano in memoria, eliminando quelle che non -servono. Questo meccanismo è detto \index{paginazione} \textsl{paginazione} -(o \textit{paging}), ed è uno dei compiti principali del kernel. +La corrispondenza fra le pagine della memoria virtuale di un processo e quelle +della memoria fisica della macchina viene gestita in maniera trasparente dal +kernel.\footnote{in genere con l'ausilio dell'hardware di gestione della + memoria (la \textit{Memory Management Unit} del processore), con i kernel + della serie 2.6 è comunque diventato possibile utilizzare Linux anche su + architetture che non dispongono di una MMU.} Poiché in genere la memoria +fisica è solo una piccola frazione della memoria virtuale, è necessario un +meccanismo che permetta di trasferire le pagine che servono dal supporto su +cui si trovano in memoria, eliminando quelle che non servono. Questo +meccanismo è detto \index{paginazione} \textsl{paginazione} (o +\textit{paging}), ed è uno dei compiti principali del kernel. Quando un processo cerca di accedere ad una pagina che non è nella memoria reale, avviene quello che viene chiamato un \itindex{page~fault} \textit{page @@ -716,6 +717,7 @@ esigenze specifiche di prestazioni è possibile usare delle funzioni che permettono di bloccare il meccanismo della \index{paginazione} paginazione e mantenere fisse delle pagine in memoria (vedi sez.~\ref{sec:proc_mem_lock}). +\index{memoria~virtuale|)} \subsection{La struttura della memoria di un processo} \label{sec:proc_mem_layout} @@ -730,10 +732,10 @@ un'associazione nella memoria virtuale, il kernel risponde al relativo \itindex{page~fault} \textit{page fault} mandando un segnale \signal{SIGSEGV} al processo, che normalmente ne causa la terminazione immediata. -È pertanto importante capire come viene strutturata \index{memoria~virtuale} -la memoria virtuale di un processo. Essa viene divisa in \textsl{segmenti}, -cioè un insieme contiguo di indirizzi virtuali ai quali il processo può -accedere. Solitamente un programma C viene suddiviso nei seguenti segmenti: +È pertanto importante capire come viene strutturata la memoria virtuale di un +processo. Essa viene divisa in \textsl{segmenti}, cioè un insieme contiguo di +indirizzi virtuali ai quali il processo può accedere. Solitamente un +programma C viene suddiviso nei seguenti segmenti: \begin{enumerate*} \item Il \index{segmento!testo} segmento di testo o \textit{text segment}. Contiene il codice del programma, delle funzioni di librerie da esso