From e239c3df54406ccbc9415d1d767ca6be41de14f3 Mon Sep 17 00:00:00 2001 From: Simone Piccardi Date: Thu, 19 Jul 2001 17:47:12 +0000 Subject: [PATCH] Aggiunte altre figure, e materiale vario a spasso. --- filedir.tex | 263 ++++++++++++++++++++--------------------- fileintro.tex | 97 +++++++++------ gapil.tex | 2 +- img/dir_links.dia | Bin 0 -> 2847 bytes img/dir_struct.dia | Bin 0 -> 3191 bytes img/disk_struct.dia | Bin 0 -> 2135 bytes img/filesys_struct.dia | Bin 0 -> 4893 bytes img/memory_layout.dia | Bin 0 -> 1231 bytes process.tex | 26 ++-- 9 files changed, 207 insertions(+), 181 deletions(-) create mode 100644 img/dir_links.dia create mode 100644 img/dir_struct.dia create mode 100644 img/disk_struct.dia create mode 100644 img/filesys_struct.dia create mode 100644 img/memory_layout.dia diff --git a/filedir.tex b/filedir.tex index c071eca..b7a2bb9 100644 --- a/filedir.tex +++ b/filedir.tex @@ -2,14 +2,118 @@ \label{cha:files_and_dirs} In questo capitolo tratteremo in dettaglio le modalità con cui si gestiscono -files e directories, ed in particolare esamineremo come è strutturato il -sistema base di protezioni e controllo di accesso ai files, e tutta -l'interfaccia che permette la manipolazione dei vari attributi di files e -directories. Tutto quello che riguarda invece la manipolazione del contenuto -dei file è lasciato ai capitoli successivi. +file e directory, ed in particolare esamineremo come è strutturato il sistema +base di protezioni e controllo di accesso ai file, e tutta l'interfaccia che +permette la manipolazione dei vari attributi di file e directory. Tutto quello +che riguarda invece la manipolazione del contenuto dei file è lasciato ai +capitoli successivi. -\section{La gestione di file e directory} + +\section{Il controllo di accesso ai file} +\label{sec:filedir_access_control} + +Una delle caratteristiche fondamentali di tutti i sistemi unix-like è quella +del controllo di accesso ai file, che viene implementato per qualunque +filesystem standard. In questa sezione ne esamineremo i concetti essenziali e +le funzioni usate per gestirne i vari aspetti. + + +\subsection{I permessi per l'accesso ai file} +\label{sec:filedir_perm_overview} + +Il controllo di accesso ai file in unix segue un modello abbastanza semplice, +ma adatto alla gran parte delle esigenze, in cui si dividono i permessi su tre +livelli. Si tenga conto poi che quanto diremo è vero solo per filesystem di +tipo unix, e non è detto che sia applicabile a un filesystem +qualunque\footnote{ed infatti non è vero per il filesystem vfat di Windows, + per il quale vengono assegnati in maniera fissa con un opzione in fase di + montaggio}. Esistono inoltre estensioni che permettono di implementare le +ACL (\textit{Access Control List}) che sono un meccanismo di controllo di +accesso molto più sofisticato. + +Ad ogni file unix associa sempre l'utente che ne è proprietario (il cosiddetto +\textit{owner}) e il gruppo di appartenenza, secondo il meccanismo degli +identificatoti di utenti e gruppi (uid e gig) già accennato in +\secref{sec:intro_multiuser}, e un insieme di permessi che sono divisi in tre +classi, e cioè attribuiti rispettivamente al proprietario, a qualunque utente +faccia parte del gruppo cui appartiene il file, e a tutti gli altri utenti. + +I permessi sono espressi da un insieme di 12 bit: di questi i nove meno +significativi sono usati a gruppi di tre per indicare i permessi base di +lettura, scrittura ed esecuzione (indicati rispettivamente con le lettere +\textit{w}, \textit{r} \textit{x} nell'output di \cmd{ls}) applicabili +rispettivamente al proprietario, al gruppo, a tutti (una descrizione più +dettagliata dei vari permessi associati ai file è riportata in +\secref{sec:filedir_suid_sgid}). I restanti tre bit sono usati per indicare +alcune caratteristiche più complesse (\textit{suid}, \textit{sgid}, e +\textit{sticky}) su cui pure torneremo in seguito (vedi +\secref{sec:filedir_suid_sgid} e \secref{sec:filedir_sticky}). + +Tutte queste informazioni sono tenute per ciascun file nell'inode, in +opportuni bit del campo \var{st\_mode} della struttura letta da \func{stat} +(vedi \figref{fig:filedir_stat_struct}) che possono essere controllati con i +valori riportati in \ntab. + +\begin{table}[htb] + \centering + + \caption{I bit deipermessi di accesso ai file, come definiti in + \texttt{}} + \label{tab:file_bit_perm} +\end{table} + + +% Quando un processo cerca l'accesso al file esso controlla i propri uid e gid +% confrontandoli con quelli del file e se l'operazione richiesta è compatibile +% con i permessi associati al file essa viene eseguita, altrimenti viene +% bloccata ed è restituito un errore di \texttt{EPERM}. Questo procedimento non +% viene eseguito per l'amministratore di sistema (il cui uid è zero) il quale +% a +% pertanto accesso senza restrizione a qualunque file del sistema. + +% In realtà il procedimento è più complesso di quanto descritto in maniera +% elementare qui; inoltre ad un processo sono associati diversi identificatori, +% torneremo su questo in maggiori dettagli in seguito in \secref{sec:proc_perms}. + + +\subsection{I flag \texttt{suid} e \texttt{sgid}} +\label{sec:filedir_suid_sgid} + +\subsection{La titolarità di nuovi files e directory} +\label{sec:filedir_ownership} + + +\subsection{La funzione \texttt{access}} +\label{sec:filedir_access} + + +\subsection{La funzione \texttt{umask}} +\label{sec:filedir_umask} + + +\subsection{Le funzioni \texttt{chmod} e \texttt{fchmod}} +\label{sec:filedir_chmod} + +\subsection{Il flag \texttt{sticky}} +\label{sec:filedir_sticky} + +\subsection{Le funzioni \texttt{chown}, \texttt{fchown} e \texttt{lchown}} +\label{sec:filedir_chown} + + + + +%La struttura fondamentale che contiene i dati essenziali relativi ai file è il +%cosiddetto \textit{inode}; questo conterrà informazioni come il +%tipo di file (file di dispositivo, directory, file di dati, per un elenco +%completo vedi \ntab), i permessi (vedi \secref{sec:file_perms}), le date (vedi +%\secref{sec:file_times}). + + + + +\section{La manipolazione di file e directory} Le prime funzioni che considereremo sono quelle relative alla gestione di file e directory, secondo le caratteristiche standard che essi presentano in un @@ -26,13 +130,13 @@ ambiente unix, dove tali collegamenti sono usualmente chiamati \textit{link}, ma data la struttura del sistema ci sono due metodi sostanzialmente diversi per fare questa operazione. -Come si è appena detto l'accesso al contenuto di un file su disco avviene -attraverso il suo inode, e il nome che si trova in una directory è solo una -etichetta associata ad un puntatore a detto inode. Questo significa che la -realizzazione di un link è immediata in quanto uno stesso file può avere tanti -nomi diversi allo stesso tempo, dati da altrettante diverse associazioni allo -stesso inode; si noti poi che nessuno di questi nomi viene ad assumere una -particolare preferenza rispetto agli altri. +Come spiegato in \secref{sec:fileintr_architecture} l'accesso al contenuto di +un file su disco avviene attraverso il suo inode, e il nome che si trova in +una directory è solo una etichetta associata ad un puntatore a detto inode. +Questo significa che la realizzazione di un link è immediata in quanto uno +stesso file può avere tanti nomi diversi allo stesso tempo, dati da +altrettante diverse associazioni allo stesso inode; si noti poi che nessuno di +questi nomi viene ad assumere una particolare preferenza rispetto agli altri. Per aggiungere un nome ad un inode si utilizza la funzione \texttt{link}; si suole chiamare questo tipo di associazione un collegamento diretto (o @@ -43,39 +147,21 @@ principali, come risultano dalla man page, sono le seguenti: Crea un nuovo collegamento diretto al file indicato da \texttt{oldpath} dandogli nome \texttt{newpath}. - La funzione restituisce zero in caso di successo e -1 per un errore, in caso - di errore. La variabile \texttt{errno} viene settata secondo i seguenti - codici di errore: + La funzione restituisce zero in caso di successo e -1 in caso di errore. La + variabile \texttt{errno} viene settata opportunamente, i principali codici + di errore sono: \begin{errlist} \item \texttt{EXDEV} \texttt{oldpath} e \texttt{newpath} non sono sullo stesso filesystem. \item \texttt{EPERM} il filesystem che contiene \texttt{oldpath} e \texttt{newpath} non supporta i link diretti o è una directory. - \item \texttt{EFAULT} una delle stringhe passate come parametri è fuori - dello spazio di indirizzi del processo. - \item \texttt{EACCESS} errore di accesso (mancano i permessi per scrivere o - per attraversare le directories), vedi \secref{sec:filedir_access_control} - per i dettagli. - \item \texttt{ENAMETOOLONG} una dei due pathname è troppo lungo. - \item \texttt{ENOENT} un componente di \texttt{oldpath} o \texttt{newpath} - non esiste o è un link simbolico spezzato. - \item \texttt{ENOTDIR} un componente di \texttt{oldpath} o \texttt{newpath} - non è una directory. - \item \texttt{ENOMEM} il kernel non ha a disposizione memoria sufficiente a - completare l'operazione. - \item \texttt{EROFS} la directory su cui si vuole inserire il nuovo link è - su un filesystem montato readonly. \item \texttt{EEXIST} un file (o una directory) con quel nome esiste di già. \item \texttt{EMLINK} ci sono troppi link al file \texttt{oldpath} (il numero massimo è specificato dalla variabile \texttt{LINK\_MAX}, vedi \secref{sec:xxx_limits}). - \item \texttt{ELOOP} si incontrati troppi link simbolici nella risoluzione - di \texttt{oldpath} o \texttt{newpath}. - \item \texttt{ENOSPC} la directory in cui si vuole creare il link non ha - spazio per ulteriori voci. - \item \texttt{EIO} c'è stato un errore di input/output. \end{errlist} + \end{prototype} La creazione di un nuovo collegamento diretto non copia il contenuto del file, @@ -112,28 +198,14 @@ effettua con la funzione \texttt{unlink}; il suo prototipo qual caso il file non viene toccato. La variabile \texttt{errno} viene settata secondo i seguenti codici di errore: \begin{errlist} - \item \texttt{EACCESS} errore di accesso (mancano i permessi per scrivere o - per attraversare le directories), vedi \secref{sec:filedir_access_control} - per i dettagli. - \item \texttt{EISDIR} \texttt{pathname} si riferisce ad una directory + \item \texttt{EISDIR} \var{pathname} si riferisce ad una directory (valore specifico ritornato da linux che non consente l'uso di \texttt{unlink} con le directory, e non conforme allo standard POSIX, che prescrive invece l'uso di \texttt{EPERM} in caso l'operazione non sia consnetita o il processo non abbia privilegi sufficienti). - \item \texttt{EFAULT} la stringa - passata come parametro è fuori dello spazio di indirizzi del processo. - \item \texttt{ENAMETOOLONG} il pathname troppo lungo. - \item \texttt{ENOENT} uno dei componenti del pathname non esiste o è un link - simbolico spezzato. - \item \texttt{ENOTDIR} uno dei componenti del pathname non è una directory. - \item \texttt{EISDIR} \texttt{pathname} fa riferimento a una directory. - \item \texttt{ENOMEM} il kernel non ha a disposizione memoria sufficiente a - completare l'operazione. - \item \texttt{EROFS} \texttt{pathname} è su un filesystem montato in sola - lettura. - \item \texttt{ELOOP} ci sono troppi link simbolici nella risoluzione del - pathname. - \item \texttt{EIO} errore di input/output. + \item \texttt{EROFS} \var{pathname} è su un filesystem montato in sola + lettura. + \item \texttt{EISDIR} \var{pathname} fa riferimento a una directory. \end{errlist} \end{prototype} @@ -523,6 +595,7 @@ per cambiare directory di lavoro. \end{prototype} + \section{La manipolazione delle caratteristiche dei files} \label{sec:filedir_infos} @@ -693,7 +766,7 @@ effettuare delle selezioni sul tipo di file voluto, combinando opportunamente i vari flag; ad esempio se si volesse controllare se un file è una directory o un file ordinario si potrebbe definire la condizione: \begin{lstlisting}[labelstep=0,frame=,indent=1cm]{} -#define IS_FILE_DIR(x) ( ((x) & S_IFMT) & (S_IFDIR | S_IFREG) ) +#define IS_FILE_DIR(x) (((x) & S_IFMT) & (S_IFDIR | S_IFREG)) \end{lstlisting} in cui prima si estraggono da \var{st\_mode} i bit relativi al tipo di file e poi si effettua il confronto con la combinazione di tipi scelta. @@ -763,6 +836,7 @@ dipende dall'implementazione: il file pu fino alla lunghezza scelta; in quest'ultimo caso lo spazio viene riempito con zeri (e in genere si ha la creazione di un hole nel file). + \subsection{I tempi dei file} \label{sec:filedir_file_times} @@ -889,7 +963,7 @@ cambiarne i permessi ha effetti solo sui tempi del file. \end{table} Si noti infine come \var{st\_ctime} non abbia nulla a che fare con il tempo di -creazione del file usato da molti altri sistemi operativi, che in unix non +creazione del file, usato da molti altri sistemi operativi, che in unix non esiste. @@ -938,82 +1012,3 @@ direttamente sul disco senza passare attraverso il filesystem, ma ovviamente molto più complicato da realizzare. -\section{Il controllo di accesso ai file} -\label{sec:filedir_access_control} - -In unix è implementata da qualunque filesystem standard una forma elementare -(ma adatta alla maggior parte delle esigenze) di controllo di accesso ai -files. Torneremo sull'argomento in dettaglio più avanti (vedi -\secref{sec:filedir_access_control}), qui ci limitiamo ad una introduzione dei -concetti essenziali. - -Si tenga conto poi che quanto diremo è vero solo per filesystem di tipo Unix, -e non è detto che sia applicabile (ed infatti non è vero per il filesystem di -Windows) a un filesystem qualunque. Esistono inoltre estensioni che permettono -di implementare le ACL (\textit{Access Control List}) che sono un meccanismo -di controllo di accesso molto più sofisticato. - -Ad ogni file Unix associa sempre l'utente che ne è proprietario (il cosiddetto -\textit{owner}) e il gruppo di appartenenza, secondo il meccanismo degli uid e -gid accennato in \secref{sec:intro_multiuser}, e un insieme di permessi che -sono divisi in tre classi, e cioè attribuiti rispettivamente al proprietario, -a qualunque utente faccia parte del gruppo cui appartiene il file, e a tutti -gli altri utenti. - -I permessi sono espressi da un insieme di 12 bit: di questi i nove meno -significativi sono usati a gruppi di tre per indicare i permessi base di -lettura, scrittura ed esecuzione (indicati rispettivamente con le lettere -\textit{w}, \textit{r} \textit{x}) applicabili rispettivamente al -proprietario, al gruppo, a tutti (una descrizione più dettagliata dei vari -permessi associati ai file è riportata in \secref{sec:filedir_suid_sgid}). I -restanti tre bit sono usati per indicare alcune caratteristiche più complesse -(\textit{suid}, \textit{sgid}, e \textit{sticky}) su cui pure torneremo in -seguito (vedi \secref{sec:filedir_suid_sgid} e \secref{sec:filedir_sticky}). - -Tutte queste informazioni sono tenute per ciascun file nell'inode. Quando un -processo cerca l'accesso al file esso controlla i propri uid e gid -confrontandoli con quelli del file e se l'operazione richiesta è compatibile -con i permessi associati al file essa viene eseguita, altrimenti viene -bloccata ed è restituito un errore di \texttt{EPERM}. Questo procedimento non -viene eseguito per l'amministratore di sistema (il cui uid è zero) il quale ha -pertanto accesso senza restrizione a qualunque file del sistema. - -% In realtà il procedimento è più complesso di quanto descritto in maniera -% elementare qui; inoltre ad un processo sono associati diversi identificatori, -% torneremo su questo in maggiori dettagli in seguito in \secref{sec:proc_perms}. - -\subsection{I flag \texttt{suid} e \texttt{sgid}} -\label{sec:filedir_suid_sgid} - - - - - - -\subsection{La titolarità di nuovi files e directory} -\label{sec:filedir_ownership} - -\subsection{La funzione \texttt{access}} -\label{sec:filedir_access} - -\subsection{La funzione \texttt{umask}} -\label{sec:filedir_umask} - -\subsection{Le funzioni \texttt{chmod} e \texttt{fchmod}} -\label{sec:filedir_chmod} - -\subsection{Il flag \texttt{sticky}} -\label{sec:filedir_sticky} - -\subsection{Le funzioni \texttt{chown}, \texttt{fchown} e \texttt{lchown}} -\label{sec:filedir_chown} - - - - -%La struttura fondamentale che contiene i dati essenziali relativi ai file è il -%cosiddetto \textit{inode}; questo conterrà informazioni come il -%tipo di file (file di dispositivo, directory, file di dati, per un elenco -%completo vedi \ntab), i permessi (vedi \secref{sec:file_perms}), le date (vedi -%\secref{sec:file_times}). - diff --git a/fileintro.tex b/fileintro.tex index c9be147..2bcfe81 100644 --- a/fileintro.tex +++ b/fileintro.tex @@ -339,7 +339,7 @@ di I/O sul dispositivo fisico, secondo lo schema riportato in \nfig. \begin{figure}[htb] \centering - \includegraphics[width=5cm]{img/vfs.eps} + \includegraphics[width=7cm]{img/vfs.eps} \caption{Schema delle operazioni del VFS} \label{fig:fileintr_VFS_scheme} \end{figure} @@ -435,7 +435,7 @@ previste dal kernel \begin{table}[htb] \centering - \begin{tabular}[c]{|c|p{7cm}} + \begin{tabular}[c]{|c|p{7cm}|} \hline \textbf{funzione} & \textbf{operazione} \\ \hline @@ -487,31 +487,39 @@ daremo una descrizione a grandi linee che si adatta alle caratteristiche comuni di un qualunque filesystem standard unix. Dato un disco lo spazio fisico viene usualmente diviso in partizioni; ogni -partizione può contenere un filesystem; quest'ultimo è in genere strutturato -secondo \nfig, con una lista di inodes all'inizio e il resto dello spazio a -disposizione per i dati e le directory. +partizione può contenere un filesystem; la strutturazione tipica +dell'informazione su un disco è riportata in \nfig; in essa si fa riferimento +alla struttura del filesystem ext2, che prevede una separazione dei dati in +\textit{blocks group} che replicano il superblock (ma sulle caratteristiche di +ext2 torneremo in \secref{sec:fileintr_ext2}). È comunque caratteristica +comune di tutti i filesystem unix, indipendentemente da come poi viene +strutturata nei dettagli questa informazione, prevedere una divisione fra la +lista degli inodes e lo spazio a disposizione per i dati e le directory. \begin{figure}[htb] \centering - + \includegraphics[width=9cm]{img/disk_struct.eps} \caption{Organizzazione dello spazio su un disco in partizioni e filesystem} \label{fig:fileintr_disk_filesys} \end{figure} -Se si va ad esaminare come è strutturata l'informazione all'interno di un -singolo filesystem (tralasciando le parti connesse alla strutturazione e al -funzionamento del filesystem stesso come il super-block) avremo una situazione -del tipo di quella esposta in \nfig. +Se si va ad esaminare con maggiore dettaglio la strutturazione +dell'informazione all'interno del singolo filesystem (tralasciando i dettagli +relativi al funzionamento del filesystem stesso come la strutturazione in +gruppi dei blocchi, il superblock e tutti i dati di gestione) possiamo +esemplificare la situazione con uno schema come quello esposto in \nfig. + \begin{figure}[htb] \centering - - \caption{Organizzazione di un filesystem} + \includegraphics[width=11cm]{img/filesys_struct.eps} + \caption{Strutturazionne dei dati all'interno di un filesystem} \label{fig:fileintr_filesys_detail} \end{figure} -da questa figura si evidenziano alcune caratteristiche su cui è bene porre -attenzione in quanto sono fondamentali per capire il funzionamento delle -funzioni che manipolano i file e le directory su cui torneremo fra poco; in -particolare è opportuno ricordare sempre che: + +Da \curfig\ si evidenziano alcune caratteristiche base di ogni filesystem su +cui è bene porre attenzione in quanto sono fondamentali per capire il +funzionamento delle funzioni che manipolano i file e le directory su cui +torneremo in seguitp; in particolare è opportuno ricordare sempre che: \begin{enumerate} @@ -530,38 +538,44 @@ particolare numero di riferimenti (\textit{link count}) che sono stati fatti ad esso; solo quando questo contatore si annulla i dati del file vengono effettivamente rimossi dal disco. Per questo la funzione per cancellare un - file si chiama \texttt{unlink}, ed in realtà non cancella affatto i dati del + file si chiama \func{unlink}, ed in realtà non cancella affatto i dati del file, ma si limita a eliminare la relativa voce da una directory e decrementare il numero di riferimenti nell'\textit{inode}. \item Il numero di \textit{inode} nella voce si riferisce ad un \textit{inode} nello stesso filesystem e non ci può essere una directory che contiene riferimenti ad \textit{inodes} relativi ad altri filesystem. Questo limita - l'uso del comando \texttt{ln} (che crea una nuova voce per un file - esistente, con la funzione \texttt{link}) al filesystem corrente. + l'uso del comando \cmd{ln} (che crea una nuova voce per un file + esistente, con la funzione \func{link}) al filesystem corrente. \item Quando si cambia nome ad un file senza cambiare filesystem il contenuto del file non deve essere spostato, viene semplicemente creata una nuova voce per l'\textit{inode} in questione e rimossa la vecchia (questa è la modalità - in cui opera normalmente il comando \texttt{mv} attraverso la funzione - \texttt{rename}). + in cui opera normalmente il comando \cmd{mv} attraverso la funzione + \func{rename}). \end{enumerate} Infine è bene avere presente che essendo file pure loro, esiste un numero di riferimenti anche per le directories; per cui se ad esempio a partire dalla -situazione mostrata in \curfig\ creiamo una nuova directory \texttt{textdir} -nella directory corrente avremo una situazione come quella in \nfig, dove per +situazione mostrata in \curfig\ creiamo una nuova directory \texttt{img} nella +directory \file{gapil}: avremo una situazione come quella in \nfig, dove per chiarezza abbiamo aggiunto dei numeri di inode. +\begin{figure}[htb] + \centering + \includegraphics[width=11cm]{img/dir_links.eps} + \caption{Organizzazione dei link per le directory} + \label{fig:fileintr_dirs_link} +\end{figure} + La nuova directory avrà allora un numero di riferimenti pari a due, in quanto è referenziata dalla directory da cui si era partiti (in cui è inserita la -nuova voce che fa riferimento a \texttt{textdir}) e dalla voce \texttt{.} +nuova voce che fa riferimento a \file{img}) e dalla voce \file{.} che è sempre inserita in ogni directory; questo vale sempre per ogni directory che non contenga a sua volta altre directories. Al contempo la directory da cui si era partiti avrà un numero di riferiementi di almeno tre, in quanto -adesso sarà referenziata anche dalla voce \texttt{..} di \texttt{textdir}. - +adesso sarà referenziata anche dalla voce \file{..} di \file{img}. \subsection{Il filesystem \texttt{ext2}} \label{sec:fileintr_ext2} @@ -591,7 +605,7 @@ sono le seguenti'' sottodirectory ereditano sia il group id che il setgid. \item l'amministratore può scegliere la dimensione dei blocchi del filesystem in fase di creazione, a seconda delle sue esigenze (blocchi più grandi - peremttono un accesso più veloce, ma sprecano più spazio disco). + permettono un accesso più veloce, ma sprecano più spazio disco). \item il filesystem implementa link simbolici veloci, in cui il nome del file non è salvato su un blocco, ma tenuto all'interno dell'inode (evitando letture multiple e spreco di spazio), non tutti i nomi però possono essere @@ -604,27 +618,32 @@ sono le seguenti'' \end{itemize} La struttura di ext2 è stata ispirata a quella del filesystem di BSD, un -filesystem è composto da un insieme di blocchi, la struttura generale è -riportata in \nfig; su ciascun gruppo di blocchi contiene una copia delle -informazioni essenziali del filesystem (superblock e descrittore del -filesystem) per una maggiore affidabilità e possibilità di recupero in caso di -corruzione del superblock principale. +filesystem è composto da un insieme di blocchi, la struttura generale è quella +riportata in \figref{fig:fileintr_filesys_detail}, in cui la partizione è +divisa in gruppi di blocchi. + +Ciascun gruppo di blocchi contiene una copia delle informazioni essenziali del +filesystem (superblock e descrittore del filesystem sono quindi ridondati) per +una maggiore affidabilità e possibilità di recupero in caso di corruzione del +superblock principale. + \begin{figure}[htb] \centering - - \caption{Organizzazione logica del \textit{second extented filesystem}.} - \label{fig:fileintr_ext2_struct} + \includegraphics[width=9cm]{img/dir_struct.eps} + \caption{Struttura delle directory nel \textit{second extented filesystem}.} + \label{fig:fileintr_ext2_dirs} \end{figure} L'utilizzo di raggrupamenti di blocchi ha inoltre degli effetti positivi nelle performance dato che viene ridotta la distanza fra i dati e la tabella degli inodes. -Le directory sono implementate come una linked list di entrate di dimensione -variabile. Ciascuna entry contiene il numero di inode, la sua lunghezza, il -nome del file e la sua lunghezza. - +Le directory sono implementate come una linked list con voci di dimensione +variabile. Ciascuna voce della lista contiene il numero di inode, la sua +lunghezza, il nome del file e la sua lunghezza, secondo lo schema in \curfig; +in questo modo è possibile implementare nomi per i file anche molto lunghi +(fino a 1024 caratteri) senza sprecare spazio disco. diff --git a/gapil.tex b/gapil.tex index 91f93a0..18f10c4 100644 --- a/gapil.tex +++ b/gapil.tex @@ -1,4 +1,4 @@ -%% +%% %% GaPiL : Guida alla Programmazione in Linux %% %% S. Piccardi Feb. 2001 diff --git a/img/dir_links.dia b/img/dir_links.dia new file mode 100644 index 0000000000000000000000000000000000000000..7eaf5a31c11c88863615d70214612bddecb509c7 GIT binary patch literal 2847 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 literal 0 HcmV?d00001 diff --git a/img/dir_struct.dia b/img/dir_struct.dia new file mode 100644 index 0000000000000000000000000000000000000000..0c5b0ff87cf38ad7261bf6f4c0c29783a56ef4ff GIT binary patch literal 3191 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 N{{w_i%ao{*005z6J$e8D literal 0 HcmV?d00001 diff --git a/img/filesys_struct.dia b/img/filesys_struct.dia new file mode 100644 index 0000000000000000000000000000000000000000..49ac7738f3a3af7931e7b6fd09e482a00eff3548 GIT binary patch literal 4893 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 P-+uXjpJxNx4y*wHsWxww literal 0 HcmV?d00001 diff --git a/img/memory_layout.dia b/img/memory_layout.dia new file mode 100644 index 0000000000000000000000000000000000000000..3608964870209c27c2b460ef522d34cf63787866 GIT binary patch literal 1231 zcmV;=1Tgy_iwFP!000001MOQ|Z{j!Xyf{h$g zN+0I8k8`1fT(~4LGpIo-Rl?Et`Pk<>K0bjjUtgDz_JVm#7#-^-F!ZlacV9w+KFhy3 zM@vl_&^Wmo>kA=PpGTw3W&@&aj0EE#B5M%i(N7dbXe5nB`qQ1J6#+sdP;xK7i-h20 zx)xZYXo<)A6wQ9jIa||E&#ZF08H*U#UQjgF@1N6`KFVQ62RKKtS7?QK8Fsm1F_9)> zyQ-Kp;3V$_o7^gvMs)sk|CfEA4Jp5|$Eq7>BZ*idJ}0!w!!e4oiGaX|5boyTa*C;X ziby>LS5HCW$%=8o5fN3IDPs{vG-DEcjob6YGZe{?Ip&Jl9{rgJ!A^|-8Ab6q4rI6A z)pMy5=bVJcg?M1mfU+T>SWI4zO_u>WEPIB(RfhjUVls_zod<-9&g;E{-*$xWy4GtF z;`qdBAKEk^EpoHbDaXrp=X#LcDs5CLMTEAP=kVY5Ta=d1aW4GAEU@YScqVf9{u79X zh=ux|B`m(`gx;%i$wB zk8nm{fxvST63cTQ6D}yPEC8X?juc0DIhip|tJ`f)Zlw&VgsZOYI(Z@Ay^JXu#>J0S~|=Bvn>IE^uup zm4OE>=g|Y6W2ZW>*Qjz9g&mWUQRH8Ffs>2OUQG>PCbjGN(&izf72} zmo<&RW1YsjR+`e3;P#RdETy%f156(pWjzvrU6k#e&5jJo=7UF7dX(fEXiWZiqU%XfbT)qdkE4-l=bJAkPD1fL&4asU<|s_ z4E5sKIl=5BCs>M`(Y9~;{sYW%fXoSj>6;0wbsIS$7HIZkNDAGOf;F_GuXTttVIN7s zR+=-oW`l=SMkd6T~^&G}p{lN94)r%GvHpadLjnWJm%@#;DX$ zT-jB2pJ)rIyyTnIQfPvuhf{6;X>z;rb?y>qPx`j{(6^^p-|oA<{VVC)JEiZB)E|;X t3m1wMUcgqT@gm7@QMs9`-0!OL>^l8@#?#%w4>+FgegRsDFKy2_008~1U`YS~ literal 0 HcmV?d00001 diff --git a/process.tex b/process.tex index 750db60..834190d 100644 --- a/process.tex +++ b/process.tex @@ -388,7 +388,7 @@ programma C viene suddiviso nei seguenti segmenti: \begin{figure}[htb] \centering - + \includegraphics[width=8cm]{img/memory_layout.eps} \caption{Disposizione tipica dei segmenti di memoria di un processo} \label{fig:proc_mem_layout} \end{figure} @@ -496,8 +496,8 @@ la funzione lo utilzza, altrimenti rialloca altrove un blocco della dimensione voluta copiandoci automaticamente il contenuto, lo spazio in più non viene inizializzato. -Il fatto che il blocco di memoria restituito da \texttt{realloc} possa -camabiare comporta che si deve sempre riassegnare al puntatore passato per il +Il fatto che il blocco di memoria restituito da \func{realloc} possa +cambiare comporta che si deve sempre riassegnare al puntatore passato per il ridimensionamento il valore di ritorno della funzione, e che non ci devono essere altri puntatori che puntino all'interno di un'area che si vuole ridimensionare. @@ -537,6 +537,7 @@ le disallocazione, e definisce anche una serie di possibili agganci che permettono di sostituire alle funzioni di libreria una propria versione (che può essere più o meno specializzata per il debugging). + \subsection{La funzione \texttt{alloca}} \label{sec:proc_mem_alloca} @@ -558,8 +559,8 @@ viene rilasciata automaticamente al ritorno della funzione. Come è evidente questa funzione ha molti vantaggi, e permette di evitare i problemi di memory leak non essendo più necessaria la deallocazione esplicita; una delle ragioni principali per usarla è però che funziona anche quando si -usa \texttt{longjump} per uscire con un salto non locale da una funzione (vedi -\secref{sec:proc_longjmp}), +usa \func{longjump} per uscire con un salto non locale da una funzione (vedi +\secref{sec:proc_longjmp}), Un altro vantaggio e che in Linux la funzione è molto veloce e non viene sprecato spazio, infatti non è necessario gestire un pool di memoria da @@ -572,6 +573,17 @@ cerca di allocare troppa memoria non si ottiene un messaggio di errore, ma un segnale di \textit{segmentation violation} analogo a quello che si avrebbe da una ricorsione infinita. +Inoltre non è chiaramente possibile usare questa funzione per allocare memoria +che deve poi essere usata anche al di fuori della funzione in cui questa viene +chiamata, in quanto all'uscita dalla funzione lo spazio allocato diventerebbe +libero, e potrebbe essere sovrascritto all'invocazione di nuove funzioni con +conseguenze imprevedibili. + +Questo è lo stesso problema potenziale che si può avere con le variabili +automatiche; un errore comune infatti è quello di restituire al chiamante un +puntatore ad una di queste variabili, che sarà automaticamente distrutta +all'uscita della funzione, con gli stessi problemi appena citati per +\func{alloca}. \subsection{Le funzioni \texttt{brk} e \texttt{sbrk}} \label{sec:proc_mem_sbrk} @@ -672,7 +684,7 @@ che pu Il controllo del flusso di un programma in genere viene effettuato con le varie istruzioni del linguaggio C, la più bistrattata delle quali è il -\texttt{goto} ampiamente deprecato in favore di costrutti più puliti; esiste +\texttt{goto}, ampiamente deprecato in favore di costrutti più puliti; esiste però un caso in l'uso di questa istruzione porta all'implementazione più efficiente, quello dell'uscita in caso di errore. @@ -820,7 +832,7 @@ versione estesa di \texttt{getopt}. Oltre ai parametri passati da linea di comando ogni processo riceve dal sistema un \textsl{ambiente}, nella forma di una lista di variabili (\textit{environment list}) messa a disposizione dal processo costruita nella -chiamata ad \finc{exec} che lo ha lanciato. +chiamata ad \func{exec} che lo ha lanciato. Come per la lista dei parametri anche questa lista è un array di puntatori a caratteri, ciascuno dei quali punta ad una stringa (terminata da un null). A -- 2.30.2