X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=intro.tex;h=18708c781817b80062944bc5c9661e9ca1b87860;hp=6e6fe60f5d13b01038d7627e28955375f0f63436;hb=f5e0b5be624d5a5a0b7a414ec7e957b0f86b2a56;hpb=13d5256e7b8cf624dc3a8a94f8dd9ded27f6eb4f diff --git a/intro.tex b/intro.tex index 6e6fe60..18708c7 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). @@ -212,7 +212,7 @@ accesso ai file e quindi anche alle periferiche, in maniera pi definendo gruppi di lavoro, di accesso a determinate risorse, etc. L'utente e il gruppo sono identificati da due numeri (la cui corrispondenza ad -un nome espresso in caratteri è inserita nei due files \file{/etc/passwd} e +un nome espresso in caratteri è inserita nei due file \file{/etc/passwd} e \file{/etc/groups}). Questi numeri sono l'\textit{user identifier}, detto in breve \acr{uid}, e il \textit{group identifier}, detto in breve \acr{gid}, che sono quelli che poi vengono usati dal kernel per identificare l'utente. @@ -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} @@ -249,8 +253,9 @@ 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. +successivamente adottato dalla \textit{International Standard Organisation} +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 file +(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à addizionali) 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,25 +307,112 @@ 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 delle varie implementazioni. Per far +questo iniziò a pubblicare una serie di documentazioni e specifiche sotto il +nome di \textit{X/Open Portability Guide} (a cui di norma si fa riferimento +con l'abbreviazione XPGn). + +Nel 1989 produsse una terza versione di questa guida particolarmente +voluminosa (la \textit{X/Open Portability Guide, Issue 3}), contenente una +ulteriore standardizzazione dell'interfaccia sistema unix, che venne presa +come riferimento da vari produttori. 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, la +Issue 4 (da cui la sigla XPG4) che aggiungeva l'interfaccia XTI (\textit{X + transport Interface}) mirante a soppiantare (senza molto successo) +l'interfaccia dei socket derivata da BSD. Una seconda versione della guida fu +rilasciata nel 1994, questa è nota con il nome di Spec 1170 (dal numero delle +interfacce, header e comandi definiti). + +Nel 1993 il marchio 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}, l'ultima +versione di Spec 1170 diventò così la prima versione delle \textit{Single UNIX + Specification}, più comunemente nota come \textit{Unix 95}. + + +\subsection{Gli standard UNIX -- Open Group} +\label{sec:intro_opengroup} + +Nel 1996 la fusione del consorzio X/Open con la Open Software Foundation (nata +da un gruppo di aziende concorrenti rispetto ai fondatori di X/Open) portò +alla costituzione dell'Open Group, un consorzio internazionale che raccoglie +produttori, utenti industriali, entità accademiche e governative. + +Nel 1997 fu annunciata la seconda versione delle \textit{Single UNIX + Specification}, che portava le interfacce specificate a 1434 (e a 3030 per +le stazioni grafiche, comprendendo pure la definizione di CDE che richiede sia +X11 che Motif). La conformità a questa versione permette l'uso del nome +\textit{Unix 98}, usato spesso anche per riferirsi allo standard. + + +\subsection{Il comportamento standard del \cmd{gcc}} +\label{sec:intro_gcc} + + + + +\subsection{Lo ``standard'' BSD} +\label{sec:intro_bsd} -Il consorzio +Lo sviluppo di BSD iniziò quando la fine della collaborazione fra l'Università +di Berkley e la AT/T generò una delle prime e più importanti fratture del +mondo Unix. L'Università di Berkley proseguì nello sviluppo della base di +codice di cui disponeva, e che presentava parecchie migliorie rispetto alle +allora versioni disponibili, fino ad arrivare al rilascio di una versione +completa di unix, chiamata appunto BSD, del tutto indipendente dal codice +della AT/T. + +Benchè BSD non sia uno standard formalizzato, l'implementazione di unix +dell'Università di Berkley, ha provveduto nel tempo una serie di estensioni e +di API grande rilievo, come il link simbolici (vedi \secref{sec:file_symlink}, +la funzione \func{select}, i socket. + +Queste estensioni sono state via via aggiunte al sistema nelle varie release +del sistema (BSD 4.2, BSD 4.3 e BSD 4.4) come pure in alcuni derivati +commerciali come SunOS. Le \acr{glibc} provvedono tutte queste estensioni che +sono state in gran parte incorporate negli standard successivi. + + +\subsection{Lo standard System V} +\label{sec:intro_sysv} + +Come noto Unix nasce nei laboratori della AT/T, che per molti anni ne detiene +il marchio depositato; le varie versioni + + +System V è la denominazione dello Unix sviluppato ufficialmente dalla AT/T; la +sua interfaccia è descritta in un documento dal titolo \textit{System V + Interface Description}, a cui si fa spesso riferimento con la sigla +SVID. Anche questo costituisce un sovrainsieme delle interfacce definite dallo +standard POSIX. + + + + + + + +\subsection{Prototipi e puntatori} +\label{sec:intro_function} \subsection{Tipi di dati primitivi} \label{sec:intro_data_types} +