From 819b565edd5695a1a176105fc0fce8d0b73c5f92 Mon Sep 17 00:00:00 2001 From: Simone Piccardi Date: Tue, 15 Sep 2009 10:47:23 +0000 Subject: [PATCH] Lavoro in treno di domenica scorsa --- fileintro.tex | 26 ++++++--- process.tex | 145 ++++++++++++++++++++++++++++++------------------- prochand.tex | 146 +++++++++++++++++++++++++++++++++++--------------- system.tex | 6 +-- 4 files changed, 214 insertions(+), 109 deletions(-) diff --git a/fileintro.tex b/fileintro.tex index 0d8429d..e0c82cf 100644 --- a/fileintro.tex +++ b/fileintro.tex @@ -598,14 +598,26 @@ era partiti avr referenziata anche dalla voce ``\texttt{..}'' di \texttt{img}. -\subsection{Il filesystem \textsl{ext2}} +% TODO portare a ext3, ext4 e btrfs ed illustrare le problematiche che si +% possono incontrare (in particolare quelle relative alla perdita di contenuti +% in caso di crash del sistema) + +\subsection{I filesystem di uso comune} \label{sec:file_ext2} -Il filesystem standard usato da Linux è il cosiddetto \textit{second extended - filesystem}, identificato dalla sigla \acr{ext2}. Esso supporta tutte le -caratteristiche di un filesystem standard Unix, è in grado di gestire nomi di -file lunghi (256 caratteri, estensibili a 1012) con una dimensione massima di -4~Tb. +Il filesystem standard più usato con Linux è il cosiddetto \textit{third + extended filesystem}, identificato dalla sigla \acr{ext3}. Esso nasce come +evoluzione del precedente \textit{second extended filesystem}, o \acr{ext2}, +di cui eredita gran parte delle caratteristiche di base, per questo motivo +parleremo anzitutto di questo, dato che molto di quanto diremo si applica +anche ad \acr{ext3}. + + +Il filesystem \acr{ext2} nasce come filesystem nativo di Linux a partire dalle +prime versioni del kernel e supporta tutte le caratteristiche di un +filesystem standard Unix; è in grado di gestire nomi di file lunghi (256 +caratteri, estensibili a 1012) e supporta una dimensione massima dei file fino +a 4~Tb. Oltre alle caratteristiche standard, \acr{ext2} fornisce alcune estensioni che non sono presenti sugli altri filesystem Unix. Le principali sono le seguenti: @@ -681,7 +693,7 @@ caratteri) senza sprecare spazio disco. % LocalWords: l'inode lookup ops read write llseek ioctl readdir poll nell'I % LocalWords: multiplexing mmap fsync fasync seek MacOs group dall' dell' img % LocalWords: count unlink nell' rename gapil second Tb attributes BSD SVr gid -% LocalWords: sgid append only log fs linux extented linked list +% LocalWords: sgid append only log fs linux extented linked list third %%% Local Variables: diff --git a/process.tex b/process.tex index 0a5f18d..eeebf6c 100644 --- a/process.tex +++ b/process.tex @@ -1238,6 +1238,7 @@ controllo non % mtrace, muntrace, mallinfo e gli hook con le glibc 2.10 c'è pure malloc_info % a sostituire mallinfo, vedi http://udrepper.livejournal.com/20948.html + \section{Argomenti, opzioni ed ambiente di un processo} \label{sec:proc_options} @@ -1253,7 +1254,10 @@ delle informazioni che modifichino il comportamento di un programma dell'uso del cosiddetto \textit{environment} (cioè l'uso delle \textsl{variabili di ambiente}). In questa sezione esamineremo le funzioni che permettono di gestire argomenti ed opzioni, e quelle che consentono di -manipolare ed utilizzare le variabili di ambiente. +manipolare ed utilizzare le variabili di ambiente. Accenneremo infine alle +modalità con cui si può gestire la localizzazione di un programma +modificandone il comportamento a seconda della lingua o del paese a cui si +vuole faccia riferimento nelle sue operazioni. \subsection{Il formato degli argomenti} @@ -1376,13 +1380,15 @@ opzioni sono spostati in coda al vettore. Oltre a questa esistono altre due modalità di gestire gli elementi di \param{argv}; se \param{optstring} inizia con il carattere \texttt{'+'} (o è impostata la variabile di ambiente \macro{POSIXLY\_CORRECT}) la scansione viene fermata non appena si incontra un -elemento che non è un'opzione. L'ultima modalità, usata quando un programma -può gestire la mescolanza fra opzioni e argomenti, ma se li aspetta in un -ordine definito, si attiva quando \param{optstring} inizia con il carattere -\texttt{'-'}. In questo caso ogni elemento che non è un'opzione viene -considerato comunque un'opzione e associato ad un valore di ritorno pari ad 1, -questo permette di identificare gli elementi che non sono opzioni, ma non -effettua il riordinamento del vettore \param{argv}. +elemento che non è un'opzione. + +L'ultima modalità, usata quando un programma può gestire la mescolanza fra +opzioni e argomenti, ma se li aspetta in un ordine definito, si attiva +quando \param{optstring} inizia con il carattere \texttt{'-'}. In questo caso +ogni elemento che non è un'opzione viene considerato comunque un'opzione e +associato ad un valore di ritorno pari ad 1, questo permette di identificare +gli elementi che non sono opzioni, ma non effettua il riordinamento del +vettore \param{argv}. \subsection{Le variabili di ambiente} @@ -1409,19 +1415,20 @@ pi fig.~\ref{fig:proc_envirno_list}. \begin{figure}[htb] \centering - \includegraphics[width=14cm]{img/environ_var} + \includegraphics[width=15 cm]{img/environ_var} \caption{Esempio di lista delle variabili di ambiente.} \label{fig:proc_envirno_list} \end{figure} Per convenzione le stringhe che definiscono l'ambiente sono tutte del tipo -\textsl{\texttt{nome=valore}}. Inoltre alcune variabili, come quelle elencate -in fig.~\ref{fig:proc_envirno_list}, sono definite dal sistema per essere usate +\textsl{\texttt{nome=valore}} ed in questa forma che le funzioni di gestione +che vedremo a breve se le aspettano, se pertanto si dovesse costruire +manualemente un ambiente si abbia cura di rispettare questa convenzione. +Inoltre alcune variabili, come quelle elencate in +fig.~\ref{fig:proc_envirno_list}, sono definite dal sistema per essere usate da diversi programmi e funzioni: per queste c'è l'ulteriore convenzione di -usare nomi espressi in caratteri maiuscoli.\footnote{la convenzione vuole che - si usino dei nomi maiuscoli per le variabili di ambiente di uso generico, i - nomi minuscoli sono in genere riservati alle variabili interne degli script - di shell.} +usare nomi espressi in caratteri maiuscoli.\footnote{ma si tratta solo di una + convenzione, niente vieta di usare caratteri minuscoli.} Il kernel non usa mai queste variabili, il loro uso e la loro interpretazione è riservata alle applicazioni e ad alcune funzioni di libreria; in genere esse @@ -1431,14 +1438,18 @@ configurazione. queste variabili al programma messo in esecuzione attraverso un uso opportuno delle relative chiamate (si veda sez.~\ref{sec:proc_exec}). -La shell ad esempio ne usa molte per il suo funzionamento (come \texttt{PATH} -per la ricerca dei comandi, o \texttt{IFS} per la scansione degli argomenti), -e alcune di esse (come \texttt{HOME}, \texttt{USER}, ecc.) sono definite al -login (per i dettagli si veda sez.~\ref{sec:sess_login}). In genere è cura -dell'amministratore definire le opportune variabili di ambiente in uno script -di avvio. Alcune servono poi come riferimento generico per molti programmi -(come \texttt{EDITOR} che indica l'editor preferito da invocare in caso di -necessità). +La shell ad esempio ne usa molte per il suo funzionamento, come \texttt{PATH} +per indicare la lista delle directory in cui effettuare la ricerca dei comandi +o \texttt{PS1} per impostare il proprio \textit{prompt}. Alcune di esse, come +\texttt{HOME}, \texttt{USER}, ecc. sono invece definite al login (per i +dettagli si veda sez.~\ref{sec:sess_login}), ed in genere è cura della propria +distribuzione definire le opportune variabili di ambiente in uno script di +avvio. Alcune servono poi come riferimento generico per molti programmi, come +\texttt{EDITOR} che indica l'editor preferito da invocare in caso di +necessità. Una in particolare, \texttt{LANG}, serve a controllare la +localizzazione del programma (su cui torneremo in +sez.~\ref{sec:proc_localization}) per adattarlo alla lingua ed alle convezioni +dei vari paesi. Gli standard POSIX e XPG3 definiscono alcune di queste variabili (le più comuni), come riportato in tab.~\ref{tab:proc_env_var}. GNU/Linux le supporta @@ -1543,16 +1554,18 @@ ambiente, i loro prototipi sono i seguenti: \bodydesc{Entrambe le funzioni ritornano 0 in caso di successo e $-1$ per un errore, che è sempre \errval{ENOMEM}.} \end{functions} -\noindent la terza, \funcd{unsetenv}, serve a cancellare una variabile di -ambiente; il suo prototipo è: + +La terza funzione della lista, \funcd{unsetenv}, serve a cancellare una +variabile dall'ambiente, il suo prototipo è: \begin{functions} \headdecl{stdlib.h} \funcdecl{void unsetenv(const char *name)} Rimuove la variabile di ambiente \param{name}. \end{functions} -\noindent questa funzione elimina ogni occorrenza della variabile specificata; -se essa non esiste non succede nulla. Non è prevista (dato che la funzione è + +\noindent la funzione elimina ogni occorrenza della variabile specificata; se la +variabile non esiste non succede nulla. Non è prevista (dato che la funzione è \ctyp{void}) nessuna segnalazione di errore. Per modificare o aggiungere una variabile di ambiente si possono usare sia @@ -1566,34 +1579,37 @@ La seconda funzione prende come argomento una stringa analoga a quella restituita da \func{getenv}, e sempre nella forma \code{NOME=valore}. Se la variabile specificata non esiste la stringa sarà aggiunta all'ambiente, se invece esiste il suo valore sarà impostato a quello specificato da -\param{string}. Si tenga presente che, seguendo lo standard SUSv2, le -\acr{glibc} successive alla versione 2.1.2 aggiungono\footnote{il - comportamento è lo stesso delle vecchie \acr{libc4} e \acr{libc5}; nelle - \acr{glibc}, dalla versione 2.0 alla 2.1.1, veniva invece fatta una copia, - seguendo il comportamento di BSD4.4; dato che questo può dar luogo a perdite - di memoria e non rispetta lo standard. Il comportamento è stato modificato a - partire dalle 2.1.2, eliminando anche, sempre in conformità a SUSv2, - l'attributo \direct{const} dal prototipo.} \param{string} alla lista delle -variabili di ambiente; pertanto ogni cambiamento alla stringa in questione si -riflette automaticamente sull'ambiente, e quindi si deve evitare di passare a -questa funzione una variabile automatica (per evitare i problemi esposti in -sez.~\ref{sec:proc_auto_var}). - -Si tenga infine presente che se si passa a \func{putenv} solo il nome di una -variabile (cioè \param{string} è nella forma \texttt{NAME} e non contiene un -carattere \texttt{'='}) allora questa viene cancellata dall'ambiente. Infine -se la chiamata di \func{putenv} comporta la necessità di allocare una nuova -versione del vettore \var{environ} questo sarà allocato, ma la versione -corrente sarà deallocata solo se anch'essa è risultante da un'allocazione -fatta in precedenza da un'altra \func{putenv}. Questo perché il vettore delle -variabili di ambiente iniziale, creato dalla chiamata ad \func{exec} (vedi -sez.~\ref{sec:proc_exec}) è piazzato al di sopra dello \itindex{stack} stack, -(vedi fig.~\ref{fig:proc_mem_layout}) e non nello \itindex{heap} \textit{heap} -e non può essere deallocato. Inoltre la memoria associata alle variabili di -ambiente eliminate non viene liberata. - -L'ultima funzione è \funcd{clearenv}, che viene usata per cancellare -completamente tutto l'ambiente; il suo prototipo è: +\param{string}. + +Si tenga presente che, seguendo lo standard SUSv2, le \acr{glibc} successive +alla versione 2.1.2 aggiungono \param{string} alla lista delle variabili di +ambiente;\footnote{il comportamento è lo stesso delle vecchie \acr{libc4} e + \acr{libc5}; nelle \acr{glibc}, dalla versione 2.0 alla 2.1.1, veniva invece + fatta una copia, seguendo il comportamento di BSD4.4; dato che questo può + dar luogo a perdite di memoria e non rispetta lo standard. Il comportamento + è stato modificato a partire dalle 2.1.2, eliminando anche, sempre in + conformità a SUSv2, l'attributo \direct{const} dal prototipo.} pertanto ogni +cambiamento alla stringa in questione si riflette automaticamente +sull'ambiente, e quindi si deve evitare di passare a questa funzione una +variabile automatica (per evitare i problemi esposti in +sez.~\ref{sec:proc_auto_var}). Si tenga infine presente che se si passa a +\func{putenv} solo il nome di una variabile (cioè \param{string} è nella forma +\texttt{NAME} e non contiene un carattere \texttt{'='}) allora questa viene +cancellata dall'ambiente. + +Infine quando chiamata a \func{putenv} comporta la necessità di creare una +nuova versione del vettore \var{environ} questo sarà allocato automaticamente, +ma la versione corrente sarà deallocata solo se anch'essa è risultante da +un'allocazione fatta in precedenza da un'altra \func{putenv}. Questo avviene +perché il vettore delle variabili di ambiente iniziale, creato dalla chiamata +ad \func{exec} (vedi sez.~\ref{sec:proc_exec}) è piazzato nella memoria al di +sopra dello \itindex{stack} stack, (vedi fig.~\ref{fig:proc_mem_layout}) e non +nello \itindex{heap} \textit{heap} e quindi non può essere deallocato. +Inoltre la memoria associata alle variabili di ambiente eliminate non viene +liberata. + +L'ultima funzione per la gestione dell'ambiente è \funcd{clearenv}, che viene +usata per cancellare completamente tutto l'ambiente; il suo prototipo è: \begin{functions} \headdecl{stdlib.h} @@ -1610,6 +1626,25 @@ ambiente che pu alla cancellazione di tutto l'ambiente per costruirne una versione ``\textsl{sicura}'' da zero. +\subsection{La localizzazione} +\label{sec:proc_localization} + +Abbiamo accennato in sez.~\ref{sec:proc_environ} come la variabile di ambiente +\texttt{LANG} sia usata per indicare ai processi il valore della cosiddetta +\textsl{localizzazione}. Si tratta di una funzionalità fornita dalle librerie +di sistema\footnote{prenderemo in esame soltanto il caso delle \acr{glibc}.} +che consente di gestire in maniera automatica sia la lingua in cui vengono +stampati i vari messaggi (come i messaggi associati agli errori che vedremo in +sez.~\ref{sec:sys_strerror}) che le convenzioni usate nei vari paesi per una +serie di aspetti come il formato dell'ora, quello delle date, gli ordinamenti +alfabetici, le espressioni della valute, ecc. + +La localizzazione di un programma si può selezionare con la + + +In realtà perché un programma sia effettivamente localizzato non è sufficiente + +% TODO trattare, quando ci sarà tempo, setlocale ed il resto %\subsection{Opzioni in formato esteso} %\label{sec:proc_opt_extended} diff --git a/prochand.tex b/prochand.tex index c321dd3..ad9ffd3 100644 --- a/prochand.tex +++ b/prochand.tex @@ -663,13 +663,13 @@ Le differenze fra padre e figlio dopo la \func{fork} invece sono:\footnote{a \item gli aggiustamenti fatti dal padre ai semafori con \func{semop} (vedi sez.~\ref{sec:ipc_sysv_sem}). \item le notifiche sui cambiamenti delle directory con \textit{dnotify} (vedi - sez.~\ref{sec:sig_notification}), che non vengono ereditati dal figlio; + sez.~\ref{sec:sig_notification}), che non vengono ereditate dal figlio; \item le mappature di memoria marcate come \const{MADV\_DONTFORK} (vedi sez.~\ref{sec:file_memory_map}) che non vengono ereditate dal figlio; -\item l'impostazione con \func{prctl} (vedi sez.~\ref{sec:xxx_prctl}) che +\item l'impostazione con \func{prctl} (vedi sez.~\ref{sec:prctl_xxx}) che notifica al figlio la terminazione del padre viene cancellata; \item il segnale di terminazione del figlio è sempre \const{SIGCHLD} anche - qualora nel padre fosse stato modicato (vedi sez.~\ref{sec:process_clone}). + qualora nel padre fosse stato modificato (vedi sez.~\ref{sec:process_clone}). \end{itemize*} Una seconda funzione storica usata per la creazione di un nuovo processo è @@ -1450,7 +1450,7 @@ indicato dall'argomento \param{path}, che viene interpretato come il \begin{figure}[htb] \centering - \includegraphics[width=15cm]{img/exec_rel} + \includegraphics[width=12cm]{img/exec_rel} \caption{La interrelazione fra le sei funzioni della famiglia \func{exec}.} \label{fig:proc_exec_relat} \end{figure} @@ -1464,9 +1464,9 @@ sez.~\ref{sec:proc_environ}) del processo di partenza per costruire l'ambiente. Oltre a mantenere lo stesso \acr{pid}, il nuovo programma fatto partire da -\func{exec} assume anche una serie di altre proprietà del processo chiamante; -la lista completa è la seguente: -\begin{itemize} +\func{exec} mantiene la gran parte delle proprietà del processo chiamante; una +lista delle più significative è la seguente: +\begin{itemize*} \item il \textit{process id} (\acr{pid}) ed il \textit{parent process id} (\acr{ppid}); \item l'\textsl{user-ID reale}, il \textit{group-ID reale} ed i @@ -1480,43 +1480,99 @@ la lista completa \item la maschera di creazione dei file \itindex{umask} (\textit{umask}, vedi sez.~\ref{sec:file_perm_management}) ed i \textit{lock} sui file (vedi sez.~\ref{sec:file_locking}); -\item i segnali sospesi (\textit{pending}) e la maschera dei segnali (si veda - sez.~\ref{sec:sig_sigmask}); \item i limiti sulle risorse (vedi sez.~\ref{sec:sys_resource_limit}); -\item i valori delle variabili \var{tms\_utime}, \var{tms\_stime}, - \var{tms\_cutime}, \var{tms\_ustime} (vedi sez.~\ref{sec:sys_cpu_times}). -\end{itemize} - -Inoltre i segnali che sono stati impostati per essere ignorati nel processo -chiamante mantengono la stessa impostazione pure nel nuovo programma, tutti -gli altri segnali vengono impostati alla loro azione predefinita. Un caso -speciale è il segnale \const{SIGCHLD} che, quando impostato a -\const{SIG\_IGN}, può anche non essere reimpostato a \const{SIG\_DFL} (si veda -sez.~\ref{sec:sig_gen_beha}). - -La gestione dei file aperti dipende dal valore che ha il flag di -\itindex{close-on-exec} \textit{close-on-exec} (vedi anche -sez.~\ref{sec:file_fcntl}) per ciascun file descriptor. I file per cui è -impostato vengono chiusi, tutti gli altri file restano aperti. Questo -significa che il comportamento predefinito è che i file restano aperti -attraverso una \func{exec}, a meno di una chiamata esplicita a \func{fcntl} -che imposti il suddetto flag. Per le directory, lo standard POSIX.1 richiede -che esse vengano chiuse attraverso una \func{exec}, in genere questo è fatto -dalla funzione \func{opendir} (vedi sez.~\ref{sec:file_dir_read}) che effettua -da sola l'impostazione del flag di \itindex{close-on-exec} -\textit{close-on-exec} sulle directory che apre, in maniera trasparente -all'utente. - -Abbiamo detto che l'\textsl{user-ID reale} ed il \textsl{group-ID reale} -restano gli stessi all'esecuzione di \func{exec}; normalmente vale lo stesso -anche per l'\textsl{user-ID effettivo} ed il \textsl{group-ID effettivo} (il -significato di questi identificatori è trattato in -sez.~\ref{sec:proc_access_id}), tranne quando il file di cui viene chiesta -l'esecuzione ha o il \itindex{suid~bit} \acr{suid} bit o lo \itindex{sgid~bit} -\acr{sgid} bit impostato, in questo caso l'\textsl{user-ID effettivo} ed il -\textsl{group-ID effettivo} vengono impostati rispettivamente all'utente o al -gruppo cui il file appartiene (per i dettagli di questo comportamento si veda -sez.~\ref{sec:proc_perms}). +\item i valori delle variabili \var{tms\_utime}, \var{tms\_stime}; + \var{tms\_cutime}, \var{tms\_ustime} (vedi sez.~\ref{sec:sys_cpu_times}); +% TODO ===========Importante============= +% TODO questo sotto è incerto, verificare +% TODO ===========Importante============= +\item la maschera dei segnali (si veda sez.~\ref{sec:sig_sigmask}). +\end{itemize*} + +Una serie di proprietà del processo originale, che non avrebbe senso mantenere +in un programma che esegue un codice completamente diverso in uno spazio di +indirizzi totalmente indipendente e ricreato da zero, vengono perse con +l'esecuzione di \func{exec}; lo standard POSIX.1-2001 prevede che le seguenti +proprietà non vengano preservate: +\begin{itemize*} +\item l'insieme dei segnali pendenti (vedi sez.~\ref{sec:sig_gen_beha}), che + viene cancellato; +\item gli eventuali stack alternativi per i segnali (vedi + sez.~\ref{sec:sig_specific_features}); +\item i \textit{directory stream} (vedi sez.~\ref{sec:file_dir_read}), che + vengono chiusi; +\item le mappature dei file in memoria (vedi sez.~\ref{sec:file_memory_map}); +\item i segmenti di memoria condivisa SysV (vedi sez.~\ref{sec:ipc_sysv_shm}) + e POSIX (vedi sez.~\ref{sec:ipc_posix_shm}); +\item i blocchi sulla memoria (vedi sez.~\ref{sec:proc_mem_lock}); +\item le funzioni registrate all'uscita (vedi sez.~\ref{sec:proc_atexit}); +\item i semafori e le code di messaggi POSIX (vedi + sez.~\ref{sec:ipc_posix_sem} e sez.~\ref{sec:ipc_posix_mq}); +\item i timer POSIX (vedi sez.~\ref{sec:sig_timer_adv}). +\end{itemize*} + +I segnali che sono stati impostati per essere ignorati nel processo chiamante +mantengono la stessa impostazione pure nel nuovo programma, ma tutti gli altri +segnali, ed in particolare quelli per i quali è stato installato un gestore +vengono impostati alla loro azione predefinita (vedi +sez.~\ref{sec:sig_gen_beha}). Un caso speciale è il segnale \const{SIGCHLD} +che, quando impostato a \const{SIG\_IGN}, potrebbe anche essere reimpostato a +\const{SIG\_DFL}, anche se questo con Linux non avviene.\footnote{lo standard + POSIX.1-2001 prevede che questo comportamento sia deciso dalla singola + implementazione, quella di Linux è di non modificare l'impostazione + precedente.} + +Oltre alle precedenti che sono completamente generali e disponibili anche su +altri sistemi unix-like, esistono altre proprietà dei processi, attinenti +caratteristiche specifiche di Linux, che non vengono preservate +nell'esecuzione della funzione \func{exec}, queste sono: +\begin{itemize*} +\item le operazione di I/O asincrono (vedi sez.~\ref{sec:file_asyncronous_io}) + pendenti vengono cancellate; +\item le \itindex{capabilities} \textit{capabilities} vengono modificate come + illustrato in sez.~\ref{sec:proc_capabilities}; +\item tutti i \itindex{thread} \textit{thread} tranne il chiamante (vedi + sez.~\ref{sec:thread_xxx}) sono cancellati e tutti gli oggetti ad essi + relativi (vedi sez.~\ref{sec:thread_xxx}) rimossi; +\item viene impostato il flag \const{PR\_SET\_DUMPABLE} di \func{prctl} (vedi + sez.~\ref{sec:prctl_xxx}) a meno che il programma da eseguire non sia + \itindex{suid~bit} \acr{suid} o \itindex{sgid~bit} \acr{sgid} (vedi + sez.~\ref{sec:proc_access_id}); +\item il flag \const{PR\_SET\_KEEPCAPS} di \func{prctl} (vedi + sez.~\ref{sec:prctl_xxx}) viene cancellato; +\item il nome del processo viene impostato al nome del file contenente il + programma messo in esecuzione; +\item il segnale di terminazione viene reimpostato a \const{SIGCHLD}; +\item l'ambiente viene reinizializzato impostando le variabili attinenti alla + localizzazione al valore di default POSIX. +\end{itemize*} + +La gestione dei file aperti nel passaggio al nuovo programma lanciato con +\func{exec} dipende dal valore che ha il flag di \itindex{close-on-exec} +\textit{close-on-exec} (vedi anche sez.~\ref{sec:file_fcntl}) per ciascun file +descriptor. I file per cui è impostato vengono chiusi, tutti gli altri file +restano aperti. Questo significa che il comportamento predefinito è che i file +restano aperti attraverso una \func{exec}, a meno di una chiamata esplicita a +\func{fcntl} che imposti il suddetto flag. Per le directory, lo standard +POSIX.1 richiede che esse vengano chiuse attraverso una \func{exec}, in genere +questo è fatto dalla funzione \func{opendir} (vedi +sez.~\ref{sec:file_dir_read}) che effettua da sola l'impostazione del flag di +\itindex{close-on-exec} \textit{close-on-exec} sulle directory che apre, in +maniera trasparente all'utente. + +Il comportamento della funzione in relazione agli identificatori relativi al +controllo di accesso verrà trattato in dettaglio in sez.~\ref{sec:proc_perms}, +qui è sufficiente anticipare (si faccia riferimento a +sez.~\ref{sec:proc_access_id} per la definizione di questi identificatori) +come l'\textsl{user-ID reale} ed il \textsl{group-ID reale} restano sempre gli +stessi, mentre l'\textsl{user-ID salvato} ed il \textsl{group-ID salvato} +vengono impostati rispettivamente all'\textsl{user-ID effettivo} ed il +\textsl{group-ID effettivo}, questi ultimi normalmente non vengono modificati, +a meno che il file di cui viene chiesta l'esecuzione non abbia o il +\itindex{suid~bit} \acr{suid} bit o lo \itindex{sgid~bit} \acr{sgid} bit +impostato, in questo caso l'\textsl{user-ID effettivo} ed il \textsl{group-ID + effettivo} vengono impostati 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{/lib/ld.so} prima @@ -3424,7 +3480,9 @@ varie funzioni di libreria, che sono identificate aggiungendo il suffisso % LocalWords: SIGKILL static RLIMIT preemption PREEMPT VOLUNTARY IDLE RTPRIO % LocalWords: Completely Fair compat Uniform CFQ Queuing elevator dev cfq RT % LocalWords: Documentation block syscall ioprio IPRIO CLASS class best effort - +% LocalWords: refresh semop dnotify MADV DONTFORK prctl WCLONE SIGCHL WALL +% LocalWords: WNOTHREAD DUMPABLE KEEPCAPS + %%% Local Variables: %%% mode: latex %%% TeX-master: "gapil" diff --git a/system.tex b/system.tex index 76361d4..96c1003 100644 --- a/system.tex +++ b/system.tex @@ -528,9 +528,9 @@ fig.~\ref{fig:sys_utsname}, solo definendo \macro{\_GNU\_SOURCE}. \label{fig:sys_utsname} \end{figure} -In generale si tenga presente che le dimensioni delle stringe di una -\struct{utsname} non è specificata, e che esse sono sempre terminate con NUL; -il manuale delle \acr{glibc} indica due diverse dimensioni, +In generale si tenga presente che le dimensioni delle stringhe di una +struttura \struct{utsname} non è specificata, e che esse sono sempre terminate +con NUL; il manuale delle \acr{glibc} indica due diverse dimensioni, \const{\_UTSNAME\_LENGTH} per i campi standard e \const{\_UTSNAME\_DOMAIN\_LENGTH} per quello specifico per il nome di dominio; altri sistemi usano nomi diversi come \const{SYS\_NMLN} o \const{\_SYS\_NMLN} -- 2.30.2