X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=fileintro.tex;h=0632b7a8fade79cc6f1094d378e1b91dd3a69e7a;hp=2dce07e878e8190bf31b8c060e5bbd8e42e35212;hb=01e363536700694f191264cf2c2955b31116d1e3;hpb=117a739ee3013118cfa864628d4b41288a9d1dc9 diff --git a/fileintro.tex b/fileintro.tex index 2dce07e..0632b7a 100644 --- a/fileintro.tex +++ b/fileintro.tex @@ -25,13 +25,13 @@ delle modalit \section{L'architettura generale} \label{sec:file_access_arch} -Per poter accedere ai file il kernel deve mettere a disposizione dei programmi -le opportune interfacce che consentano di leggerne il contenuto; il sistema -cioè deve provvedere ad organizzare e rendere accessibile in maniera opportuna -l'informazione tenuta sullo spazio grezzo disponibile sui dischi. Questo viene -fatto strutturando l'informazione sul disco attraverso quello che si chiama un -\textit{filesystem} (vedi \ref{sec:file_arch_func}), essa poi viene resa -disponibile ai processi attraverso quello che viene chiamato il +Per poter accedere ai file, il kernel deve mettere a disposizione dei +programmi le opportune interfacce che consentano di leggerne il contenuto; il +sistema cioè deve provvedere ad organizzare e rendere accessibile in maniera +opportuna l'informazione tenuta sullo spazio grezzo disponibile sui dischi. +Questo viene fatto strutturando l'informazione sul disco attraverso quello che +si chiama un \textit{filesystem} (vedi \ref{sec:file_arch_func}), essa poi +viene resa disponibile ai processi attraverso quello che viene chiamato il \textsl{montaggio} del \textit{filesystem}. % (approfondiremo tutto ciò in \secref{sec:file_arch_func}). @@ -118,7 +118,7 @@ questa sia la directory radice, allora il riferimento \subsection{I tipi di file} \label{sec:file_file_types} -Come detto in precedenza in Unix esistono vari tipi di file; in Linux questi +Come detto in precedenza, in Unix esistono vari tipi di file; in Linux questi sono implementati come oggetti del \textit{Virtual File System} (vedi \secref{sec:file_vfs_work}) e sono presenti in tutti i filesystem unix-like utilizzabili con Linux. L'elenco dei vari tipi di file definiti dal @@ -170,7 +170,7 @@ per il cosiddetto ``accesso diretto'' come nel caso del VMS.\footnote{con i ha nulla a che fare con questo, trattandosi solo di operazioni fatte senza passare attraverso un filesystem.} -Una seconda differenza è nel formato dei file ASCII; in Unix la fine riga è +Una seconda differenza è nel formato dei file ASCII: in Unix la fine riga è codificata in maniera diversa da Windows o Mac, in particolare il fine riga è il carattere \texttt{LF} (o \verb|\n|) al posto del \texttt{CR} (\verb|\r|) del Mac e del \texttt{CR LF} di Windows.\footnote{per questo esistono in Linux @@ -335,21 +335,22 @@ strato intermedio che il kernel usa per accedere ai pi mantenendo la stessa interfaccia per i programmi in user space. Esso fornisce un livello di indirezione che permette di collegare le operazioni di manipolazione sui file alle operazioni di I/O, e gestisce l'organizzazione di -queste ultime nei vari modi in cui diversi filesystem le effettuano, +queste ultime nei vari modi in cui i diversi filesystem le effettuano, permettendo la coesistenza di filesystem differenti all'interno dello stesso albero delle directory. -Quando un processo esegue una system call che opera su un file il kernel +Quando un processo esegue una system call che opera su un file, il kernel chiama sempre una funzione implementata nel VFS; la funzione eseguirà le -manipolazioni sulle strutture generiche e utilizzerà poi la chiamata alla +manipolazioni sulle strutture generiche e utilizzerà poi la chiamata alle opportune routine del filesystem specifico a cui si fa riferimento. Saranno queste a chiamare le funzioni di più basso livello che eseguono le operazioni -di I/O sul dispositivo fisico, secondo lo schema riportato in \nfig. +di I/O sul dispositivo fisico, secondo lo schema riportato in +\figref{fig:file_VFS_scheme}. \begin{figure}[htb] \centering \includegraphics[width=7cm]{img/vfs} - \caption{Schema delle operazioni del VFS} + \caption{Schema delle operazioni del VFS.} \label{fig:file_VFS_scheme} \end{figure} @@ -475,12 +476,12 @@ operazioni previste dal kernel In questo modo per ciascun file diventano possibili una serie di operazioni (non è detto che tutte siano disponibili), che costituiscono l'interfaccia -astratta del VFS. Qualora se ne voglia eseguire una il kernel andrà ad -utilizzare la opportuna routine dichiarata in \var{f\_ops} appropriata al tipo +astratta del VFS. Qualora se ne voglia eseguire una, il kernel andrà ad +utilizzare l'opportuna routine dichiarata in \var{f\_ops} appropriata al tipo di file in questione. In questo modo è possibile scrivere allo stesso modo sulla porta seriale come -su un file di dati normale; ovviamente certe operazioni (nel caso della +su normale un file di dati; ovviamente certe operazioni (nel caso della seriale ad esempio la \code{seek}) non saranno disponibili, però con questo sistema l'utilizzo di diversi filesystem (come quelli usati da Windows o MacOs) è immediato e (relativamente) trasparente per l'utente ed il @@ -493,9 +494,9 @@ programmatore. Come già accennato in \secref{sec:file_organization} Linux (ed ogni sistema unix-like) organizza i dati che tiene su disco attraverso l'uso di un filesystem. Una delle caratteristiche di Linux rispetto agli altri Unix è -quella di poter supportare grazie al VFS una enorme quantità di filesystem +quella di poter supportare, grazie al VFS, una enorme quantità di filesystem diversi, ognuno dei quali ha una sua particolare struttura e funzionalità -proprie. Per questo per il momento non entreremo nei dettagli di un +proprie. Per questo, per il momento non entreremo nei dettagli di un filesystem specifico, ma daremo una descrizione a grandi linee che si adatta alle caratteristiche comuni di qualunque filesystem di sistema unix-like. @@ -512,7 +513,8 @@ lista degli inodes e lo spazio a disposizione per i dati e le directory. \begin{figure}[htb] \centering \includegraphics[width=12cm]{img/disk_struct} - \caption{Organizzazione dello spazio su un disco in partizioni e filesystem} + \caption{Organizzazione dello spazio su un disco in partizioni e + filesystem.} \label{fig:file_disk_filesys} \end{figure} @@ -525,7 +527,7 @@ esemplificare la situazione con uno schema come quello esposto in \nfig. \begin{figure}[htb] \centering \includegraphics[width=12cm]{img/filesys_struct} - \caption{Strutturazione dei dati all'interno di un filesystem} + \caption{Strutturazione dei dati all'interno di un filesystem.} \label{fig:file_filesys_detail} \end{figure} @@ -553,7 +555,7 @@ ricordare sempre che: 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}, ed in realtà non cancella affatto i dati del - file, ma si limita a eliminare la relativa voce da una directory e + file, ma si limita ad 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} @@ -561,25 +563,25 @@ ricordare sempre che: riferimenti ad \textit{inodes} 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. - -\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 \cmd{mv} attraverso la funzione - \func{rename}). + +\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 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}). \end{enumerate} Infine è bene avere presente che, essendo file pure loro, esiste un numero di -riferimenti anche per le directory; per cui se a partire dalla situazione +riferimenti anche per le directory; per cui, se a partire dalla situazione mostrata in \curfig\ creiamo una nuova directory \file{img} nella directory -\file{gapil}: avremo una situazione come quella in \nfig, dove per chiarezza +\file{gapil}, avremo una situazione come quella in \nfig, dove per chiarezza abbiamo aggiunto dei numeri di inode. \begin{figure}[htb] \centering \includegraphics[width=12cm]{img/dir_links} - \caption{Organizzazione dei link per le directory} + \caption{Organizzazione dei link per le directory.} \label{fig:file_dirs_link} \end{figure} @@ -587,8 +589,8 @@ La nuova directory avr è 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 riferiementi di almeno tre, in quanto +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}. @@ -598,11 +600,11 @@ adesso sar 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, estendibili a 1012), una dimensione fino a 4~Tb. +file lunghi (256 caratteri, estendibili a 1012) con una dimensione massima di +4~Tb. -Oltre alle caratteristiche standard \acr{ext2} fornisce alcune estensioni che -non sono presenti sugli altri filesystem Unix, le cui principali sono le -seguenti: +Oltre alle caratteristiche standard, \acr{ext2} fornisce alcune estensioni che +non sono presenti sugli altri filesystem Unix. Le principali sono le seguenti: \begin{itemize} \item i \textit{file attributes} consentono di modificare il comportamento del kernel quando agisce su gruppi di file. Possono essere settati su file e