X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=intro.tex;h=39cf4c863a7f6bb45f539d8ba3c338e01e2a1e61;hp=d6eefa583b8af41333ddad6c3b7553fd5f335c7c;hb=b6d559b9429afcc0d64137913e8f16d49857a6c9;hpb=e9aa62ccbeefc114915aba31f257d55f6c19a05a diff --git a/intro.tex b/intro.tex index d6eefa5..39cf4c8 100644 --- a/intro.tex +++ b/intro.tex @@ -67,7 +67,7 @@ eccedenza. Le periferiche infine vengono viste in genere attraverso un'interfaccia astratta che permette di trattarle come fossero file, secondo il concetto per cui \textit{everything is a file}, su cui torneremo in dettaglio in -\capref{cha:files_intro}, (questo non è vero per le interfacce di rete, che +\capref{cha:file_intro}, (questo non è vero per le interfacce di rete, che hanno un'interfaccia diversa, ma resta valido il concetto generale che tutto il lavoro di accesso e gestione a basso livello è effettuato dal kernel). @@ -236,12 +236,16 @@ disattivati\footnote{i controlli infatti vengono sempre eseguiti da un codice \section{Gli standard di unix e GNU/Linux} \label{sec:intro_standard} -In questa sezione prenderemo in esame alcune caratteristiche generali del -sistema e gli standard adottati per le funzioni, i prototipi, gli errori, i -tipi di dati. +In questa sezione faremo una breve panoramica relativa ai vari standard che +nel tempo sono stati formalizzati da enti, associazioni, consorzi e +organizzazioni varie al riguardo del sistema o alle caratteristiche che si +sono stabilite come standard di fatto in quanto facenti parte di alcune +implementazioni molto diffuse come BSD o SVr4. -\subsection{Prototipi e puntatori} -\label{sec:intro_function} +Ovviamente prenderemo in considerazione solo gli aspetti riguardanti +interfacce di programmazione e le altre caratteristiche di un sistema +unix-like ed in particolare a come e in che modo essi sono supportati da +GNU/Linux (sia per quanto riguarda il kernel che le \acr{glibc}). \subsection{Lo standard ANSI C} @@ -250,7 +254,8 @@ tipi di dati. Lo standard ANSI C è stato definito nel 1989 dall'\textit{American National Standard Institute}, come standard del linguaggio C ed è stato successivamente adottatto dalla \textit{International Standard Organisation} -come standard internazionale con la sigla ISO/IEC 9899:1990. +come standard internazionale con la sigla ISO/IEC 9899:1990, e va anche sotto +il nome di standard ISO C. Scopo dello standard è quello di garantire la portabilità dei programmi C fra sistemi operativi diversi, ma oltre alla sintassi e alla semantica del @@ -258,20 +263,38 @@ linguaggio C (operatori, parole chiave, tipi di dati) lo standard prevede anche una libreria di funzioni che devono poter essere implementate su qualunque sistema operativo. -Linux, come molti unix moderni, provvede la compatibilità con questo standard, -fornendo le funzioni di libreria da esso previste; queste sono dichiarate in -quindici header files, uno per ciascuna delle quindici aree in cui è stata -suddivisa la libreria. In \ntab\ si sono riportati questi header, insieme a -quelli definiti negli altri standard descritti nelle sezioni successive. - -\subsection{Lo standard POSIX} +Per questo motivo, anche se lo standard non ha alcun riferimento ad un sistema +di tipo unix, GNU/Linux (per essere precisi le glibc), come molti unix +moderni, provvede la compatibilità con questo standard, fornendo le funzioni +di libreria da esso previste. Queste sono dichiarate in quindici header files +(anch'essi provvisti dalla \acr{glibc}), uno per ciascuna delle quindici aree +in cui è stata suddivisa una libreria standard. In \ntab\ si sono riportati +questi header, insieme a quelli definiti negli altri standard descritti nelle +sezioni successive. + +In realtà \acr{glibc} ed i relativi header file definiscono un insieme di +funzionalità in cui sono incluse come sottoinsieme anche quelle previste dallo +standard ANSI C. È possibile ottenere una conformità stretta allo standard +(scartando le funzionalità adizionali) usando il \cmd{gcc} con l'opzione +\cmd{-ansi}. Questa opzione istruisce il compilatore a definire nei vari +header file soltanto le funzionalità previste dallo standard ANSI C e a non +usare le varie estensioni al linguaggio e al preprocessore da esso supportate. + + +\subsection{Lo standard IEEE -- POSIX} \label{sec:intro_posix} -In realtà POSIX è una famiglia di standard diversi, il nome, suggerito da +Uno standard più attinente al sistema nel suo complesso (e che concerne sia il +kernel che le librerie e` lo standard POSIX. Esso prende origine dallo +standard ANSI C, che contiene come sottoinsieme, prevedendo ulteriori capacità +per le funzioni in esso definite, ed aggiungendone di nuove. Le estensioni +principali sono + +In realtà POSIX è una famiglia di standard diversi, il cui nome, suggerito da Richard Stallman, sta per \textit{Portable Operating System Interface}, ma la X finale denuncia la sua stretta relazione con i sistemi unix. Esso nasce dal lavoro dell'IEEE (\textit{Institute of Electrical and Electronics Engeneers}) -che ne ha prodotto una prima versione, nota come IEEE 1003.1-1988, mirante a +che ne produsse una prima versione, nota come IEEE 1003.1-1988, mirante a standardizzare l'interfaccia con il sistema operativo. Ma gli standard POSIX non si limitano alla standardizzazione delle funzioni di @@ -284,29 +307,60 @@ una interfaccia e non fa riferimento ad una specifica implementazione (ad esempio esiste anche una implementazione di questo standard pure sotto Windows NT). Lo standard si è evoluto nel tempo ed una versione più aggiornata (quella che viene normalmente denominata POSIX.1) è stata rilasciata come standard -internazionale con la sigla ISO/IEC 9945-1:1990. +internazionale con la sigla ISO/IEC 9945-1:1996. + +Le \acr{glibc} implementano tutte le funzioni definite nello standard POSIX.1, +e Linux; \subsection{Lo standard X/Open -- XPG3} \label{sec:intro_xopen} -Il consorzio X/Open nacque come consorzio di venditori di sistemi unix, che -nel 1989 produsse una voluminosa guida chiamata \textit{X/Open Portability - Guide, Issue 3} al cui interno definiva una ulteriore standardizzazione -dell'interfaccia ad un sistema unix. +Il consorzio X/Open nacque nel 1984 come consorzio di venditori di sistemi +unix per giungere ad una armonizzazione dele varie implementazioni di unix. +Per far questo iniziò a pubblicare una serie di documentazioni e specifiche +sotto il nome di \textit{X/Open Portability Guide} (che chiameremo XPGn). + + +Nel 1989 produsse una terza versione della sua guida particolarmente +voluminosa (la \textit{X/Open Portability Guide, Issue 3}), che venne presa +come riferimento da vari produttori, e al cui interno definiva una ulteriore +standardizzazione dell'interfaccia ad un sistema unix. Questo standard, detto anche XPG3 dal nome della suddetta guida, è sempre -basato sullo standard POSIX.1, ma prevede una serie di funzionalità -aggiuntive. +basato sullo standard POSIX.1, ma prevede una serie di funzionalità aggiuntive +fra cui le specifiche delle API per l'interfaccia grafica (X11). + +Nel 1992 lo standard venne rivisto con una nuova versione della guida (XPG4) +che aggiungeva l'interfaccia XTI (\textit{X transport Interface}) mirante a +soppiantare (senza molto successo) quella l'interfaccia dei socket derivata da +BSD. + + +\subsection{Gli standard UNIX -- Open Group} +\label{sec:intro_opengroup} + +Nel 1993 il marchi Unix passò di proprietà dalla Novell (che a sua volta lo +aveva comprato dalla AT\&T) al consorzio X/Open, che iniziò a pubblicare le +sue specifiche sotto il nome di \textit{Single UNIX Specification}, -Il consorzio -\subsection{Valori e limiti del sistema} -\label{sec:intro_limits} + + +\subsection{Il comportamento standard del \cmd{gcc}} +\label{sec:intro_gcc_behaviuor} + + + + + +\subsection{Prototipi e puntatori} +\label{sec:intro_function} \subsection{Tipi di dati primitivi} \label{sec:intro_data_types} +