Finita (quasi) exec
authorSimone Piccardi <piccardi@gnulinux.it>
Sun, 7 Oct 2001 21:39:32 +0000 (21:39 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Sun, 7 Oct 2001 21:39:32 +0000 (21:39 +0000)
fileintro.tex
gapil.tex
prochand.tex

index 4fc1e38854db8a4f24f4e1f0044a1382649c3f79..e7f2419a1266ef2bad03dc30fa33a3fb7ee71de6 100644 (file)
@@ -334,7 +334,7 @@ di filesystem differenti all'interno dello stesso albero delle directory
 
 Quando un processo esegue una system call che opera su un file il kernel
 chiama sempre una funzione implementata nel VFS; la funzione eseguirà le
-manipolazioni sulle strutture generiche e utilizzaerà poi la chiamata alla
+manipolazioni sulle strutture generiche e utilizzarà poi la chiamata alla
 opportune routine del filesystem specifico a cui si fa riferimento. Saranno
 queste a chiamare le funzioni di più basso livello che eseguono le operazioni
 di I/O sul dispositivo fisico, secondo lo schema riportato in \nfig.
@@ -352,11 +352,11 @@ files; le operazioni sono suddivise su tre tipi di oggetti: filesystem, inode
 e file, corrispondenti a tre apposite strutture definite nel kernel.
 
 Il VFS usa una tabella mantenuta dal kernel che contiene il nome di ciascun
-filesystem supportato, quando si vuole inserire il supporto di un nuovo
-filesystem tutto quello che occorre è una chiamata alla funzione
-\func{register\_filesystem} passando un'apposita struttura che
-(\var{file\_system\_type}) contiene l'implementazione edl medesimo, che sarà
-aggiunta alla citata tabella.
+filesystem supportato: quando si vuole inserire il supporto di un nuovo
+filesystem tutto quello che occorre è chiamare la funzione
+\func{register\_filesystem} passandole un'apposita struttura
+(\var{file\_system\_type}) che contiene i dettagli per il riferimento
+all'implementazione del medesimo, che sarà aggiunta alla citata tabella.
 
 
 In questo modo quando viene effettuata la richiesta di montare un nuovo disco
index f93809919f9f3cd00a5dc3457dfd6b69daeab0e4..f3c17437c9efa00a1cc0c2cafdf3435d0aa8ee19 100644 (file)
--- a/gapil.tex
+++ b/gapil.tex
@@ -1,4 +1,4 @@
-%%
+%% 
 %% GaPiL : Guida alla Programmazione in Linux
 %%
 %% S. Piccardi Feb. 2001
index 09e1b59fbbd22c7bf9fa9eda3f1155c379fa193c..06f8e57c8683b4e702a999a453577e99ef45f995 100644 (file)
@@ -852,6 +852,7 @@ certezza che la chiamata a \func{wait} non si bloccher
 
 \begin{table}[!htb]
   \centering
+  \footnotesize
   \begin{tabular}[c]{|c|p{10cm}|}
     \hline
     \textbf{Macro} & \textbf{Descrizione}\\
@@ -1109,7 +1110,7 @@ indicato dal parametro \var{path}, che viene interpretato come il
 
 \begin{figure}[htb]
   \centering
-  \includegraphics[width=8cm]{img/exec_rel.eps}
+  \includegraphics[width=13cm]{img/exec_rel.eps}
   \caption{La inter-relazione fra le sei funzioni della famiglia \func{exec}}
   \label{fig:proc_exec_relat}
 \end{figure}
@@ -1161,12 +1162,30 @@ altri file restano aperti. Questo significa che il comportamento di default 
 che i file restano aperti attraverso una \func{exec}, a meno di una chiamata
 esplicita a \func{fcntl} che setti il suddetto flag.
 
-Per le directory lo standard POSIX.1 richiede che esse vengano chiuse, in
-genere questo è fatto automaticamente dalla funzione \func{opendir} che
-effettua il settaggio del flag in maniera trasparente all'utente.
-
-
-
+Per le directory lo standard POSIX.1 richiede che esse vengano chiuse
+attraverso una \func{exec}, in genere questo è fatto dalla funzione
+\func{opendir} che effettua da sola il settaggio del flag di
+\textit{close-on-exec} in maniera trasparente all'utente.
+
+Abbiamo detto che il \textit{real user ID} ed il \textit{real group ID}
+restano gli stessi all'esecuzione di \func{exec}; lo stesso vale per
+l'\textit{effective user ID} ed l'\textit{effective group ID}, tranne il caso
+in cui il file che si va ad eseguire ha o il \acr{suid} bit o lo \acr{sgid}
+bit settato, nel qual caso \textit{effective user ID} e \textit{effective
+  group ID} vengono settati rispettivamente all'utente o al gruppo cui il file appartiene.
+
+Se il file da eseguire è in formato \emph{a.out} e necessita di librerie
+condivise, viene lanciato il \textit{linker} dinamico \cmd{ld.so} prima del
+programma per caricare le librerie necessarie ed effettuare il link
+dell'eseguibile. Se il programma è in formato ELF per caricare le librerie
+dinamiche viene usato l'interprete indicato nel segmento \macro{PT\_INTERP},
+in genere questo è \file{/lib/ld-linux.so.1} per programmi linkati con le
+\emph{libc5}, e \file{/lib/ld-linux.so.2} per programmi linkati con le
+\emph{glibc}. Infine nel caso il file sia uno script esso deve iniziare con
+una linea nella forma \cmd{#!/path/to/interpreter} dove l'interprete indicato
+deve esse un valido programma (binario, non un altro script) che verrà
+chiamato come se si fosse eseguitio il comando \cmd{interpreter [arg]
+  filename}.
 
 Con la famiglia delle \func{exec} si chiude il novero delle funzioni su cui è
 basato il controllo dei processi in unix: con \func{fork} si crea un nuovo