X-Git-Url: https://gapil.gnulinux.it/gitweb/?a=blobdiff_plain;f=process.tex;h=70ed245078c5181789ddbe490e9e14d3a8d662c4;hb=9553ddd2a3f35b8b432d3b9cab8c054a14e84bc5;hp=3f500455336e5b8f1bfb686e4fdbfc1d1a95649a;hpb=ff76d56c6a2c280cbe4f153173488871d7b12336;p=gapil.git diff --git a/process.tex b/process.tex index 3f50045..70ed245 100644 --- a/process.tex +++ b/process.tex @@ -49,8 +49,8 @@ dinamico del codice e alla fine lo esegue. Infatti, a meno di non aver specificato il flag \texttt{-static} durante la compilazione, tutti i programmi in Linux sono incompleti e necessitano di essere \textsl{collegati} alle librerie condivise quando vengono avviati. La procedura è controllata da -alcune variabili di ambiente e dal contenuto di \file{/etc/ld.so.conf}. I -dettagli sono riportati nella man page di \cmd{ld.so}. +alcune variabili di ambiente e dal contenuto di \conffile{/etc/ld.so.conf}. I +dettagli sono riportati nella pagina di manuale di \cmd{ld.so}. Il sistema fa partire qualunque programma chiamando la funzione \func{main}; sta al programmatore chiamare così la funzione principale del programma da cui @@ -82,8 +82,8 @@ controllo direttamente alla funzione di conclusione dei processi del kernel. Oltre alla conclusione ``\textsl{normale}'' esiste anche la possibilità di una conclusione ``\textsl{anomala}'' del programma a causa della ricezione di un -segnale (si veda cap.~\ref{cha:signals}) o della chiamata alla funzione -\func{abort}; torneremo su questo in sez.~\ref{sec:proc_termination}. +segnale (tratteremo i segnali in cap.~\ref{cha:signals}) o della chiamata alla +funzione \func{abort}; torneremo su questo in sez.~\ref{sec:proc_termination}. Il valore di ritorno della funzione \func{main}, o quello usato nelle chiamate ad \func{exit} e \func{\_exit}, viene chiamato \textsl{stato di uscita} (o @@ -402,10 +402,16 @@ seguenti segmenti: viene il nome \itindex{stack} \textit{stack}) in sequenza uno sull'altro; in questo modo le funzioni possono essere chiamate ricorsivamente. Al ritorno della funzione lo spazio è automaticamente rilasciato e - ``\textsl{ripulito}''. La pulizia in C e C++ viene fatta dal - chiamante.\footnote{a meno che non sia stato specificato l'utilizzo di una - calling convention diversa da quella standard.} -% TODO verificare le modalità di cambiamento della calling convention + ``\textsl{ripulito}''.\footnote{il compilatore si incarica di generare + automaticamente il codice necessario, seguendo quella che viene chiamata + una \textit{calling convention}; quella standard usata con il C ed il C++ + è detta \textit{cdecl} e prevede che gli argomenti siano caricati nello + stack dal chiamante da destra a sinistra, e che si il chiamante stesso ad + eseguire la ripulitura dello stack al ritorno della funzione, se ne + possono però utilizzare di alternative (ad esempio nel pascal gli + argomenti sono inseriti da sinistra a destra ed è compito del chiamato + ripulire lo stack), in genere non ci si deve preoccupare di questo + fintanto che non si mescolano funzioni scritte con linguaggi diversi.} La dimensione di questo segmento aumenta seguendo la crescita dello \itindex{stack} \textit{stack} del programma, ma non viene ridotta quando @@ -414,7 +420,27 @@ seguenti segmenti: \begin{figure}[htb] \centering - \includegraphics[height=12cm]{img/memory_layout} +% \includegraphics[height=12cm]{img/memory_layout} + \begin{tikzpicture} + \draw (0,0) rectangle (4,1); + \draw (2,0.5) node {text}; + \draw (0,1) rectangle (4,2.5); + \draw (2,1.75) node {dati inizializzati}; + \draw (0,2.5) rectangle (4,5); + \draw (2,3.75) node {dati non inizializzati}; + \draw (0,5) rectangle (4,9); + \draw[dashed] (0,6) -- (4,6); + \draw[dashed] (0,8) -- (4,8); + \draw (2,5.5) node {heap}; + \draw (2,8.5) node {stack}; + \draw [->] (2,6) -- (2,6.5); + \draw [->] (2,8) -- (2,7.5); + \draw (0,9) rectangle (4,10); + \draw (2,9.5) node {environment}; + \draw (4,0) node [anchor=west] {\texttt{0x08000000}}; + \draw (4,5) node [anchor=west] {\texttt{0x08xxxxxx}}; + \draw (4,9) node [anchor=west] {\texttt{0xC0000000}}; + \end{tikzpicture} \caption{Disposizione tipica dei segmenti di memoria di un processo.} \label{fig:proc_mem_layout} \end{figure} @@ -910,6 +936,7 @@ ci si scrive sopra. \itindend{memory~locking} + % TODO documentare \func{madvise} % TODO documentare \func{mincore} @@ -919,7 +946,11 @@ ci si scrive sopra. % \subsection{Gestione avanzata dell'allocazione della memoria} % \label{sec:proc_mem_malloc_custom} + % TODO: trattare le funzionalità avanzate di \func{malloc} +% TODO: trattare \func{memalign} +% TODO: trattare \func{valloc} +% TODO: trattare \func{posix\_memalign} @@ -1701,7 +1732,8 @@ dichiarandole tutte come \direct{volatile}.\footnote{la direttiva % LocalWords: clearenv libc value overwrite string reference result argument % LocalWords: socket variadic ellipsis header stdarg execl self promoting last % LocalWords: float double short register type dest src extern setjmp jmp buf -% LocalWords: env return if while sottoprocesso Di +% LocalWords: env return if while Di page cdecl +% LocalWords: environment %%% Local Variables: %%% mode: latex