From 9ae76fdeacb0ff52559c8bf310b20d485ccc9328 Mon Sep 17 00:00:00 2001 From: Simone Piccardi Date: Mon, 9 Jan 2012 23:24:45 +0000 Subject: [PATCH] Modifiche figure per uso del font inconsolata e ulteriore revisione del quarto capitolo. --- filedir.tex | 465 +++++++++++++++++++++++------------------ gapil.tex | 6 +- img/dir_links.dia | Bin 3044 -> 3069 bytes img/dir_struct.dia | Bin 3455 -> 3836 bytes img/disk_struct.dia | Bin 2226 -> 2389 bytes img/endianness.dia | Bin 1494 -> 1907 bytes img/exec_rel.dia | Bin 1918 -> 2025 bytes img/fileperm.dia | Bin 1824 -> 1874 bytes img/filesys_struct.dia | Bin 5047 -> 5448 bytes img/link_loop.dia | Bin 1655 -> 1694 bytes img/proc_beginend.dia | Bin 2374 -> 2519 bytes img/struct_sys.dia | Bin 2170 -> 2323 bytes img/vfs.dia | Bin 2890 -> 3020 bytes listati/file.h | 11 + process.tex | 22 +- prochand.tex | 68 +++--- 16 files changed, 316 insertions(+), 256 deletions(-) create mode 100644 listati/file.h diff --git a/filedir.tex b/filedir.tex index 1964e7d..9cd3f89 100644 --- a/filedir.tex +++ b/filedir.tex @@ -42,7 +42,7 @@ successori. \subsection{Il funzionamento del \textit{Virtual File System} di Linux} \label{sec:file_vfs_work} -% articolo interessante: +% NOTE articolo interessante: % http://www.ibm.com/developerworks/linux/library/l-virtual-filesystem-switch/index.html?ca=dgr-lnxw97Linux-VFSdth-LXdW&S_TACT=105AGX59&S_CMP=GRlnxw97 \itindbeg{Virtual~File~System} @@ -55,6 +55,8 @@ tutti i filesystem devono implementare per l'accesso ai file che contengono e l'interfaccia che consente di eseguire l'I/O sui file, che questi siano di dati o dispositivi. +\itindbeg{inode} + L'interfaccia fornita dal VFS comprende in sostanza tutte le funzioni che riguardano i file, le operazioni implementate dal VFS sono realizzate con una astrazione che prevede quattro tipi di oggetti strettamente correlati: i @@ -63,7 +65,7 @@ corrispondono una serie di apposite strutture definite dal kernel che contengono come campi le funzioni di gestione e realizzano l'infrastruttura del VFS. L'interfaccia è molto complessa, ne faremo pertanto una trattazione estremamente semplificata che consenta di comprenderne i principi -difunzionamento. +di funzionamento. 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 @@ -97,6 +99,8 @@ filesystem si dovrà allocare una di queste strutture ed inizializzare i relativi campi con i dati specifici di quel filesystem, ed in particolare si dovrà creare anche la relativa versione della funzione \code{mount}. +\itindbeg{pathname} + Come illustrato in fig.~\ref{fig:kstruct_file_system_type} questa funzione restituisce una \textit{dentry}, abbreviazione che sta per \textit{directory entry}. Le \textit{dentry} sono gli oggetti che il kernel usa per eseguire @@ -124,12 +128,12 @@ Dato che normalmente non è possibile mantenere nella \textit{dcache} le informazioni relative a tutto l'albero dei file la procedura della \textit{pathname resolution} richiede un meccanismo con cui riempire gli eventuali vuoti. Il meccanismo prevede che tutte le volte che si arriva ad una -\textit{dentry} mancante venga invocata la funzione \texttt{lookup} dell'inode -associato alla \textit{dentry} precedente nella risoluzione del -\textit{pathname},\footnote{che a questo punto è una directory, per cui si può - cercare al suo interno il nome di un file.} il cui scopo è risolvere il nome -mancante e fornire la sua \textit{dentry} che a questo punto verrà inserita -nella cache. +\textit{dentry} mancante venga invocata la funzione \texttt{lookup} +dell'\textit{inode} associato alla \textit{dentry} precedente nella +risoluzione del \textit{pathname},\footnote{che a questo punto è una + directory, per cui si può cercare al suo interno il nome di un file.} il cui +scopo è risolvere il nome mancante e fornire la sua \textit{dentry} che a +questo punto verrà inserita nella cache. Dato che tutte le volte che si monta un filesystem la funzione \texttt{mount} della corrispondente \kstruct{file\_system\_type} inserisce la \textit{dentry} @@ -140,6 +144,8 @@ filesystem, e come vedremo questo farà sì che venga eseguita una \texttt{lookup} adatta per effettuare la risoluzione dei nomi per quel filesystem. +\itindend{pathname} + % Un secondo effetto della chiamata funzione \texttt{mount} di % \kstruct{file\_system\_type} è quello di allocare una struttura % \kstruct{super\_block} per ciascuna istanza montata, che contiene le @@ -267,6 +273,8 @@ questo può essere anche un file di dispositivo, ed in questo caso il VFS invece di usare le operazioni fornite dal filesystem (come farebbe per un file di dati) dovrà invece ricorrere a quelle fornite dal driver del dispositivo. +\itindend{inode} + \begin{figure}[!htb] \footnotesize \centering \begin{minipage}[c]{\textwidth} @@ -342,6 +350,10 @@ esserci negli oggetti a cui si applicano. \itindend{Virtual~File~System} +% NOTE: documentazione interessante: +% * sorgenti del kernel: Documentation/filesystems/vfs.txt +% * http://thecoffeedesk.com/geocities/rkfs.html +% * http://www.linux.it/~rubini/docs/vfs/vfs.html \subsection{Il funzionamento di un filesystem Unix} \label{sec:file_filesystem} @@ -366,13 +378,15 @@ sottostanti) e creata una opportuna suddivisione dei dati e delle informazioni per accedere agli stessi. Sulle caratteristiche di \acr{ext2} e derivati torneremo in sez.~\ref{sec:file_ext2}. +\itindbeg{inode} + È comunque caratteristica comune di tutti i filesystem per Unix, indipendentemente da come poi viene strutturata nei dettagli questa informazione, prevedere la presenza di due tipi di risorse: gli -\itindex{inode} \textit{inode}, cui abbiamo già accennato in -sez.~\ref{sec:file_vfs_work}, che sono le strutture che identificano i singoli -oggetti sul filesystem, e i blocchi, che invece attengono allo spazio disco -che viene messo a disposizione per i dati in essi contenuti. +\textit{inode}, cui abbiamo già accennato in sez.~\ref{sec:file_vfs_work}, che +sono le strutture che identificano i singoli oggetti sul filesystem, e i +blocchi, che invece attengono allo spazio disco che viene messo a disposizione +per i dati in essi contenuti. \begin{figure}[!htb] \centering @@ -391,7 +405,7 @@ esposto in fig.~\ref{fig:file_filesys_detail}. \begin{figure}[!htb] \centering - \includegraphics[width=14cm]{img/filesys_struct} + \includegraphics[width=12cm]{img/filesys_struct} \caption{Strutturazione dei dati all'interno di un filesystem.} \label{fig:file_filesys_detail} \end{figure} @@ -404,101 +418,115 @@ per capire il funzionamento delle funzioni che manipolano i file e le directory che tratteremo nel prosieguo del capitolo. In particolare è opportuno tenere sempre presente che: + \begin{enumerate} -\item L'\textit{inode} \itindex{inode} contiene tutte le informazioni, i - cosiddetti \textsl{metadati}, riguardanti il file: il tipo di file, i - permessi di accesso, le dimensioni, i puntatori ai blocchi fisici che - contengono i dati e così via. Le informazioni che la funzione \func{stat} - (vedi sez.~\ref{sec:file_stat}) fornisce provengono dall'\textit{inode}. - Dentro una directory si troverà solo il nome del file e il numero - \itindex{inode} dell'\textit{inode} ad esso associato, cioè quella che da - qui in poi chiameremo una \textsl{voce}, che abbiamo scelto come traduzione - dell'inglese \textit{directory entry}, che non useremo anche per evitare - confusione con le \textit{dentry} del kernel di cui si parlava in - sez.~\ref{sec:file_vfs_work}. +\item L'\textit{inode} contiene i cosiddetti \textsl{metadati}, vale dire le + informazioni riguardanti le proprietà del file come oggetto del filesystem: + il tipo di file, i permessi di accesso, le dimensioni, i puntatori ai + blocchi fisici che contengono i dati e così via. Le informazioni che la + funzione \func{stat} (vedi sez.~\ref{sec:file_stat}) fornisce provengono + dall'\textit{inode}. Dentro una directory si troverà solo il nome del file + e il numero dell'\textit{inode} ad esso associato; il nome non è una + proprietà del file e non viene mantenuto nell'\textit{inode}. Da da qui in + poi chiameremo il nome del file contenuto in una directory + ``\textsl{voce}'', come traduzione della nomenclatura inglese + \textit{directory entry} che non useremo per evitare confusione con le + \textit{dentry} del kernel viste in sez.~\ref{sec:file_vfs_work}. -\item Come mostrato in fig.~\ref{fig:file_filesys_detail} si possono avere più - voci che puntano allo stesso \textit{inode}. Ogni \textit{inode} ha un - contatore che contiene il numero di riferimenti che sono stati fatti ad esso - (il cosiddetto \textit{link count}); 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 \func{unlink} (vedi - sez.~\ref{sec:file_link}), ed in realtà non cancella affatto i dati del - file, ma si limita ad eliminare la relativa voce da una directory e - decrementare il numero di riferimenti \itindex{inode} nell'\textit{inode}. +\item Come mostrato in fig.~\ref{fig:file_filesys_detail} per i file + \texttt{macro.tex} e \texttt{gapil\_macro.tex}, ci possono avere più voci + che fanno riferimento allo stesso \textit{inode}. Fra le proprietà di un + file mantenute nell'\textit{inode} c'è anche il contatore con il numero di + riferimenti che sono stati fatti ad esso, il cosiddetto \textit{link + count}.\footnote{mantenuto anche nel campo \var{i\_nlink} della struttura + \kstruct{inode} di fig.~\ref{fig:kstruct_inode}.} Solo quando questo + contatore si annulla i dati del file possono essere effettivamente rimossi + dal disco. Per questo la funzione per cancellare un file si chiama + \func{unlink} (vedi sez.~\ref{sec:file_link}), ed in realtà non cancella + affatto i dati del file, ma si limita ad eliminare la relativa voce da una + directory e decrementare il numero di riferimenti nell'\textit{inode}. \item All'interno di ogni filesystem ogni \textit{inode} è identificato da un - numero univoco. Il numero di \textit{inode} nella voce si riferisce ad un - \textit{inode} a questo numero e non ci può essere una directory che - contiene riferimenti ad \itindex{inode} \textit{inode} relativi ad altri - filesystem. Questo limita l'uso del comando \cmd{ln} (che crea una nuova - voce per un file esistente con la funzione \func{link}) al filesystem - corrente. + numero univoco. Il numero di \textit{inode} associato ad una voce in una + directory si riferisce ad questo numero e non ci può essere una directory + che contiene riferimenti ad \textit{inode} relativi ad altri filesystem. + Questa è la ragione che limita l'uso del comando \cmd{ln}, che crea una + nuova voce per un file esistente con la funzione \func{link} (vedi + sez.~\ref{sec:file_link}) a file nel filesystem corrente. -\item Quando si cambia nome ad un file senza cambiare filesystem, il contenuto +\item Quando si cambia nome ad un file senza cambiare filesystem il contenuto del file non viene spostato fisicamente, viene semplicemente creata una - nuova voce per \itindex{inode} l'\textit{inode} in questione e rimossa la - vecchia (questa è la modalità in cui opera normalmente il comando \cmd{mv} - attraverso la funzione \func{rename}, vedi - sez.~\ref{sec:file_remove}). Questa operazione non modifica minimamente - neanche l'\textit{inode} del file dato che non si opera su questo ma sulla - directory che lo contiene. + nuova voce per l'\textit{inode} in questione e rimossa la precedente, questa + è la modalità in cui opera normalmente il comando \cmd{mv} attraverso la + funzione \func{rename} (vedi sez.~\ref{sec:file_remove}). Questa operazione + non modifica minimamente neanche l'\textit{inode} del file, dato che non si + opera su questo ma sulla directory che lo contiene. \item Gli \textit{inode} dei file, che contengono i \textsl{metadati} ed i blocchi di spazio disco, che contengono i dati, sono risorse indipendenti ed in genere vengono gestite come tali anche dai diversi filesystem; è pertanto - possibile sia esaurire lo spazio disco (caso più comune) che lo spazio per - gli \textit{inode}, nel primo caso non sarà possibile allocare ulteriore + possibile esaurire sia lo spazio disco (il caso più comune) che lo spazio + per gli \textit{inode}. Nel primo caso non sarà possibile allocare ulteriore spazio, ma si potranno creare file (vuoti), nel secondo non si potranno - creare nuovi file, ma si potranno estendere quelli che ci sono. + creare nuovi file, ma si potranno estendere quelli che ci + sono.\footnote{questo comportamento non è generale, alcuni filesystem evoluti + possono evitare il problema dell'esaurimento degli \textit{inode} + riallocando lo spazio disco libero per i blocchi.} \end{enumerate} -Infine si noti che, essendo file pure loro, il numero di riferimenti esiste -anche per le directory; per cui, se a partire dalla situazione mostrata in -fig.~\ref{fig:file_filesys_detail} creiamo una nuova directory \file{img} -nella directory \file{gapil}, avremo una situazione come quella in -fig.~\ref{fig:file_dirs_link}, dove per chiarezza abbiamo aggiunto dei numeri -di \itindex{inode} inode. - \begin{figure}[!htb] \centering - \includegraphics[width=14cm]{img/dir_links} + \includegraphics[width=12cm]{img/dir_links} \caption{Organizzazione dei \textit{link} per le directory.} \label{fig:file_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{img}) e dalla voce ``\texttt{.}'' che -è sempre inserita in ogni directory; questo vale sempre per ogni directory che -non contenga a sua volta altre directory. Al contempo, la directory da cui si -era partiti avrà un numero di riferimenti di almeno tre, in quanto adesso sarà -referenziata anche dalla voce ``\texttt{..}'' di \texttt{img}. +Infine tenga presente che, essendo file pure loro, il numero di riferimenti +esiste anche per le directory. Per questo se a partire dalla situazione +mostrata in fig.~\ref{fig:file_filesys_detail} creiamo una nuova directory +\file{img} nella directory \file{gapil}, avremo una situazione come quella +illustrata in fig.~\ref{fig:file_dirs_link}. +La nuova directory avrà 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{img}) e dalla voce interna ``\texttt{.}'' +che è presente in ogni directory. Questo è il valore che si troverà sempre +per ogni directory che non contenga a sua volta altre directory. Al contempo, +la directory da cui si era partiti avrà un numero di riferimenti di almeno +tre, in quanto adesso sarà referenziata anche dalla voce ``\texttt{..}'' di +\texttt{img}. L'aggiunta di una sottodirectory fa cioè crescere di uno il +\textit{link count} della directory genitrice. -\subsection{I filesystem di uso comune} +\itindend{inode} + + +\subsection{Alcuni dettagli sul filesystem \textsl{ext2} e successori} \label{sec:file_ext2} -Il filesystem standard più usato con Linux è il cosiddetto \textit{third - extended filesystem}, identificato dalla sigla \acr{ext3}.\footnote{si fa - riferimento al momento della stesura di questo paragrafo, l'inizio del - 2010.} 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}. A partire dal kernel 2.6.XX è -stato dichiarato stabile il nuovo filsesystem \textit{ext4}, ulteriore -evoluzione di \textit{ext3} dotato di molte caratteristiche avanzate, che sta -iniziando a sostituirlo gradualmente. - -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. I -successivi filesystem \acr{ext3} ed \acr{ext4} sono evoluzioni di questo -filesystem, e sia pure con molti miglioramenti ed estensioni significative ne -mantengono in sostanza le caratteristiche fondamentali. + +Benché non esista il filesystem di Linux, dato che esiste un supporto nativo +di diversi filesystem che sono in uso da anni, quello che gli avvicina di più +è la famiglia di filesystem evolutasi a partire dal \textit{second extended + filesystem}, o \acr{ext2}, che nonostante il nome è stato il primo ad essere +usato in maniera estensiva. Il filesystem \acr{ext2} ha subito un grande +sviluppo e diverse evoluzioni, fra cui l'aggiunta del \textit{journaling} con +\acr{ext3}, probabilmente ancora il filesystem più diffuso, ed una serie di +ulteriori miglioramento con il successivo \acr{ext4}, che sta iniziando a +sostituirlo gradualmente. In futuro è previsto che questo debba essere +sostituito da un filesystem completamente diverso, \acr{btrfs}, che dovrebbe +diventare il filesystem standard di Linux, ma questo al momento è ancora in +fase di sviluppo.\footnote{si fa riferimento al momento dell'ultima revisione + di di questo paragrafo, l'inizio del 2012.} + +Il filesystem \acr{ext2} nasce come filesystem nativo per 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. I successivi filesystem \acr{ext3} ed \acr{ext4} sono evoluzioni di +questo filesystem, e sia pure con molti miglioramenti ed estensioni +significative ne mantengono le caratteristiche fondamentali. Oltre alle caratteristiche standard, \acr{ext2} fornisce alcune estensioni che non sono presenti su un classico filesystem di tipo Unix; le principali sono @@ -517,12 +545,13 @@ le seguenti: questi termini si veda sez.~\ref{sec:file_access_control}), nel qual caso file e subdirectory ereditano sia il \acr{gid} che lo \acr{sgid}. \item l'amministratore può scegliere la dimensione dei blocchi del filesystem - in fase di creazione, a seconda delle sue esigenze (blocchi più grandi - permettono un accesso più veloce, ma sprecano più spazio disco). + in fase di creazione, a seconda delle sue esigenze: blocchi più grandi + 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 \itindex{inode} dell'inode - (evitando letture multiple e spreco di spazio), non tutti i nomi però - possono essere gestiti così per limiti di spazio (il limite è 60 caratteri). + non è salvato su un blocco, ma tenuto all'interno \itindex{inode} + dell'\textit{inode} (evitando letture multiple e spreco di spazio), non + tutti i nomi però possono essere gestiti così per limiti di spazio (il + limite è 60 caratteri). \item vengono supportati i file immutabili (che possono solo essere letti) per la protezione di file di configurazione sensibili, o file \textit{append-only} che possono essere aperti in scrittura solo per @@ -533,25 +562,19 @@ le seguenti: La struttura di \acr{ext2} è stata ispirata a quella del filesystem di BSD: un filesystem è composto da un insieme di blocchi, la struttura generale è quella riportata in fig.~\ref{fig:file_filesys_detail}, in cui la partizione è divisa -in gruppi di blocchi.\footnote{non si confonda questa definizione con - quella riportata in fig.~\ref{fig:file_dirent_struct}; in quel caso si fa - riferimento alla struttura usata in user space per riportare i dati - contenuti in una directory generica, questa fa riferimento alla struttura - usata dal kernel per un filesystem \acr{ext2}, definita nel file - \texttt{ext2\_fs.h} nella directory \texttt{include/linux} dei sorgenti del - kernel.} +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. L'utilizzo di raggruppamenti di blocchi ha inoltre -degli effetti positivi nelle prestazioni dato che viene ridotta la distanza -fra i dati e la tabella degli \itindex{inode} inode. +filesystem (i \textit{superblock} sono quindi ridondati) per una maggiore +affidabilità e possibilità di recupero in caso di corruzione del +\textit{superblock} principale. L'utilizzo di raggruppamenti di blocchi ha +inoltre degli effetti positivi nelle prestazioni dato che viene ridotta la +distanza fra i dati e la tabella degli \itindex{inode} inode. \begin{figure}[!htb] \centering \includegraphics[width=9cm]{img/dir_struct} - \caption{Struttura delle directory nel \textit{second extented filesystem}.} + \caption{Struttura delle directory nel \textit{second extended filesystem}.} \label{fig:file_ext2_dirs} \end{figure} @@ -562,12 +585,12 @@ lunghezza, secondo lo schema in fig.~\ref{fig:file_ext2_dirs}; in questo modo è possibile implementare nomi per i file anche molto lunghi (fino a 1024 caratteri) senza sprecare spazio disco. -Con l'introduzione del filesystem \textit{ext3} sono state introdotte anche -alcune modifiche strutturali, la principale di queste è quella che -\textit{ext3} è un filesystem \textit{jounrnaled}, è cioè in grado di eseguire -una registrazione delle operazioni di scrittura su un giornale (uno speciale -file interno) in modo da poter garantire il ripristino della coerenza dei dati -del filesystem\footnote{si noti bene che si è parlato di dati \textsl{del} +Con l'introduzione del filesystem \textit{ext3} sono state introdotte diverse +modifiche strutturali, la principale di queste è quella che \textit{ext3} è un +filesystem \textit{journaled}, è cioè in grado di eseguire una registrazione +delle operazioni di scrittura su un giornale (uno speciale file interno) in +modo da poter garantire il ripristino della coerenza dei dati del +filesystem\footnote{si noti bene che si è parlato di dati \textsl{del} filesystem, non di dati \textsl{nel} filesystem, quello di cui viene garantito un veloce ripristino è relativo ai dati della struttura interna del filesystem, non di eventuali dati contenuti nei file che potrebbero @@ -578,9 +601,9 @@ della scrittura dei dati sul disco. Oltre a questo \textit{ext3} introduce ulteriori modifiche volte a migliorare sia le prestazioni che la semplicità di gestione del filesystem, in particolare per le directory si è passato all'uso di alberi binari con -indicizzazione tramite hash al posto delle \textit{linked list}, ottenendo un -forte guadagno di prestazioni in caso di directory contenenti un gran numero -di file. +indicizzazione tramite hash al posto delle \textit{linked list} che abbiamo +illustrato, ottenendo un forte guadagno di prestazioni in caso di directory +contenenti un gran numero di file. % TODO portare a ext3, ext4 e btrfs ed illustrare le problematiche che si % possono incontrare (in particolare quelle relative alla perdita di contenuti @@ -593,67 +616,88 @@ di file. Come accennato in sez.~\ref{sec:file_arch_overview} per poter accedere ai file occorre prima rendere disponibile al sistema il filesystem su cui essi sono memorizzati; l'operazione di attivazione del filesystem è chiamata -\textsl{montaggio}, per far questo in Linux\footnote{la funzione è specifica - di Linux e non è portabile.} si usa la funzione \funcd{mount} il cui -prototipo è: -\begin{prototype}{sys/mount.h} -{mount(const char *source, const char *target, const char *filesystemtype, - unsigned long mountflags, const void *data)} +\textsl{montaggio}, per far questo in Linux si usa la funzione \funcd{mount} +il cui prototipo è:\footnote{la funzione è una versione specifica di Linux e + non è portabile.} + +\begin{funcproto}{ +\fhead{sys/mount.h} +\fdecl{mount(const char *source, const char *target, const char + *filesystemtype, \\ +\phantom{mount(}unsigned long mountflags, const void *data)} +\fdesc{Monta un filesystem.} +} -Monta il filesystem di tipo \param{filesystemtype} contenuto in \param{source} -sulla directory \param{target}. - - \bodydesc{La funzione ritorna 0 in caso di successo e -1 in caso di - fallimento, nel qual caso gli errori comuni a tutti i filesystem che possono - essere restituiti in \var{errno} sono: +{La funzione ritorna $0$ in caso di successo e $-1$ per un errore, nel qual + caso \var{errno} assumerà uno dei valori: \begin{errlist} - \item[\errcode{EPERM}] il processo non ha i privilegi di amministratore. - \item[\errcode{ENODEV}] \param{filesystemtype} non esiste o non è configurato - nel kernel. - \item[\errcode{ENOTBLK}] non si è usato un \textit{block device} per - \param{source} quando era richiesto. + \item[\errcode{EACCES}] non si ha il permesso di accesso su uno dei + componenti del \itindex{pathname} \textit{pathname}, o si è cercato di + montare un filesystem disponibile in sola lettura senza aver specificato + \const{MS\_RDONLY} o il device \param{source} è su un filesystem montato + con l'opzione \const{MS\_NODEV}. \item[\errcode{EBUSY}] \param{source} è già montato, o non può essere - rimontato in read-only perché ci sono ancora file aperti in scrittura, o - \param{target} è ancora in uso. - \item[\errcode{EINVAL}] il device \param{source} presenta un + rimontato in sola lettura perché ci sono ancora file aperti in scrittura, + o non può essere montato su \param{target} perché la directory è ancora in + uso. + \item[\errcode{EINVAL}] il dispositivo \param{source} presenta un \textit{superblock} non valido, o si è cercato di rimontare un filesystem non ancora montato, o di montarlo senza che \param{target} sia un \itindex{mount~point} \textit{mount point} o di spostarlo quando \param{target} non è un \itindex{mount~point} \textit{mount point} - o è \file{/}. - \item[\errcode{EACCES}] non si ha il permesso di accesso su uno dei - componenti del \itindex{pathname} \textit{pathname}, o si è cercato - di montare un filesystem disponibile in sola lettura senza averlo - specificato o il device \param{source} è su un filesystem montato con - l'opzione \const{MS\_NODEV}. - \item[\errcode{ENXIO}] il \itindex{major~number} \textit{major number} del - device \param{source} è sbagliato. + o è la radice. \item[\errcode{EMFILE}] la tabella dei device \textit{dummy} è piena. - \end{errlist} - ed inoltre \errval{ENOTDIR}, \errval{EFAULT}, \errval{ENOMEM}, - \errval{ENAMETOOLONG}, \errval{ENOENT} o \errval{ELOOP}.} -\end{prototype} - -La funzione monta sulla directory \param{target}, detta \itindex{mount~point} -\textit{mount point}, il filesystem contenuto in \param{source}. In generale -un filesystem è contenuto su un disco, e l'operazione di montaggio corrisponde -a rendere visibile al sistema il contenuto del suddetto disco, identificato -attraverso il file di dispositivo ad esso associato. + \item[\errcode{ENODEV}] il tipo \param{filesystemtype} non esiste o non è + configurato nel kernel. + \item[\errcode{ENOTBLK}] non si è usato un \textit{block device} per + \param{source} quando era richiesto. + \item[\errcode{ENXIO}] il \itindex{major~number} \textit{major number} del + dispositivo \param{source} è sbagliato. + \item[\errcode{EPERM}] il processo non ha i privilegi di amministratore. + \end{errlist} + ed inoltre \errval{EFAULT}, \errval{ELOOP}, \errval{ENOMEM}, + \errval{ENAMETOOLONG}, \errval{ENOENT}, \errval{ENOTDIR} nel loro + significato generico.} +\end{funcproto} + +La funzione monta sulla directory indicata \param{target}, detta +\itindex{mount~point} \textit{mount point}, il filesystem contenuto nel file +di dispositivo indicato \param{source}. In entrambi i casi, come daremo per +assunto da qui in avanti tutte le volte che si parla di directory o file nel +passaggio di un argomento di una funzione, si intende che questi devono essere +indicati con la stringa contenente il loro \itindex{pathname} +\textit{pathname}. + +In generale un filesystem è contenuto su un disco, e come illustrato in +sez.~\ref{sec:file_vfs_work} l'operazione di montaggio corrisponde a rendere +visibile il contenuto del suddetto disco, identificato attraverso il file di +dispositivo ad esso associato, all'interno di una directory dell'albero dei +file. Ma la struttura del \textit{Virtual File System} vista in -sez.~\ref{sec:file_vfs_work} è molto più flessibile e può essere usata anche -per oggetti diversi da un disco. Ad esempio usando il \textit{loop device} si -può montare un file qualunque (come l'immagine di un CD-ROM o di un floppy) -che contiene un filesystem, inoltre alcuni filesystem, come \file{proc} o -\file{devfs} sono del tutto virtuali, i loro dati sono generati al volo ad -ogni lettura, e passati al kernel ad ogni scrittura. - -Il tipo di filesystem è specificato da \param{filesystemtype}, che deve essere -una delle stringhe riportate nel file \procfile{/proc/filesystems}, che -contiene l'elenco dei filesystem supportati dal kernel; nel caso si sia -indicato uno dei filesystem virtuali, il contenuto di \param{source} viene +sez.~\ref{sec:file_vfs_work} è estremamente flessibile e può essere usata +anche per oggetti diversi da un disco. Ad esempio usando il \textit{loop + device} si può montare un file qualunque (come l'immagine di un CD-ROM o di +un floppy) che contiene un filesystem, inoltre alcuni filesystem, come +\file{proc} o \file{devfs} sono del tutto virtuali, i loro dati sono generati +al volo ad ogni lettura, e passati al kernel ad ogni scrittura. + +Il tipo di filesystem è specificato dall'argomento \param{filesystemtype}, che +deve essere una delle stringhe riportate nel file +\procfile{/proc/filesystems}, che come accennato in +sez.~\ref{sec:file_vfs_work} contiene l'elenco dei filesystem supportati dal +kernel. Nel caso si sia indicato uno dei filesystem virtuali, che non è +associato a nessun file di dispositivo, il contenuto di \param{source} viene ignorato. +L'argomento \param{data} viene usato per passare le impostazioni relative alle +caratteristiche specifiche di ciascun filesystem. Si tratta di una stringa di +parole chiave (separate da virgole e senza spazi) che indicano le opzioni del +filesytem che devono essere impostate, in sostanza viene usato il contenuto +del parametro dell'opzione \texttt{-o} del comando \texttt{mount}. I valori +utilizzabili dipendono dal tipo di filesystem e ciascuno ha i suoi, pertanto +si rimanda alla documentazione della pagina di manuale di questo comando. + Dopo l'esecuzione della funzione il contenuto del filesystem viene resto disponibile nella directory specificata come \itindex{mount~point} \textit{mount point}, il precedente contenuto di detta directory viene @@ -663,8 +707,8 @@ Dal kernel 2.4.x inoltre è divenuto possibile sia spostare atomicamente un \itindex{mount~point} \textit{mount point} da una directory ad un'altra, sia montare in diversi \itindex{mount~point} \textit{mount point} lo stesso filesystem, sia montare più filesystem sullo stesso \itindex{mount~point} -\textit{mount point} (nel qual caso vale quanto appena detto, e solo il -contenuto dell'ultimo filesystem montato sarà visibile). +\textit{mount point}, nel qual caso vale quanto appena detto, e solo il +contenuto dell'ultimo filesystem montato sarà visibile. Ciascun filesystem è dotato di caratteristiche specifiche che possono essere attivate o meno, alcune di queste sono generali (anche se non è detto siano @@ -683,7 +727,7 @@ valori riportati in tab.~\ref{tab:sys_mount_flags}. \begin{table}[htb] \footnotesize \centering - \begin{tabular}[c]{|l|r|l|} + \begin{tabular}[c]{|l|r|p{8cm}|} \hline \textbf{Parametro} & \textbf{Valore}&\textbf{Significato}\\ \hline @@ -719,10 +763,6 @@ valori riportati in tab.~\ref{tab:sys_mount_flags}. % gli S_* non esistono più come segnalato da Alessio... % verificare i readonly mount bind del 2.6.26 -Per l'impostazione delle caratteristiche particolari di ciascun filesystem si -usa invece l'argomento \param{data} che serve per passare le ulteriori -informazioni necessarie, che ovviamente variano da filesystem a filesystem. - La funzione \func{mount} può essere utilizzata anche per effettuare il \textsl{rimontaggio} di un filesystem, cosa che permette di cambiarne al volo alcune delle caratteristiche di funzionamento (ad esempio passare da sola @@ -734,28 +774,32 @@ viene ignorato. Una volta che non si voglia più utilizzare un certo filesystem è possibile \textsl{smontarlo} usando la funzione \funcd{umount}, il cui prototipo è: -\begin{prototype}{sys/mount.h}{umount(const char *target)} - - Smonta il filesystem montato sulla directory \param{target}. - - \bodydesc{La funzione ritorna 0 in caso di successo e -1 in caso di - fallimento, nel qual caso \var{errno} assumerà uno dei valori: + +\begin{funcproto}{ +\fhead{sys/mount.h} +\fdecl{umount(const char *target)} +\fdesc{Smonta un filesystem.} +} +{La funzione ritorna $0$ in caso + di successo e $-1$ per un errore, + nel qual caso \var{errno} assumerà uno dei valori: \begin{errlist} \item[\errcode{EPERM}] il processo non ha i privilegi di amministratore. \item[\errcode{EBUSY}] \param{target} è la directory di lavoro di qualche processo, o contiene dei file aperti, o un altro mount point. - \end{errlist} - ed inoltre \errval{ENOTDIR}, \errval{EFAULT}, \errval{ENOMEM}, - \errval{ENAMETOOLONG}, \errval{ENOENT} o \errval{ELOOP}.} -\end{prototype} -\noindent la funzione prende il nome della directory su cui il filesystem è -montato e non il file o il dispositivo che è stato montato,\footnote{questo è - vero a partire dal kernel 2.3.99-pre7, prima esistevano due chiamate - separate e la funzione poteva essere usata anche specificando il file di - dispositivo.} in quanto con il kernel 2.4.x è possibile montare lo stesso -dispositivo in più punti. Nel caso più di un filesystem sia stato montato -sullo stesso \itindex{mount~point} \textit{mount point} viene smontato quello -che è stato montato per ultimo. +\end{errlist}ed inoltre \errval{ENOTDIR}, \errval{EFAULT}, \errval{ENOMEM}, +\errval{ENAMETOOLONG}, \errval{ENOENT}, \errval{ELOOP} nel loro + significato generico.} +\end{funcproto} + +La funzione prende il nome della directory su cui il filesystem è montato e +non il file o il dispositivo che è stato montato,\footnote{questo è vero a + partire dal kernel 2.3.99-pre7, prima esistevano due chiamate separate e la + funzione poteva essere usata anche specificando il file di dispositivo.} in +quanto con il kernel 2.4.x è possibile montare lo stesso dispositivo in più +punti. Nel caso più di un filesystem sia stato montato sullo stesso +\itindex{mount~point} \textit{mount point} viene smontato quello che è stato +montato per ultimo. Si tenga presente che la funzione fallisce quando il filesystem è \textsl{occupato}, questo avviene quando ci sono ancora file aperti sul @@ -766,11 +810,14 @@ filesystem; in questo caso l'errore restituito è \errcode{EBUSY}. Linux provvede inoltre una seconda funzione, \funcd{umount2}, che in alcuni casi permette di forzare lo smontaggio di un filesystem, anche quando questo risulti occupato; il suo prototipo è: -\begin{prototype}{sys/mount.h}{umount2(const char *target, int flags)} - - La funzione è identica a \func{umount} per comportamento e codici di errore, - ma con \param{flags} si può specificare se forzare lo smontaggio. -\end{prototype} +\begin{funcproto}{ +\fhead{sys/mount.h} +\fdecl{umount2(const char *target, int flags)} +\fdesc{Smonta un filesystem.} +} +{La funzione è identica a \func{umount} per valori di ritorno e codici di + errore. } +\end{funcproto} Il valore di \param{flags} è una maschera binaria, e al momento l'unico valore definito è il bit \const{MNT\_FORCE}; gli altri bit devono essere nulli. @@ -786,25 +833,23 @@ Altre due funzioni specifiche di Linux,\footnote{esse si trovano anche su BSD, ma con una struttura diversa.} utili per ottenere in maniera diretta informazioni riguardo al filesystem su cui si trova un certo file, sono \funcd{statfs} e \funcd{fstatfs}, i cui prototipi sono: -\begin{functions} - \headdecl{sys/vfs.h} - \funcdecl{int statfs(const char *path, struct statfs *buf)} - \funcdecl{int fstatfs(int fd, struct statfs *buf)} - - Restituisce in \param{buf} le informazioni relative al filesystem su cui è - posto il file specificato. - - \bodydesc{Le funzioni ritornano 0 in caso di successo e -1 in caso di - errore, nel qual caso \var{errno} assumerà uno dei valori: +\begin{funcproto}{ +\fhead{sys/vfs.h} +\fdecl{int statfs(const char *path, struct statfs *buf)} +\fdecl{int fstatfs(int fd, struct statfs *buf)} +\fdesc{Restituiscono informazioni relative ad un filesystem.} +} +{Le funzioni ritornano $0$ in caso di successo e $-1$ per un errore, + nel qual caso \var{errno} assumerà uno dei valori: \begin{errlist} \item[\errcode{ENOSYS}] il filesystem su cui si trova il file specificato non - supporta la funzione. - \end{errlist} - e \errval{EFAULT} ed \errval{EIO} per entrambe, \errval{EBADF} per - \func{fstatfs}, \errval{ENOTDIR}, \errval{ENAMETOOLONG}, \errval{ENOENT}, - \errval{EACCES}, \errval{ELOOP} per \func{statfs}.} -\end{functions} + \end{errlist} ed inoltre \errval{EFAULT} ed \errval{EIO} per entrambe, + \errval{EBADF} per \func{fstatfs}, \errval{ENOTDIR}, \errval{ENAMETOOLONG}, + \errval{ENOENT}, \errval{EACCES}, \errval{ELOOP} per \func{statfs} nel loro + significato generico.} +\end{funcproto} + Queste funzioni permettono di ottenere una serie di informazioni generali riguardo al filesystem su cui si trova il file specificato; queste vengono @@ -6769,10 +6814,16 @@ programmi e librerie) di cui il server potrebbe avere bisogno. % LocalWords: forced allowed sendmail SYSLOG WAKE ALARM CLOCK BOOTTIME dqstats % LocalWords: REALTIME securebits GETSTATS QFMT curspace curinodes btime itime % LocalWords: QIF BLIMITS bhardlimit bsoftlimit ILIMITS ihardlimit isoftlimit -% LocalWords: INODES LIMITS USAGE valid dqi IIF BGRACE bgrace IGRACE igrace +% LocalWords: INODES LIMITS USAGE valid dqi IIF BGRACE bgrace IGRACE igrace is % LocalWords: Python Truelite Srl quotamodule Repository who nell' dall' KEEP % LocalWords: SECURE KEEPCAPS prctl FIXUP NOROOT LOCKED dell'IPC dell'I IOPRIO -% LocalWords: CAPBSET CLASS IDLE dcookie overflow DIFFERS +% LocalWords: CAPBSET CLASS IDLE dcookie overflow DIFFERS Virtual everything +% LocalWords: dentry register resolution cache dcache operation llseek poll +% LocalWords: multiplexing fsync fasync seek block superblock gapil tex img +% LocalWords: second linked journaled source filesystemtype unsigned device +% LocalWords: mountflags NODEV ENXIO dummy devfs magic MGC RDONLY NOSUID MOVE +% LocalWords: NOEXEC SYNCHRONOUS REMOUNT MANDLOCK NODIRATIME umount MNT statfs +% LocalWords: fstatfs fstab mntent ino bound orig new setpcap %%% Local Variables: %%% mode: latex diff --git a/gapil.tex b/gapil.tex index b237d38..378cc51 100644 --- a/gapil.tex +++ b/gapil.tex @@ -97,9 +97,9 @@ hyperfootnotes=false]{hyperref} \makeindex % Solo prima parte, scommentare -%\includeonly{macro,preambolo,pref,intro,process,prochand,fileintro,filedir, -% fileunix,filestd,system,system,signal,session,fileadv,ipc,errors, -% ringraziamenti,fdl} +% \includeonly{macro,preambolo,pref,intro,process,prochand,filedir, +% fileunix,filestd,system,signal,session,fileadv,ipc,errors, +% ringraziamenti,fdl} % Solo seconda parte e appendici, scommentare %\includeonly{macro,preambolo,network,socket,tcpsock,sockctrl,othersock, diff --git a/img/dir_links.dia b/img/dir_links.dia index 7b0faf1c962344975a4c4c1faa3b56f61964de62..c378a1ae68eac7c5392f6230a2aa2ce279013b34 100644 GIT binary patch literal 3069 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 diff --git a/img/dir_struct.dia b/img/dir_struct.dia index 0c8dd86fdb7d8e7cc1fac85354e19952ea138cb0..6dfaf989541a13b0425f60b3390d8d74e7a135f8 100644 GIT binary patch literal 3836 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 literal 3455 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 PFqRY%^sQ;W8o==%-MZ7o diff --git a/img/disk_struct.dia b/img/disk_struct.dia index 0c248c1505b83589d961a388391fb615eacf91d8..977b794474db23dc6092ea39b3f3318a3aab995a 100644 GIT binary patch literal 2389 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 ADF6Tf diff --git a/img/endianness.dia b/img/endianness.dia index ca45c9ebc5e421189356f3503b54b1ae9fc6e600..99ba5b94aa01c8c4d1dd207c82a0083cc4ce9577 100644 GIT binary patch literal 1907 zcmV-(2aNb1iwFP!000021MOW~Z=*OAe($e9jI>W3$J}f)opjXB>_{uEw9@YEb3_t1 zVTV8jq-|dIx33N4MnW!tX`MAvtA;w~aLhTMKOY~%=P$3bKzpWf;zwa$HvrT%8jhl| zA5QxE-#@;8B>I>8o6lq4`^0`Gu{YD$H^PK}>g&@qoqy`}US3{6uuQx(ib3EnKtg-} zdO_gzSfiePf1_#J0>)nI@pHvlFHK{AxJaoMdNbPBhu-MtB#sv0SkGG(?M6`$#oDtM z^z{!<*`fCeF})o*M`X{v2_44N`&lg-vcq-jh@R89EOs`J5}!3mm-D?Q6>|9Rtu{rg zgf$8$_a7eY5BVh(CpNMUU1+6}bmqkqKit>D`X*aRmc1(V% zG@xfH0&hvUpkY@87+Kj>?^6)i>)Ek@I5F_|aZ0;9#e zwE?l5I|8zxam;$UQf~f<0io2U>NaL9d#7EAkQaTU^)>kV@c8xHuiv3jLD7$lSydz{ z3e!W%`FZWhoB6@Aum8rTYhe-v41{$pNtYaBZK4+1r?2^iH zvbhwi6HGFjV-f_^&f4@kcm4d)U`CqvKrdvzkQwTr)Nq+FT}sYxfHvVTnZqvu&Lx}yt(!KtDP zQql$VCUk+cK^KV7^lDBQ7~ZYvf(uOXbfLCUiY{C=U2t2W3!nqSz&v=1Fu1^wf-tB` zjV=j;3!owlauNpeCWOIgT;0h=Z=uzl4CvO?od)EEo#M+o8`z}i!gbJvif}Pn2^XPs zArF{*0j~%c;VXEJtWqI!)gfcH5i(*^*m=n0DeNL-gy*muS*1eex;GItE|W8$;6-m2 zpshu37BrSjtKKS&-PNo#b40c1E$O6`@!dC>mD+7^2C;eUoHOKk?1D20Ph>Z;N^yqk z<_t~?oB;_A8MIYdzv2wCl-8?Ec88onRo2VP8AO-XR{vbNVYfh-(Aa-kLm*rs;17RBlaGH!GcW7{1s!+yARVCKjyEa@ zlyJYJ(Mma@D|p9`VXRRJ14N_&rJ+Ajh}0b-?YW|YBpD%zw7`>y;3Z77Rq?c%D9Tdu zr1oHUI8js;Px4L_?Khezx@`cUc=#)Jh^*jGmMtP`M`?%fr*??Q3xB3y`1{=t>4C*H zvvJ9%CHR4!7I4t51F&nFVY%6}pCHCHOB#4r4%kdFGvWf%4(%nWT^h=~YBVqF zKJ?(-ON0jOCZDnLRbFYU*^jIX2VNXUFZCxerz8&o8cvQ|W4CO~>HafIQ*F1K=k_(O zHZ`&*>j@0iOo5T5v-w|GhOCjw6?KulE_t3JChs{_R7DjU*X|ky8!ugan7ksX$BE3o8>1|^a| t-5>`g7eJXn$x@)yB`CQHlHLg<<)5?Hz24vKybt#N=06TO94J?Q004ZNkb(dJ literal 1494 zcmV;{1u6O;iwFP!000001MQs8bJ{o*$M5|sJkHFXQW@FUvP(!ON!wFrdf4un5mz?q8rfg_K(6cSVCTUFB zY-s=W^V`SJ{(Sx6DyI08{5RuxVaY34rv4h*b0La{G&WC@#HU)=OBid&X%)VjY|U_PU)G{p%{ifXtZ zbX~V@EyhNyBu1=oBUWfOTBclZOhsvFoTdrEtS~0{iqtigO>iRnW6vR2*T9qtkyd#z z#YtA_hVu-kdUu&|8Xo}hNzu!z)-)FL(Ppo5Jy5%;3lrO8Ox)9qjuW!;gEFDn#t#;@ zwJbDh-xZBXcBqA)7QVc4UY0rsTz@S7m0wP!yd`)`cxmkRQQEAsO-kB}&!*$Q$wZW1 z|0ytwF^{c})@{16AH`WpGmVG#kKTbANh@-AJ=AxZ?poUi!DUdl&y(SmcSW6L=NV3Z|egQ?A6IZ-OcJvJWIqAqW&%sCHus zRgvm(|DG9o|2V@n&Sug*oYeml6GqxbRwjyk`C@a%sRydY?SD*Z# z{v7%``BG2)fhS+2Nxu#9|Ggs74MPPRL1kt)sKBb& z4JxrRw;iPE=NT-+V7X1eGPF)Ez$(_sC0OPb%9?(j!7`nW_w>m!w$&JcaN`*+Gn)sqU^$uZB=gI^x- z)lwD>WQ3zuvR?g;U~D9#kld-)Jls2Kpph_>-7;A=en>Hqt$lctqkeLQ#Usply557u z(>5_m2%A;<)7Q6ksA}F@?61R-6MI0Y2oLjJ78Pi_&^M*WPu;94`Ykls`@J;TGpEV!QJQ=RR_$aWG8H!<$!CEo z$`6kjBo!Tq9Mt<72-_UW7vJ0XDd<0ON;KNRVkGlTd3qd3BLsMaN-UX-tKLmc8;JcjyKkWFo wFu14@_>nQ}CG7?FQT?#+EwJ}Gh5ZTTYnnwCfN50cqhD?Nd?!08Pa9z5oCK diff --git a/img/exec_rel.dia b/img/exec_rel.dia index 79c54ecc9d0f4619380fed90ad8651974d1570b8..fd76c3dd121e96458014d9e6fc44b24378e63b8e 100644 GIT binary patch literal 2025 zcmVibT0fgI>WN`w*U=30_`HzGl znXpC^{rXDNsvXQpM)af0ImYnPmc*K@9kUmL(j>TlK-yfJH z#Q%1Yb)G~T(&eomCsC6}3^k}+L=G;^fjuv0J-WW9!Qwva?%M#CxBGF=lQxT!IZX}? z#Q=s?14;8ddFg%paN9y&53kJa2r+pvha>FchCXH$1A(Q1z`h0ob6v888i?&N5hik( zg+Smyc3?a3TocLoL>yQRYHhl{(41oLw5zdk`bhn7)xpU3EKyyYD2}o=as0e?N0vdj zo$BA1cNV2_$S_ye(rn8i6}x)b#UJrH320IU{?qTHVWO>egOQnkESJ$*gdyrDbXN_# zRndk!s&S5}-Q|0aA7~i;1Tg}=h?cbdTcy!@*}`k~F`Kr<`84a;ui?zP@Og6iWZu$fo{!_C(X}@@n@}*-@>g~FZG{J?bQ-d+`iP|+)u@Db zCUJ@8w;ZeEgTwHI>?nb z1h8Q78DLz^0FR4WsSL2h46x!>Uv?pg8`pL?2uJ#S&WcSAFc#7~gZ3R0W(RW!((*;N_?z&eny}ZuTHBh{eMo z-hsh!6(1-VlnH~X`e3{;XkQ2ho&Je8{MH0mXyOfXXV2!(pL1E3HwOHZi+p~8ZCXSh zo{`VE0Pwjr=L?GlzJ~fK%o`N*OgTFN4Nzgu^}rTdVa_F(2I4pbJ&TKToDm?A&kR(P z3r8u5(k2dlrQwEVfls7Ruo@CcsQ;{K;A=o4l8R6e%RyuYn4Q#)w34h$2d{NK{D3k;nm9 zks<{}hg48O(HNl!4Uo4JjYXx19E>0Yrs72kj1DQGLZdOFQSTaXC?RlNiCjYjOuh%F z;zpftw2Y%TT@jyNG?6ABkyQNpRUlID+HsTVf!OD0ZRqCv)j1rIFn}&(h-3j{6o`}r zK23b0rEA5KL}OA-6;*0~jDTbf0!TtDjCdA}BM>Z7YL3ef@F?Ku$LE``iXX|sB2{QK zb~Nf;_U#BIN6r&1a)9HFhZL!(krWJaUK<#Uc>vzr-LHIQED-$9Aa|e#;6!gSV8J|AF$Z;?pmPoq2ha2$!`pOo3B`&lGpd42UiHqbHq HWsLv;a=+Sn literal 1918 zcmV-^2Z8t>iwFP!000001MQt#kDE9YfZyj=Ao|)m*w_X-ovGTDR()7$SK97#H$Jcz6KOQ^xWn1yQ&L8K3;e zqKHjIp^15WWf>^E8~Tb8f_J$#2XV^MB0KWE}@)RjMxMCsC3b_bj?G z-`$ljb5d6`*{Nqw-77Zdvy`(R{Z(7y<$32+z2a%J+T|+ALQy1tTD6Mw)KmQ5DpQxr zM4@IhoHQpC2sg^rW!(hMR?v&`MvbW4%Lyl^yO8-h40v`x6?e<@)U>FJO%C;Xv)r*AQypqJ z^io8`o_JbU|8?Wajrs=HRNCr=WcDxj^SXI|=PV9b8WFcJAceO3aHeRIpUs^s0v6sxP;JfBI##47JmGaKm`eFrmB3c$7k(BWBlS?-~19)-XXL zXr9MQ-hD%Pyk2(1GW(*LE{8l0K)M|)8pFY21r8Q(IasX1!D8)Te<=ssZ6Eef`@n!o zwhs)*i+xZ)RoKU%Mrr$aL-v8kun(lbKG2qZAQkqZ2WZ+p%s-7!azN z!SM79hBlDWK`%qczsAa-3_NU3J{sJJ5# zI^y#M&G6mp2|gtgd@Xg<6MUoKa1KSg4-RX<>L-%VRx%V=RQJ)|AhaGP!MRzP&MNOCLMVh4r~;_gvV{ z={GKDoLIyg114Bax)C?hjh7XS=yapHbfb<&#*aq&)+<Jg64;^ z(TrZMplmb)2QPR+CGd$vejotdVv5kd7LElL?;ObknpT_oQno}7X!L+a+JL4pD8Z); zXzbl{?Xd?meLNYw0E!MVtfP2B0jYW76_X2-ZOId^eLNYwzz$mS^EcLW0>@I7!Lg1= z;aEC{qmd#RDP#ar=+DXFKr#|isMIxAWfo_%XUrqYg$U7!V08#_h9`3HdmCV>iJT(faIYtf2^_%&hSHei8e!=j~n zniW!6F~Sca2(b`jSZ>TfMYBslZ%Z?LWKIofCg9NX z97=%UytPQ<6^~K|FBNrwD;F2#KH3TxE^x}E%EbVK$M-8ey`h8|yK1PZA@i4lkUP>I z70Eki1vi{(<17WpRI(i- zsgEiU!3Py0AT9E~0P>YUwOaXAlvFX?O+yb{h1iAR<7TDG(4wx$0BuX2b zMCqj@Cx38ZqOah`KHX*n|KV#A1#fq&DAij$QKkNn^=bVH9 E0ET0wPyhe` diff --git a/img/fileperm.dia b/img/fileperm.dia index 47b6ee82572fd51d77689888f15e53ee291547ac..e6a24a5ba89e7dee1927fd2c7aa8b7e1a72777c4 100644 GIT binary patch literal 1874 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 O4E_g@pnGywhyVanQ;rw_ diff --git a/img/filesys_struct.dia b/img/filesys_struct.dia index c08ed10d3f49d733d2b3915a880e2f3dda20eaec..a16de8aed28ef21c4613972d37d0c45b9ac333f5 100644 GIT binary patch literal 5448 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 literal 5047 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 literal 1655 zcmV--28j6|iwFP!000001MOT}bE7sCe$TJ)u&=Bv35m;Qlbvp-Z=Gppw(lMsD>f|# z56DTJhyM18OV$Pin2WM@7iZ!bgM2=Y^l`p(#7RDXdD;52Cl5%9e|h}ryK*Z1AI7&O=JZ)USo11p!i z$+7&X%X#E2_ngfFcgyayrTg&DItur}O3Oy&;~qjkjAl=+f2VzTOkdhOH#0BTX|TO> zcPuKK-R{EJ6GQl6R~b@cCwV^^laGqUpkRIf;TQ5DyQKWU(U$B&YeD$djn-aJ#fg~f zXA^;ejWK?khwczd^$@;#h)6wz7cX{U#3R?^RhVTM`pgY7Bp&Tqf1LQi^#x^`TtWS< zKYE;pE!Y3(`tdmqWQV`sJzej_b>yv@Z^Xig8Y|DK0~Tkg?3b`9Vo+t8cH#Hs zv;d?KQXK<`9m6coKy_*BV3x}=N+jHIgSF2xBojCkQ>sHiOo!Ye1Wd!AIsph`==1|# zve!lGOfMI!LmeGAokkEqi|R;tVk6Q#QYZafdI+O{MT>+66{lFR-)8n<1zdWr3$V}- zwut$`XZ5hSpXrqwZ+sT4`KHQ|x2On#(a(6y-H0#TC<>oPzwi^=i*^U>;UKAejDYbF z27$Q!M68HQ#*SxZ8xdoYNF;&@4@EF>wAu0OomM5dUHO?*gbr2_sEe?!QbjC4ED=e}TthIRm?W6jAt6s&Q5ElB zKLRkxNKY9lGi;KPQ6fS^Ic$y)6&!^j!AYwTp&?1_D{>4`oD!AgZ_yn&MN#8`q^1Fm zMHSY*<@&W#@rxDLz71rvu59nc#u*Z_v%ME&Dd%6O?H6P<@4pBoRZGMnn=s_Z@zB05 z9@-Yl_5h)i@sM899w2Sz;HA>9ya(Nzf624DUBQ>yhjZbJgp5wxbIB?lC90FJ7?P}5 zr>D9VQr7JEfFyrPp3ga!z!S7YFlUT42wz_DDRfv`0#=gWp#YKuyWBuBpr>OKJ})F) zO@sPJs%-C9b|N?izsdK+Gt1IGXwuTOy*TXyRV`3E5wRbrtXw^_VC@4}SG2a3tz5-lW^5Mz&j;WO!yF!&4=qgFKsrvs;_0tYfCB^`t9+v~Q-l zb4I=R<1uc)bPtFEto$ytfo(&glXU+XCtYVysJ?(sHlXn&`ai4a%Lq8B{l%%hF^<|> z@1yqSQSF^~QhRGs`-?4;$w*2mUP+T6rthGZqDD5TZUGa$$)zde(gp-wnOv@;{c@7a z5#>_K!bvj6mdx&bLx_&ifNCgjKuzD%4pgeT1J#&%hg#Li9HRx5sBJ-|09n`;>zTI? znZU*tPGGO2e+W#CLqqyc$<#RXo{dAux~k40auJ%7Wpw z^`GWQ7-fBbf-o1=e~MvC|EY7q{ih)F0020b BLpuNf diff --git a/img/proc_beginend.dia b/img/proc_beginend.dia index 181bf26b6974554abba296fc15d1fa77a8e65019..692e3a2834fe967c9751bedc6d8babc79c5335f0 100644 GIT binary patch literal 2519 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 literal 2374 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 diff --git a/img/struct_sys.dia b/img/struct_sys.dia index 64b5d955ab60d9c1580a9d9bbe472a51831eb725..2fe468550a12a67de8905158427b730fb1150577 100644 GIT binary patch literal 2323 zcmV+u3GDVCiwFP!000021MOW~Z{xNSe&1gqcwcuJkrZ`lniTEgTne;32dBH|HK1+A zR#%n`N=eo){p}?!Ik9!IEm2gglnD~V3e6GenQuN0hokR*__m6yN5<1IiEkzl*b|Gz zvt%B|i<`-p&;R`BPky+4_x(Ji--(|Erz=amBTnV3o5?cE*56%SJv}{vXp_<`;UEeh zK+3NEq)|k#M5C+8?K{ib?_f?dDz6n+X_oPD`j9azrYm+cnbO(U1y3I0`6O>uw3{VS z!mURd-Avx!Z@(s2MK@Om{T%6gO&4s+8U5PawJpAapi9?l#>?HV)=3(QCfR0PY0}V- z{JqzvXqAda@#6OVkIwu2mWm56ebwD)qmXPx`67&~a>U$3`9vV#BZS0ckiZXY&+*`H zPTGr`4l6DiRvaHzT$tXi6P|GzW>t~XB#9V}bEz4BVBO`UGa3mMJ2otZQQU`FmYlf% zdm5$Z3?RS!Y;A2VcfrH?al<`m(a_6NIM0@M-;Pa}4WNDar7(fHyv<X-8Myzgx zVVo)J!>;>HKi!uzVoX!_(`mVPE(Sp3MZ|Im z7z8kYA26`7kFJF*-wvcm7y8|#&XPF3WAS`DidJK*Z-N2rb|dk_YPK%Rud~)RoeH1B z?hXyC#>A%g^1GXaG^0GbqnsyCWf4pasrb~C`@V}K!#05XOC zX_~_4o`;*j7m>QAPui@21%X{@MXPuJv6ceuBti;s%Mt-@D419;|E{s9O0W6l97DT< zDpUnk1YFIaihxsqDnaNP0dFu+t&FX{i2zmT7+5v1YGC!^VAX4c)#f+D-J1{J>-G)F zKPBI45E-c=vJJ=w2#7{Rwt?eI8REAfxgI1E0#VRWb0W49XvO1dysWQ5ZAF~WOQ)=t zNI}+;g^Oj@EDQn{Iz3q3G~si`Pn(>Lg3?zvd7)5ve%iHo_wu_V5-$aY)Wn5P2fgYS z-|bBDGy9h9*(5A%68FK9kXD-%DivT)8cE<^V?b;d5h2pWsH4=Ep_K?{jA#@b(SEPR9GuZ*h;u|0q!p8?6q2DJk=&jH==K)cFKDX;^ByTaMc%+ z>uS`eT!Qd%LZhJVNz&;OZv@`$LAV+#UDFwRO%G=udbs~3D;f{s;EqsFJr1s-iEqKd z*>BdtH2{*^419g>|kW#JDx^N}0xKb)o!k7Co{o zoY6PAOwN_jgUBqEH7%8q#!TGO`3Ar5WZEVS>?L(iHwGf$5Qugdh=Aw#-e@rJ|GygW z8ze?(z;CSJ2klovKjkz*M?3amfp!J($wOUZLA^N-9}Vpr0Qnq)d*j7Ds2TT~PPLML zR=#=z!L~fsY6BPhF!0367t4dK5(%{*Y^{v0zKK|xn`5o!SgSeKdTGa61BFwqFwlIg zwF#45bxhV>zr~jITkOE!Rd9g=R&ar*E4V;Y!Np**!Q=}qH9$01aB0|V?Ikf850H9< z59$T@kmyc5!f&Qtz|lhsZ(!?H*3e_*Ep5H_lcx+ktqah=-)1KhnTdqt{)3FgU4H28 zU%!2^J_(vR<&p;Xnd2ogpyai%_`Y{xD z5MqD;a&j&phyelt$yvg29t01w?l~fyp0eMH_lbmUQ%{^>_{uLNJkA3=WZh z6K4b!P}e+}u{2H0;T`>Fwxt#l+dOVyjK_D%DUJR>PeAh2lc%8ehtk;vyV&kG=w=s6 z12XKwu!}=>;rH{@N3HBaZdB~ph1{nw?82~%S}io}Vx;WCdmVNWs8^?RwLeFE7rStV zh+SY4yD;pcH+F$-^+&g8k6qxs*o9+a7lvIlX`x{kBV`xC>y#eBu%Ci+dY4wtLFp0s z$e5u@k5oq2lwxE`kC8O8z$bx$ehRDt-Ja!Bk t8#Fd(e2HjWF0j`Qjt%14008EJfN=l- literal 2170 zcmV-=2!;0_iwFP!000001MOW~bDKC6e($ef+}Bh_H!e++&TeOKGkcqDyRRA9mTk5e zJOU^2%l`J2z=9YGu*TDgzY7p@sZ%{TeWFhe))bA(@QQ6%`TR4638a$dRb^vVMqPkX|rjS z$VSoZ`t5h*ZGKCe3tL-dH(Kc=T`(~VqM{!;Heo&x2zUsghjBRF#Yn%4P`?YI-$jtz zEMt)h7NkWtqc{#Zi*iq?Sn=k5k}(Tq$UM~**xdRwNYl9H{--QVj_E*t`7wJ=&BU1q zCQm2gUW*DVcfll`-`qbnTsCMiV7dLZHv6|h5{yD#)`K8QTfg5A=GWbrKYWKWMBcu< zWklrGDj|R3amwlGkUv`m6Q0zB+J2h~OY=>$Vcn=7wmWuU@=FHgY)c7QNCcCs!5{Yi_#E~~T9fcs7@%eR z7)1oY3j)w#pNptbWqvd|v@T=^STqZH?g0b;0t1^~5`dK}+RWEDj-neLO|pAGsYm5a z@NW8_awE}dFdH5CKOs6e2(r6guQmmbHCgVWCUqO(YgVV$jf_p+UpW z(a^0#!|E5qhZpa^*6A8azmM-rfE2X_QX9|<2&hINwE^*z5BXD;l`f-* z%66dPe&aHc!wMbu38AD)d5fd8%$>S!P1zy{*Yd8o2&MxoN!JR!y}{&xl8lUZRcb^){cs|CToid8ZI}uYq^$=jWXYoN&6q38)z-R5>b%$CfaG zq&svrwW&c0%}4`CbQ}>&#;W39`dYJr%axiJS*f`>y=$H z@-^of2Iycxg7!RX)hUx_W}aD0G}NBZkc>%JYvJhGp6?MA`m%DQKD3of@8!=mlkuES zRv{Nw&l5}*CB^yW&pf>4X)tE5Vs=@GJ2Su33KX3zUD68_2oT4HPKFZ*xH!j*Gr)(H}sxUb{pz!-HB_LW!Hf0|AH-iq8WcCL*{sHH405#|9w!TiXa}H&YF* z+S!E-95u}fFg1+XBT2(0Ov`10h+yCu{ z?f{|$~B9M!bpm1^GpU-6Krlf{U*heZ!~Z`Y~^sqRG&_f|F%U(+L^Zq_1dR(@?nU9}Kgt$BbhL27@%8Av-n{r=VZBx}8qU}9}nA?jL% zXjGoYDvyGq1zH|hAIe&4L zBILF>)~}qiHFU0&xw|}&vYfq3Qku3n`+!bHC-RTFbqsuxU~%?xU1^ z>*=?Nt0Dy-6_L%Hl@algRNTZ}6&=?R^3%j$PRb{MOMYdCnLA@@1iJtr1Yj>rEzAB5 zQ>)|bdSdFA5lWf-hnbFvHgR*}5bu4O_oR zw#Hq65C*gtw#I;L*qQ*^7hAXPoMG$Nz}BRTL?OL!H3puomMJQ(CNf*pGQ~6F>Pe7{ zW5d+?nVJ}$emOi{akMh+M*A+F>aIuorv3%VwQonQs_94jZrM4*(a*@yCqK(>@kv~r z)dNm9I=jjc+Cx&hPPSWtWI{X1rtjpuN`j?`$2>_)RnUvtUWiLm7reN-!0k$DCw(dH zW~U{f z>=WZ?A0KR6b6P^aaK)UKV0QVMUB2D#@@?~}w(xmQOTeg$L#gzhBJ1TSO7g>CbfYM# w!%$)n)F7xqP#p*gVH*g=Z6P%OJ!ESxuHWRp$bU1z7T0h71C%XNwzrM|0EV+L1ONa4 diff --git a/img/vfs.dia b/img/vfs.dia index 1052b7995325bf2c2f7706e7202982d56b4a7a29..2e8cc8ceca9bb1a57f1b095a59d6f163be3bd8bd 100644 GIT binary patch literal 3020 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