X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=fileintro.tex;h=e0c82cf212399126ee46da7d1ea69a2daf06bde2;hp=bc11f826886a4d1a7938128af89266d8e0005a69;hb=376c897446e3a3c24c3f45df9d6c320f3eef2e09;hpb=70860564e1de946ab8d681bb41c601ba77721709 diff --git a/fileintro.tex b/fileintro.tex index bc11f82..e0c82cf 100644 --- a/fileintro.tex +++ b/fileintro.tex @@ -1,6 +1,6 @@ %% fileintro.tex %% -%% Copyright (C) 2000-2007 Simone Piccardi. Permission is granted to +%% Copyright (C) 2000-2009 Simone Piccardi. Permission is granted to %% copy, distribute and/or modify this document under the terms of the GNU Free %% Documentation License, Version 1.1 or any later version published by the %% Free Software Foundation; with the Invariant Sections being "Prefazione", @@ -91,7 +91,7 @@ oggetto del filesystem, compresa un'altra directory, si ottiene naturalmente un'organizzazione ad albero inserendo nomi di directory in altre directory. Un file può essere indicato rispetto alla directory corrente semplicemente -specificandone il nome\footnote{Il manuale delle \acr{glibc} chiama i nomi +specificandone il nome\footnote{il manuale delle \acr{glibc} chiama i nomi contenuti nelle directory \textsl{componenti} (in inglese \textit{file name components}), noi li chiameremo più semplicemente \textsl{nomi} o \textsl{voci}.} da essa contenuto. All'interno dello stesso albero si @@ -118,16 +118,15 @@ torneremo in sez.~\ref{sec:file_chroot}) equivale alla directory radice dell'albero dei file: in questo caso si parla di un \textsl{pathname assoluto} \itindsub{pathname}{assoluto}. Altrimenti la ricerca parte dalla directory corrente (su cui torneremo in -sez.~\ref{sec:file_work_dir}) ed il pathname è detto \textsl{pathname - relativo} \itindsub{pathname}{relativo}. +sez.~\ref{sec:file_work_dir}) ed il pathname è detto +\itindsub{pathname}{relativo} \textsl{pathname relativo}. -I nomi \file{.} e \file{..} hanno un significato speciale e vengono inseriti -in ogni directory: il primo fa riferimento alla directory corrente e il -secondo alla directory \textsl{genitrice} (o \textit{parent directory}) cioè -la directory che contiene il riferimento alla directory corrente; nel caso la -directory corrente coincida con la directory radice, allora il riferimento è a -se stessa. -\itindend{pathname} +I nomi ``\file{.}'' e ``\file{..}'' hanno un significato speciale e vengono +inseriti in ogni directory: il primo fa riferimento alla directory corrente e +il secondo alla directory \textsl{genitrice} (o \textit{parent directory}) +cioè la directory che contiene il riferimento alla directory corrente; nel +caso la directory corrente coincida con la directory radice, allora il +riferimento è a se stessa. \itindend{pathname} \subsection{I tipi di file} @@ -168,22 +167,22 @@ dispositivo sottostante effettua le operazioni di I/O.\footnote{in sostanza i \hline \hline \textit{regular file} & \textsl{file regolare} & - un file che contiene dei dati (l'accezione normale di file) \\ + Un file che contiene dei dati (l'accezione normale di file).\\ \textit{directory} & \textsl{cartella o direttorio} & - un file che contiene una lista di nomi associati a degli - \index{inode} \textit{inode} (vedi sez.~\ref{sec:file_vfs}). \\ + Un file che contiene una lista di nomi associati a degli + \index{inode} \textit{inode} (vedi sez.~\ref{sec:file_vfs}).\\ \textit{symbolic link} & \textsl{collegamento simbolico} & - un file che contiene un riferimento ad un altro file/directory \\ + Un file che contiene un riferimento ad un altro file/directory.\\ \textit{char device} & \textsl{dispositivo a caratteri} & - un file che identifica una periferica ad accesso a caratteri \\ + Un file che identifica una periferica ad accesso a caratteri.\\ \textit{block device} & \textsl{dispositivo a blocchi} & - un file che identifica una periferica ad accesso a blocchi \\ + Un file che identifica una periferica ad accesso a blocchi.\\ \textit{fifo} & ``\textsl{coda}'' & - un file speciale che identifica una linea di comunicazione software + Un file speciale che identifica una linea di comunicazione software unidirezionale (vedi sez.~\ref{sec:ipc_named_pipe}).\\ \textit{socket} & ``\textsl{presa}''& - un file speciale che identifica una linea di comunicazione software - bidirezionale (vedi cap.~\ref{cha:socket_intro}) \\ + Un file speciale che identifica una linea di comunicazione software + bidirezionale (vedi cap.~\ref{cha:socket_intro}).\\ \hline \end{tabular} \caption{Tipologia dei file definiti nel VFS} @@ -318,6 +317,9 @@ Linux, l'\acr{ext2} (e derivati). \subsection{Il \textit{Virtual File System} di Linux} \label{sec:file_vfs} +% 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} In Linux il concetto di \textit{everything is a file} è stato implementato @@ -447,25 +449,25 @@ tab.~\ref{tab:file_file_operations}. \textbf{Funzione} & \textbf{Operazione} \\ \hline \hline - \textsl{\code{open}} & apre il file (vedi sez.~\ref{sec:file_open}). \\ - \textsl{\code{read}} & legge dal file (vedi sez.~\ref{sec:file_read}).\\ - \textsl{\code{write}} & scrive sul file (vedi + \textsl{\code{open}} & Apre il file (vedi sez.~\ref{sec:file_open}).\\ + \textsl{\code{read}} & Legge dal file (vedi sez.~\ref{sec:file_read}).\\ + \textsl{\code{write}} & Scrive sul file (vedi sez.~\ref{sec:file_write}).\\ - \textsl{\code{llseek}} & sposta la posizione corrente sul file (vedi - sez.~\ref{sec:file_lseek}). \\ - \textsl{\code{ioctl}} & accede alle operazioni di controllo + \textsl{\code{llseek}} & Sposta la posizione corrente sul file (vedi + sez.~\ref{sec:file_lseek}).\\ + \textsl{\code{ioctl}} & Accede alle operazioni di controllo (vedi sez.~\ref{sec:file_ioctl}).\\ - \textsl{\code{readdir}}& legge il contenuto di una directory \\ - \textsl{\code{poll}} & usata nell'I/O multiplexing (vedi - sez.~\ref{sec:file_multiplexing}). \\ - \textsl{\code{mmap}} & mappa il file in memoria (vedi - sez.~\ref{sec:file_memory_map}). \\ - \textsl{\code{release}}& chiamata quando l'ultimo riferimento a un file - aperto è chiuso. \\ - \textsl{\code{fsync}} & sincronizza il contenuto del file (vedi - sez.~\ref{sec:file_sync}). \\ - \textsl{\code{fasync}} & abilita l'I/O asincrono (vedi - sez.~\ref{sec:file_asyncronous_io}) sul file. \\ + \textsl{\code{readdir}}& Legge il contenuto di una directory.\\ + \textsl{\code{poll}} & Usata nell'I/O multiplexing (vedi + sez.~\ref{sec:file_multiplexing}).\\ + \textsl{\code{mmap}} & Mappa il file in memoria (vedi + sez.~\ref{sec:file_memory_map}).\\ + \textsl{\code{release}}& Chiamata quando l'ultimo riferimento a un file + aperto è chiuso.\\ + \textsl{\code{fsync}} & Sincronizza il contenuto del file (vedi + sez.~\ref{sec:file_sync}).\\ + \textsl{\code{fasync}} & Abilita l'I/O asincrono (vedi + sez.~\ref{sec:file_asyncronous_io}) sul file.\\ \hline \end{tabular} \caption{Operazioni sui file definite nel VFS.} @@ -589,21 +591,33 @@ di \index{inode} inode. 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 \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 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 \file{..} di \file{img}. +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}. + +% 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{Il filesystem \textsl{ext2}} +\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: @@ -679,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: