X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=intro.tex;h=500181c217673a8d5f322140dd5cf604c6b2f736;hp=1e9423b19e35a7b2d6e2c310bca7d572e0139794;hb=dcf2c2df897955ff3503a7c426025457ab456fd7;hpb=94b4d603807121b40eef06d22d2b6cd6e06ec7fd diff --git a/intro.tex b/intro.tex index 1e9423b..500181c 100644 --- a/intro.tex +++ b/intro.tex @@ -1,6 +1,6 @@ %% intro.tex %% -%% Copyright (C) 2000-2011 Simone Piccardi. Permission is granted to +%% Copyright (C) 2000-2012 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 "Un preambolo", @@ -340,12 +340,12 @@ la cui corrispondenza ad un nome espresso in caratteri è inserita nei due file \conffile{/etc/passwd} e \conffile{/etc/group}.\footnote{in realtà negli sistemi più moderni, come vedremo in sez.~\ref{sec:sys_user_group} queste informazioni possono essere mantenute, con l'uso del - \itindex{Name~Service~Switch} \textit{Name Service Switch}, su varie + \itindex{Name~Service~Switch~(NSS)} \textit{Name Service Switch}, su varie tipologie di supporti, compresi server centralizzati come LDAP.} Questi identificativi sono l'\textit{user identifier}, detto in breve -\textsl{user-ID}, ed indicato dall'acronimo \acr{uid}, e il \textit{group +\textsl{user-ID}, ed indicato dall'acronimo \ids{UID}, e il \textit{group identifier}, detto in breve \textsl{group-ID}, ed identificato dall'acronimo -\acr{gid}, torneremo in dettaglio su questo argomento in +\ids{GID}, torneremo in dettaglio su questo argomento in sez.~\ref{sec:proc_perms}. Il kernel conosce ed utilizza soltanto questi valori numerici, i nomi ad essi associati sono interamente gestiti in \textit{user space} con opportune funzioni di libreria, torneremo su questo @@ -360,7 +360,7 @@ di identificazione. Infine in ogni sistema unix-like è presente uno speciale utente privilegiato, il cosiddetto \textit{superuser}, il cui username è di norma \textit{root}, ed -il cui \acr{uid} è zero. Esso identifica l'amministratore del sistema, che +il cui \ids{UID} è zero. Esso identifica l'amministratore del sistema, che deve essere in grado di fare qualunque operazione; per l'utente \textit{root} infatti i meccanismi di controllo cui si è accennato in precedenza sono disattivati.\footnote{i controlli infatti vengono eseguiti da uno pseudo-codice @@ -424,12 +424,12 @@ operazioni interne del kernel per la manipolazione sui file con le \textit{system call} relative alle operazioni di I/O, e gestisce poi l'organizzazione di dette operazioni nei vari modi in cui i diversi filesystem le effettuano, permettendo la coesistenza di filesystem differenti all'interno -dello stesso albero delle directory. Torneremo su questa interfaccia generica -fornita dal VFS in sez.~\ref{sec:file_vfs_work}. +dello stesso albero delle directory. Approfondiremo il funzionamento di +interfaccia generica fornita dal VFS in sez.~\ref{sec:file_vfs_work}. In sostanza quello che accade è che quando un processo esegue una \textit{system call} che opera su un file, il kernel chiama sempre una -funzione implementata nel VFS; la funzione eseguirà le manipolazioni sulle +funzione implementata nel VFS. La funzione eseguirà le manipolazioni sulle strutture generiche e utilizzerà poi la chiamata alle opportune funzioni 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 @@ -515,6 +515,8 @@ nomi che indicano le directory che lo compongono. Dato che la directory radice sta in cima all'albero, essa viene indicata semplicemente con il \textit{pathname} \file{/}. +\itindbeg{pathname~resolution} + Un file può essere indicato rispetto ad una directory semplicemente specificandone il nome, il manuale della \acr{glibc} chiama i nomi contenuti nelle directory \textsl{componenti} (in inglese \textit{file name @@ -538,9 +540,10 @@ eseguito una \func{chroot} (funzione su cui torneremo in sez.~\ref{sec:file_chroot}) è la stessa per tutti i processi ed 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 di lavoro corrente del processo (su cui -torneremo in sez.~\ref{sec:file_work_dir}) ed il \textit{pathname} è detto -\itindsub{pathname}{relativo} \textsl{pathname relativo}. +ricerca parte dalla \index{directory~di~lavoro} directory di lavoro corrente +del processo (su cui torneremo in sez.~\ref{sec:file_work_dir}) ed il +\textit{pathname} è detto \itindsub{pathname}{relativo} \textsl{pathname + relativo}. Infine i nomi di directory ``\file{.}'' e ``\file{..}'' hanno un significato speciale e vengono inseriti in ogni directory quando questa viene creata (vedi @@ -549,14 +552,15 @@ corrente e il secondo alla directory \textsl{genitrice} (o \textit{parent directory}) cioè la directory che contiene il riferimento alla directory corrente. -In questo modo con ``\file{..}'' si può usare un \textsl{pathname relativo} -per indicare un file posto al di sopra della directory corrente, tornando -all'indietro nell'albero dei file. Questa retromarcia però su fermerà una -volta raggiunta la directory radice, perché non esistendo in questo caso una -directory superiore, il nome ``\file{..}'' farà riferimento alla radice -stessa. +In questo modo con ``\file{..}'' si può usare un \itindsub{pathname}{relativo} +pathname relativo per indicare un file posto al di sopra della directory +corrente, tornando all'indietro nell'albero dei file. Questa retromarcia però +su fermerà una volta raggiunta la directory radice, perché non esistendo in +questo caso una directory superiore, il nome ``\file{..}'' farà riferimento +alla radice stessa. \itindend{pathname} +\itindend{pathname~resolution} \subsection{I tipi di file} @@ -714,7 +718,7 @@ interno alcune bufferizzazioni per aumentare l'efficienza nell'accesso ai dispositivi. L'accesso viene gestito attraverso i \textit{file descriptor} che sono rappresentati da numeri interi (cioè semplici variabili di tipo \ctyp{int}). L'interfaccia è definita nell'\textit{header file} -\file{unistd.h} e la tratteremo in dettaglio in +\headfile{unistd.h} e la tratteremo in dettaglio in cap.~\ref{cha:file_unix_interface}. \itindbeg{file~stream} @@ -732,7 +736,7 @@ specificata dall'ANSI C e perciò si trova anche su tutti i sistemi non Unix. Gli \textit{stream} sono oggetti complessi e sono rappresentati da puntatori ad un opportuna struttura definita dalle librerie del C, ad essi si accede sempre in maniera indiretta utilizzando il tipo \code{FILE *}. -L'interfaccia è definita nell'\textit{header file} \file{stdio.h} e la +L'interfaccia è definita nell'\textit{header file} \headfile{stdio.h} e la tratteremo in dettaglio nel cap.~\ref{cha:files_std_interface}. Entrambe le interfacce possono essere usate per l'accesso ai file come agli @@ -877,7 +881,7 @@ infinita serie di problemi di portabilità. sez.~\ref{sec:proc_access_id}).\\ \hline \end{tabular} - \caption{Elenco dei tipi primitivi, definiti in \file{sys/types.h}.} + \caption{Elenco dei tipi primitivi, definiti in \headfile{sys/types.h}.} \label{tab:intro_primitive_types} \end{table} @@ -885,7 +889,7 @@ Per questo motivo tutte le funzioni di libreria di solito non fanno riferimento ai tipi elementari dello standard del linguaggio C, ma ad una serie di \index{tipo!primitivo} \textsl{tipi primitivi} del sistema, riportati in tab.~\ref{tab:intro_primitive_types}, e definiti nell'\textit{header file} -\file{sys/types.h}, in modo da mantenere completamente indipendenti i tipi +\headfile{sys/types.h}, in modo da mantenere completamente indipendenti i tipi utilizzati dalle funzioni di sistema dai tipi elementari supportati dal compilatore C. @@ -934,7 +938,7 @@ presenti neanche in System V) sono state tralasciate. Le funzionalità implementate sono principalmente il meccanismo di intercomunicazione fra i processi e la memoria condivisa (il cosiddetto System V IPC, che vedremo in sez.~\ref{sec:ipc_sysv}) le funzioni della famiglia -\func{hsearch} e \func{drand48}, \func{fmtmsg} e svariate funzioni +\funcm{hsearch} e \funcm{drand48}, \funcm{fmtmsg} e svariate funzioni matematiche. @@ -1346,7 +1350,7 @@ una opportuna macro; queste estensioni sono illustrate nel seguente elenco: a 64 bit nelle funzioni di gestione dei file (non supportati in certi sistemi), caratterizzate dal suffisso \texttt{64} aggiunto ai vari nomi di tipi di dato e funzioni (come \type{off64\_t} al posto di \type{off\_t} o - \func{lseek64} al posto di \func{lseek}). + \funcm{lseek64} al posto di \func{lseek}). Le funzioni di questa interfaccia alternativa sono state proposte come una estensione ad uso di transizione per le \textit{Single UNIX Specification}, @@ -1375,9 +1379,9 @@ una opportuna macro; queste estensioni sono illustrate nel seguente elenco: \item[\macro{\_ATFILE\_SOURCE}] definendo questa macro si rendono disponibili le estensioni delle funzioni di creazione, accesso e modifica di file e - directory che risolvono i problemi di sicurezza insiti nell'uso di pathname - relativi con programmi \itindex{thread} \textit{multi-thread} illustrate in - sez.~\ref{sec:file_openat}. + directory che risolvono i problemi di sicurezza insiti nell'uso di + \textit{pathname} relativi con programmi \itindex{thread} + \textit{multi-thread} illustrate in sez.~\ref{sec:file_openat}. \item[\macro{\_REENTRANT}] definendo questa macro, o la equivalente \macro{\_THREAD\_SAFE} (fornita per compatibilità) si rendono disponibili le @@ -1398,10 +1402,10 @@ una opportuna macro; queste estensioni sono illustrate nel seguente elenco: Le funzioni di libreria che vengono messe sotto controllo quando questa funzionalità viene attivata sono, al momento della stesura di queste note, - le seguenti: \func{memcpy}, \func{mempcpy}, \func{memmove}, \func{memset}, - \func{stpcpy}, \func{strcpy}, \func{strncpy}, \func{strcat}, \func{strncat}, - \func{sprintf}, \func{snprintf}, \func{vsprintf}, \func{vsnprintf}, e - \func{gets}. + le seguenti: \funcm{memcpy}, \funcm{mempcpy}, \funcm{memmove}, + \funcm{memset}, \funcm{stpcpy}, \funcm{strcpy}, \funcm{strncpy}, + \funcm{strcat}, \funcm{strncat}, \func{sprintf}, \func{snprintf}, + \func{vsprintf}, \func{vsnprintf}, e \func{gets}. La macro prevede due valori, con \texttt{1} vengono eseguiti dei controlli di base che non cambiano il comportamento dei programmi se si richiede una @@ -1450,12 +1454,12 @@ sempre definite prima dell'inclusione dei file di dichiarazione. % LocalWords: mempcpy memmove memset stpcpy strcpy strncpy strcat strncat gets % LocalWords: sprintf snprintf vsprintf vsnprintf syscall number calendar BITS % LocalWords: pathname Google Android standards device Virtual bootloader path +% LocalWords: filename fifo name components resolution chroot parent symbolic +% LocalWords: char block VMS raw access MacOS LF CR dos HFS Mac attributes +% LocalWords: Executable Linkable Format Tool magic descriptor stream locking +% LocalWords: process %%% Local Variables: %%% mode: latex %%% TeX-master: "gapil" %%% End: -% LocalWords: filename fifo name components resolution chroot parent symbolic -% LocalWords: char block VMS raw access MacOS LF CR dos HFS Mac attributes -% LocalWords: Executable Linkable Format Tool magic descriptor stream locking -% LocalWords: process