From: Simone Piccardi Date: Fri, 1 Sep 2006 17:13:26 +0000 (+0000) Subject: Riorganizzazione delle sezioni sulla gestione della memoria e X-Git-Url: https://gapil.gnulinux.it/gitweb/?a=commitdiff_plain;h=5b0fe246734ccb203053e5e78e047ee4d6e991ca;p=gapil.git Riorganizzazione delle sezioni sulla gestione della memoria e inserimento degli argomenti da trattare. --- diff --git a/ipc.tex b/ipc.tex index 080d33b..5c1453d 100644 --- a/ipc.tex +++ b/ipc.tex @@ -2556,7 +2556,7 @@ direttamente, la situazione dopo l'esecuzione di \func{shmat} fig.~\ref{fig:ipc_shmem_layout} (per la comprensione del resto dello schema si ricordi quanto illustrato al proposito in sez.~\ref{sec:proc_mem_layout}). In particolare l'indirizzo finale del segmento dati (quello impostato da -\func{brk}, vedi sez.~\ref{sec:proc_mem_sbrk_alloca}) non viene influenzato. +\func{brk}, vedi sez.~\ref{sec:proc_mem_alloc}) non viene influenzato. Si tenga presente infine che la funzione ha successo anche se il segmento è stato marcato per la cancellazione. diff --git a/process.tex b/process.tex index 2cca598..ae8cb03 100644 --- a/process.tex +++ b/process.tex @@ -467,10 +467,6 @@ attraverso i puntatori alla memoria loro riservata che si sono ottenuti dalle funzioni di allocazione. -\subsection{Le funzioni \func{malloc}, \func{calloc}, \func{realloc} e - \func{free}} -\label{sec:proc_mem_malloc} - Le funzioni previste dallo standard ANSI C per la gestione della memoria sono quattro: \funcd{malloc}, \funcd{calloc}, \funcd{realloc} e \funcd{free}, i loro prototipi sono i seguenti: @@ -562,13 +558,13 @@ variabile di ambiente \val{MALLOC\_CHECK\_} che quando viene definita mette in uso una versione meno efficiente delle funzioni suddette, che però è più tollerante nei confronti di piccoli errori come quello di chiamate doppie a \func{free}. In particolare: -\begin{itemize} +\begin{itemize*} \item se la variabile è posta a zero gli errori vengono ignorati; \item se è posta ad 1 viene stampato un avviso sullo \textit{standard error} (vedi sez.~\ref{sec:file_std_stream}); \item se è posta a 2 viene chiamata \func{abort}, che in genere causa l'immediata conclusione del programma. -\end{itemize} +\end{itemize*} Il problema più comune e più difficile da risolvere che si incontra con le funzioni di allocazione è quando non viene opportunamente liberata la memoria @@ -629,9 +625,6 @@ ricompilare il programma,\footnote{esempi sono \textit{Dmalloc} molto complesse riguardo l'allocazione della memoria. -\subsection{Le funzioni \func{alloca}, \func{brk} e \func{sbrk}} -\label{sec:proc_mem_sbrk_alloca} - Una possibile alternativa all'uso di \func{malloc}, che non soffre dei problemi di \textit{memory leak}\itindex{memory~leak} descritti in precedenza, è la funzione \funcd{alloca}, che invece di allocare la memoria nello @@ -694,9 +687,8 @@ Le due funzioni seguenti\footnote{le due funzioni sono state definite con BSD esplicitamente escluse dallo standard POSIX.} vengono utilizzate soltanto quando è necessario effettuare direttamente la gestione della memoria associata allo spazio dati di un processo, ad esempio qualora si debba -implementare la propria versione delle funzioni di allocazione della memoria -viste in sez.~\ref{sec:proc_mem_malloc}. La prima funzione è \funcd{brk}, ed -il suo prototipo è: +implementare la propria versione delle funzioni di allocazione della memoria. +La prima funzione è \funcd{brk}, ed il suo prototipo è: \begin{prototype}{unistd.h}{int brk(void *end\_data\_segment)} Sposta la fine del segmento dei dati. @@ -705,7 +697,7 @@ il suo prototipo \end{prototype} La funzione è un'interfaccia diretta all'omonima system call ed imposta -l'indirizzo finale del \index{segmento!dati}segmento dati di un processo +l'indirizzo finale del \index{segmento!dati} segmento dati di un processo all'indirizzo specificato da \param{end\_data\_segment}. Quest'ultimo deve essere un valore ragionevole, ed inoltre la dimensione totale del segmento non deve comunque eccedere un eventuale limite (si veda @@ -733,12 +725,6 @@ per i programmi normali standard descritte in precedenza, che sono costruite su di esse. -% \subsection{La personalizzazione delle funzioni di allocazione} -% \label{sec:proc_mem_malloc_custom} - -% TODO documentare \func{madvise} -% TODO documentare \func{mincore} - \subsection{Il controllo della memoria virtuale} \label{sec:proc_mem_lock} @@ -920,12 +906,18 @@ che esse vengano mappate in RAM dallo \itindex{stack} stack, dopo di che, per essere sicuri che esse siano state effettivamente portate in memoria, ci si scrive sopra. -% TODO: trattare \func{madvise} +\itindend{memory~locking} + +% TODO documentare \func{madvise} +% TODO documentare \func{mincore} \index{memoria~virtuale|)} -\itindend{memory~locking} + +% \subsection{Gestione avanzata dell'allocazione della memoria} +% \label{sec:proc_mem_malloc_custom} +% TODO: trattare le funzionalità avanzate di \func{malloc} @@ -949,6 +941,7 @@ manipolare ed utilizzare le variabili di ambiente. \subsection{Il formato degli argomenti} \label{sec:proc_par_format} + In genere il passaggio degli argomenti al programma viene effettuato dalla shell, che si incarica di leggere la linea di comando e di effettuarne la scansione (il cosiddetto \textit{parsing}) per individuare le parole che la