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
 
 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.
 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
 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
 
 
 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
 %% 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
 
 \begin{table}[!htb]
   \centering
+  \footnotesize
   \begin{tabular}[c]{|c|p{10cm}|}
     \hline
     \textbf{Macro} & \textbf{Descrizione}\\
   \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
 
 \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}
   \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.
 
 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
 
 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