X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=intro.tex;h=1fa1d24e303760926581831852ebf3c0388ea2a9;hp=4e77602afd08fa29150b4422b746098e09c4b75a;hb=0196c376e39fc18f8cd5e7fef47b61264f943faf;hpb=6ca77550fb420b3948b95a60ff79f7e282c12d34 diff --git a/intro.tex b/intro.tex index 4e77602..1fa1d24 100644 --- a/intro.tex +++ b/intro.tex @@ -1,6 +1,6 @@ %% intro.tex %% -%% Copyright (C) 2000-2007 Simone Piccardi. Permission is granted to +%% Copyright (C) 2000-2008 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", @@ -445,7 +445,7 @@ una infinita serie di problemi di portabilit \hline \type{caddr\_t} & Core address.\\ \type{clock\_t} & Contatore del tempo di sistema.\\ - \type{dev\_t} & Numero di dispositivo.\\ + \type{dev\_t} & Numero di dispositivo (vedi sez.~\ref{sec:file_mknod}).\\ \type{gid\_t} & Identificatore di un gruppo.\\ \type{ino\_t} & Numero di \index{inode} \textit{inode}.\\ \type{key\_t} & Chiave per il System V IPC.\\ @@ -578,12 +578,12 @@ mirante a standardizzare l'interfaccia con il sistema operativo. Ma gli standard POSIX non si limitano alla standardizzazione delle funzioni di libreria, e in seguito sono stati prodotti anche altri standard per la shell e i comandi di sistema (1003.2), per le estensioni \textit{real-time} e per i -thread (rispettivamente 1003.1d e 1003.1c) per i socket (1003.1g) e vari -altri. In tab.~\ref{tab:intro_posix_std} è riportata una classificazione -sommaria dei principali documenti prodotti, e di come sono identificati fra -IEEE ed ISO; si tenga conto inoltre che molto spesso si usa l'estensione IEEE -anche come aggiunta al nome POSIX; ad esempio è più comune parlare di POSIX.4 -come di POSIX.1b. +\itindex{thread} \textit{thread} (rispettivamente 1003.1d e 1003.1c) per i +socket (1003.1g) e vari altri. In tab.~\ref{tab:intro_posix_std} è riportata +una classificazione sommaria dei principali documenti prodotti, e di come sono +identificati fra IEEE ed ISO; si tenga conto inoltre che molto spesso si usa +l'estensione IEEE anche come aggiunta al nome POSIX; ad esempio è più comune +parlare di POSIX.4 come di POSIX.1b. Si tenga presente inoltre che nuove specifiche e proposte di standardizzazione si aggiungono continuamente, mentre le versioni precedenti vengono riviste; @@ -606,7 +606,7 @@ possono recuperare varie (e di norma piuttosto intricate) informazioni POSIX.2 & 1003.2 & 9945-2& Comandi \\ POSIX.3 & 2003 &TR13210& Metodi di test \\ POSIX.4 & 1003.1b & --- & Estensioni real-time \\ - POSIX.4a& 1003.1c & --- & Thread \\ + POSIX.4a& 1003.1c & --- & \itindex{thread} Thread \\ POSIX.4b& 1003.1d &9945-1& Ulteriori estensioni real-time \\ POSIX.5 & 1003.5 & 14519& Interfaccia per il linguaggio ADA \\ POSIX.6 & 1003.2c,1e& 9945-2& Sicurezza \\ @@ -632,11 +632,12 @@ sistema e che sono definite nello standard POSIX.2. Nelle versioni più recenti del kernel e delle librerie sono inoltre supportate ulteriori funzionalità aggiunte dallo standard POSIX.1c per quanto riguarda i -\textit{thread} (vedi cap.~\ref{cha:threads}), e dallo standard POSIX.1b per -quanto riguarda i segnali e lo \itindex{scheduler} scheduling real-time -(sez.~\ref{sec:sig_real_time} e sez.~\ref{sec:proc_real_time}), la misura del -tempo, i meccanismi di intercomunicazione (sez.~\ref{sec:ipc_posix}) e l'I/O -asincrono (sez.~\ref{sec:file_asyncronous_io}). +\itindex{thread} \textit{thread} (vedi cap.~\ref{cha:threads}), e dallo +standard POSIX.1b per quanto riguarda i segnali e lo \itindex{scheduler} +scheduling real-time (sez.~\ref{sec:sig_real_time} e +sez.~\ref{sec:proc_real_time}), la misura del tempo, i meccanismi di +intercomunicazione (sez.~\ref{sec:ipc_posix}) e l'I/O asincrono +(sez.~\ref{sec:file_asyncronous_io}). Lo standard principale resta comunque POSIX.1, che continua ad evolversi; la versione più nota, cui gran parte delle implementazioni fanno riferimento, e @@ -736,7 +737,7 @@ versione delle \textit{Single UNIX Specification} che verranno chiamate SUSv4. In Linux, grazie alle \acr{glibc}, la conformità agli standard appena descritti può essere richiesta sia attraverso l'uso di opportune opzioni del -compilatore, il \texttt{gcc}, che definendo delle specifiche costanti prima +compilatore (il \texttt{gcc}) che definendo delle specifiche costanti prima dell'inclusione dei file di dichiarazione (gli \textit{header file}) che definiscono le funzioni di libreria. @@ -797,7 +798,7 @@ in esse definite, sono illustrate nel seguente elenco: \item un valore maggiore o uguale a ``\texttt{199506L}'' rende disponibili le funzionalità previste dallo standard POSIX.1 specificate nell'edizione del 1996 (\textit{ISO/IEC 9945-1:1996}), ed in particolare le definizioni - dello standard POSIX.1c per i \textit{thread}; + dello standard POSIX.1c per i \itindex{thread} \textit{thread}; \item a partire dalla versione 2.3.3 delle \acr{glibc} un valore maggiore o uguale a ``\texttt{200112L}'' rende disponibili le funzionalità di base previste dallo standard POSIX.1-2001, escludendo le estensioni XSI; @@ -820,11 +821,13 @@ in esse definite, sono illustrate nel seguente elenco: Si tenga inoltre presente che la preferenza verso le versioni delle funzioni usate da BSD viene mantenuta soltanto se nessuna delle ulteriori macro di - specificazione di standard successivi (\macro{\_SVID\_SOURCE}, - \macro{\_POSIX\_SOURCE}, \macro{\_POSIX\_C\_SOURCE}, + specificazione di standard successivi (vale a dire una fra + \macro{\_POSIX\_C\_SOURCE}, \macro{\_POSIX\_SOURCE}, \macro{\_SVID\_SOURCE}, \macro{\_XOPEN\_SOURCE}, \macro{\_XOPEN\_SOURCE\_EXTENDED} o \macro{\_GNU\_SOURCE}) è stata a sua volta attivata, nel qual caso queste - hanno la precedenza. + hanno la precedenza. Se però si definisce \macro{\_BSD\_SOURCE} dopo aver + definito una di queste macro, l'effetto sarà quello di dare la precedenza + alle funzioni in forma BSD. \item[\macro{\_SVID\_SOURCE}] definendo questa macro si rendono disponibili le funzionalità derivate da SVID. Esse comprendono anche quelle definite negli @@ -833,10 +836,11 @@ in esse definite, sono illustrate nel seguente elenco: \item[\macro{\_XOPEN\_SOURCE}] definendo questa macro si rendono disponibili le funzionalità descritte nella \textit{X/Open Portability Guide}. Anche - queste sono un sovrainsieme di quelle definite in POSIX.1 e POSIX.2 ed in - effetti sia \macro{\_POSIX\_SOURCE} che \macro{\_POSIX\_C\_SOURCE} vengono - automaticamente definite. Sono incluse anche ulteriori funzionalità - disponibili in BSD e SVID: + queste sono un sovrainsieme di quelle definite negli standard POSIX.1 e + POSIX.2 ed in effetti sia \macro{\_POSIX\_SOURCE} che + \macro{\_POSIX\_C\_SOURCE} vengono automaticamente definite. Sono incluse + anche ulteriori funzionalità disponibili in BSD e SVID, più una serie di + estensioni a secondo dei seguenti valori: \begin{itemize} \item la definizione della macro ad un valore qualunque attiva le funzionalità specificate negli standard POSIX.1, POSIX.2 e XPG4; @@ -868,9 +872,9 @@ in esse definite, sono illustrate nel seguente elenco: compatibilità. \item[\macro{\_GNU\_SOURCE}] definendo questa macro si rendono disponibili - tutte le funzionalità disponibili nei vari standard oltre a varie - estensioni. Gli standard coperti sono: ISO C89, ISO C99, POSIX.1, POSIX.2, - BSD, SVID, X/Open, SUS. + tutte le funzionalità disponibili nei vari standard oltre a varie estensioni + specifiche presenti solo nelle \acr{glibc} ed in Linux. Gli standard coperti + sono: ISO C89, ISO C99, POSIX.1, POSIX.2, BSD, SVID, X/Open, SUS. L'uso di \macro{\_GNU\_SOURCE} è equivalente alla definizione contemporanea delle macro: \macro{\_BSD\_SOURCE}, \macro{\_SVID\_SOURCE}, @@ -879,22 +883,26 @@ in esse definite, sono illustrate nel seguente elenco: ``\texttt{199506L}'' per le versioni delle \acr{glibc} precedenti la 2.5), \macro{\_XOPEN\_SOURCE\_EXTENDED} e \macro{\_XOPEN\_SOURCE} con valore 600 (o 500 per le versioni delle \acr{glibc} precedenti la 2.2); oltre a queste - vengono pure attivate le ulteriori \macro{\_ATFILE\_SOURCE} e + vengono pure attivate le ulteriori due macro \macro{\_ATFILE\_SOURCE} e \macro{\_LARGEFILE64\_SOURCE} che definiscono funzioni previste esclusivamente dalle \acr{glibc}. \end{basedescript} Benché Linux supporti in maniera estensiva gli standard più diffusi, esistono -comunque delle estensioni specifiche e delle funzionalità specifiche, non -presenti in altri standard e lo stesso vale per le \acr{glibc} stesse, che -definiscono anche delle ulteriori funzioni di libreria. Ovviamente l'uso di -queste funzionalità deve essere evitato se si ha a cuore la portabilità, ma -qualora questo non sia un requisito esse possono rivelarsi molto utili. +comunque delle estensioni e funzionalità specifiche, non presenti in altri +standard e lo stesso vale per le \acr{glibc} stesse, che definiscono anche +delle ulteriori funzioni di libreria. Ovviamente l'uso di queste funzionalità +deve essere evitato se si ha a cuore la portabilità, ma qualora questo non sia +un requisito esse possono rivelarsi molto utili. Come per l'aderenza ai vari standard, le funzionalità aggiuntive possono essere rese esplicitamente disponibili tramite la definizione di opportune -macro di preprocessore, che si sono illustrate nel seguente elenco: +macro di preprocessore, alcune di queste vengono attivate con la definizione +di \macro{\_GNU\_SOURCE}, mentre altre devono essere attivate esplicitamente, +inoltre alcune estensioni possono essere attivate indipendentemente tramite +una opportuna macro; queste estensioni sono illustrate nel seguente elenco: + \begin{basedescript}{\desclabelwidth{3cm}\desclabelstyle{\nextlinelabel}} \item[\macro{\_LARGEFILE\_SOURCE}] definendo questa macro si rendono @@ -937,33 +945,53 @@ macro di preprocessore, che si sono illustrate nel seguente elenco: macro non ha nessun effetto. \item[\macro{\_ATFILE\_SOURCE}] definendo questa macro si rendono disponibili - le funzioni - -\item[\macro{\_FORTIFY\_SOURCE}] definendo questa macro si rendono - disponibili le estensioni delle funzioni di creazione di file e directory - che consentono una specificazione coerente dei pathname relativi illustrate - in sez.~\ref{sec:file_openat}. - -\item[\macro{\_REENTRANT}] definendo questa macro si rendono disponibili + le estensioni delle funzioni di creazione 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}. + +\item[\macro{\_REENTRANT}] definendo questa macro, o la equivalente + \macro{\_THREAD\_SAFE} (fornita per compatibilità) si rendono disponibili le + versioni \index{funzioni!rientranti} rientranti (vedi + sez.~\ref{sec:proc_reentrant}) di alcune funzioni, necessarie quando si + usano i \itindex{thread} \textit{thread}. Alcune di queste funzioni sono + anche previste nello standard POSIX.1c, ma ve ne sono altre che sono + disponibili soltanto su alcuni sistemi, o specifiche del \acr{glibc}, e + possono essere utilizzate una volta definita la macro. + +\item[\macro{\_FORTIFY\_SOURCE}] definendo questa macro viene abilitata + l'inserimento di alcuni controlli per alcune funzioni di allocazione e + manipolazione di memoria e stringhe che consentono di rilevare + automaticamente alcuni errori di \textit{buffer overflow} nell'uso delle + stesse. La funzionalità è stata introdotta a partire dalla versione 2.3.4 + delle \acr{glibc} e richiede anche il supporto da parte del compilatore, che + è disponibile solo a partire dalla versione 4.0 del \texttt{gcc}. + + 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}. + + 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 + ottimizzazione di livello uno o superiore,\footnote{vale a dire se si usa + l'opzione \texttt{-O1} o superiore del \texttt{gcc}.} mentre con il + valore \texttt{2} vengono aggiunti maggiori controlli. \end{basedescript} -In particolare è da sottolineare che le \acr{glibc} supportano alcune -estensioni specifiche GNU, che non sono comprese in nessuno degli standard -citati. Per poterle utilizzare esse devono essere attivate esplicitamente -definendo la macro \macro{\_GNU\_SOURCE} prima di includere i vari header -file. +Se non è stata specificata esplicitamente nessuna di queste macro il default +assunto è che siano definite \macro{\_BSD\_SOURCE}, \macro{\_SVID\_SOURCE}, +\macro{\_POSIX\_SOURCE}, e \macro{\_POSIX\_C\_SOURCE} con valore +``\texttt{200112L}'' (o ``\texttt{199506L}'' per le versioni delle \acr{glibc} +precedenti la 2.4). Si ricordi infine che perché queste macro abbiano effetto +devono essere sempre definite prima dell'inclusione dei file di dichiarazione. % vedi anche man feature_test_macros -%% \subsection{Gli standard di GNU/Linux} -%% \label{sec:intro_linux_std} - -% TODO Da fare (o cassare, a seconda del tempo e della voglia). - - - % LocalWords: like kernel multitasking scheduler preemptive sez swap is cap VM % LocalWords: everything bootstrap init shell Windows Foundation system call % LocalWords: fig libc uClib glibc embedded Library POSIX username PAM Methods @@ -983,7 +1011,9 @@ file. % LocalWords: LARGEFILE Support LFS dell' black rectangle node fill cpu draw % LocalWords: ellipse mem anchor west proc SysV SV Definition SCO Austin XSI % LocalWords: Technical TC SUS Opengroup features STRICT std ATFILE fseeko -% LocalWords: ftello fseek ftell lseek FORTIFY REENTRANT +% LocalWords: ftello fseek ftell lseek FORTIFY REENTRANT SAFE overflow memcpy +% LocalWords: mempcpy memmove memset stpcpy strcpy strncpy strcat strncat gets +% LocalWords: sprintf snprintf vsprintf vsnprintf %%% Local Variables: %%% mode: latex