From 1550495f935630d90ba48c15f8c5248e15717488 Mon Sep 17 00:00:00 2001 From: Simone Piccardi Date: Mon, 14 Mar 2005 14:46:51 +0000 Subject: [PATCH] Inizio della rilettura... --- intro.tex | 98 ++++++++++++++++++++++++++++------------------------ process.tex | 14 ++++---- sockctrl.tex | 2 ++ system.tex | 25 +++++++------- 4 files changed, 75 insertions(+), 64 deletions(-) diff --git a/intro.tex b/intro.tex index d066e9f..9e473ed 100644 --- a/intro.tex +++ b/intro.tex @@ -82,13 +82,13 @@ area di \textit{swap}) le pagine di memoria in 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 -cap.~\ref{cha:file_intro}, (questo non è vero per le interfacce di rete, che +cap.~\ref{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). +il lavoro di accesso e gestione a basso livello è effettuato dal kernel. -\subsection{User space e kernel space} -\label{sec:intro_user_kernel_space} +\subsection{Il kernel e il sistema} +\label{sec:intro_kern_and_sys} Uno dei concetti fondamentali su cui si basa l'architettura dei sistemi Unix è quello della distinzione fra il cosiddetto \textit{user space}, che @@ -110,20 +110,22 @@ all'hardware non pu kernel il programmatore deve usare le opportune interfacce che quest'ultimo fornisce allo user space. - -\subsection{Il kernel e il sistema} -\label{sec:intro_kern_and_sys} - Per capire meglio la distinzione fra kernel space e user space si può prendere in esame la procedura di avvio di un sistema unix-like; all'avvio il BIOS (o in generale il software di avvio posto nelle EPROM) eseguirà la procedura di -avvio del sistema (il cosiddetto \textit{boot}), incaricandosi di caricare il -kernel in memoria e di farne partire l'esecuzione; quest'ultimo, dopo aver -inizializzato le periferiche, farà partire il primo processo, \cmd{init}, che -è quello che a sua volta farà partire tutti i processi successivi. Fra questi -ci sarà pure quello che si occupa di dialogare con la tastiera e lo schermo -della console, e quello che mette a disposizione dell'utente che si vuole -collegare, un terminale e la \textit{shell} da cui inviare i comandi. +avvio del sistema (il cosiddetto \textit{bootstrap}\footnote{il nome deriva da + un espressione gergale che significa ``sollevarsi da terra tirandosi per le + stringhe delle scarpe'', per indicare il compito, almeno apparentemente + impossibile, di far eseguire un programma a partire da un computer appena + acceso che appunto non ne contiene nessuno; non è impossibile appunto perché + in realtà c'è un programma iniziale, che è appunto il BIOS.}), incaricandosi +di caricare il kernel in memoria e di farne partire l'esecuzione; +quest'ultimo, dopo aver inizializzato le periferiche, farà partire il primo +processo, \cmd{init}, che è quello che a sua volta farà partire tutti i +processi successivi. Fra questi ci sarà pure quello che si occupa di dialogare +con la tastiera e lo schermo della console, e quello che mette a disposizione +dell'utente che si vuole collegare, un terminale e la \textit{shell} da cui +inviare i comandi. E' da rimarcare come tutto ciò, che usualmente viene visto come parte del sistema, non abbia in realtà niente a che fare con il kernel, ma sia @@ -250,13 +252,17 @@ Ogni utente appartiene anche ad almeno un gruppo (il cosiddetto accesso ai file e quindi anche alle periferiche, in maniera più flessibile, definendo gruppi di lavoro, di accesso a determinate risorse, etc. -L'utente e il gruppo sono identificati da due numeri (la cui corrispondenza ad +L'utente e il gruppo sono identificati da due numeri, la cui corrispondenza ad 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 \textsl{user-ID}, ed indicato dall'acronimo \acr{uid}, e il -\textit{group identifier}, detto in breve \textsl{group-ID}, ed identificato -dall'acronimo \acr{gid}, e sono quelli che vengono usati dal kernel per -identificare l'utente. +\file{/etc/groups}.\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 \textit{Name Service Switch}, su varie tipologie di + supporti, compresi server centralizzati come LDAP.} +\index{\textit{Name~Service~Switch}} Questi numeri sono l'\textit{user + identifier}, detto in breve \textsl{user-ID}, ed indicato dall'acronimo +\acr{uid}, e il \textit{group identifier}, detto in breve \textsl{group-ID}, +ed identificato dall'acronimo \acr{gid}, e sono quelli che vengono usati dal +kernel per identificare l'utente. In questo modo il sistema è in grado di tenere traccia dell'utente a cui appartiene ciascun processo ed impedire ad altri utenti di interferire con @@ -456,9 +462,9 @@ Si tenga presente inoltre che nuove specifiche e proposte di standardizzazione si aggiungono continuamente, mentre le versioni precedenti vengono riviste; talvolta poi i riferimenti cambiano nome, per cui anche solo seguire le denominazioni usate diventa particolarmente faticoso; una pagina dove si -possono recuperare varie (e di norma piuttosto intricate) informazioni è: +possono recuperare varie (e di norma piuttosto intricate) informazioni è \href{http://www.pasc.org/standing/sd11.html} -{http://www.pasc.org/standing/sd11.html}. +{\textsf{http://www.pasc.org/standing/sd11.html}}. \begin{table}[htb] \footnotesize @@ -486,14 +492,14 @@ possono recuperare varie (e di norma piuttosto intricate) informazioni \label{tab:intro_posix_std} \end{table} -Benché l'insieme degli standard POSIX siano basati sui sistemi Unix essi +Benché l'insieme degli standard POSIX siano basati sui sistemi Unix, essi definiscono comunque un'interfaccia di programmazione generica e non fanno riferimento ad una implementazione specifica (ad esempio esiste un'implementazione di POSIX.1 anche sotto Windows NT). Lo standard principale resta comunque POSIX.1, che continua ad evolversi; la versione più nota, cui gran parte delle implementazioni fanno riferimento, e che costituisce una base per molti altri tentativi di standardizzazione, è stata rilasciata anche come -standard internazionale con la sigla ISO/IEC 9945-1:1996. +standard internazionale con la sigla ISO/IEC 9945-1:1996. Linux e le \acr{glibc} implementano tutte le funzioni definite nello standard POSIX.1, queste ultime forniscono in più alcune ulteriori capacità (per @@ -518,12 +524,12 @@ Il consorzio X/Open nacque nel 1984 come consorzio di venditori di sistemi Unix per giungere ad un'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). +con l'abbreviazione XPG$n$ con $n$ che indica la versione). -Nel 1989 produsse una terza versione di questa guida particolarmente -voluminosa (la \textit{X/Open Portability Guide, Issue 3}), contenente -un'ulteriore standardizzazione dell'interfaccia di sistema di Unix, che venne -presa come riferimento da vari produttori. +Nel 1989 il consorzio produsse una terza versione di questa guida +particolarmente voluminosa (la \textit{X/Open Portability Guide, Issue 3}), +contenente un'ulteriore standardizzazione dell'interfaccia di sistema di 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 @@ -572,19 +578,20 @@ Lo sviluppo di BSD inizi 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 +versioni allora 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 -API di grande rilievo, come il link simbolici, la funzione \code{select}, i +API di grande rilievo, come i link simbolici, la funzione \code{select} ed i socket. Queste estensioni sono state via via aggiunte al sistema nelle varie versioni del sistema (BSD 4.2, BSD 4.3 e BSD 4.4) come pure in alcuni derivati -commerciali come SunOS. Il kernel e le \acr{glibc} provvedono tutte queste -estensioni che sono state in gran parte incorporate negli standard successivi. +commerciali come SunOS. Il kernel Linux e le \acr{glibc} provvedono tutte +queste estensioni che sono state in gran parte incorporate negli standard +successivi. \subsection{Lo standard System V} @@ -650,14 +657,15 @@ Le macro disponibili per i vari standard sono le seguenti: \item[\macro{\_POSIX\_C\_SOURCE}] definendo questa macro ad un valore intero positivo si controlla quale livello delle funzionalità specificate da POSIX viene messa a disposizione; più alto è il valore maggiori sono le - funzionalità. Se è uguale a '1' vengono attivate le funzionalità specificate - nella edizione del 1990 (IEEE Standard 1003.1-1990), valori maggiori o - uguali a '2' attivano le funzionalità POSIX.2 specificate nell'edizione del - 1992 (IEEE Standard 1003.2-1992). Un valore maggiore o uguale a `199309L' - attiva le funzionalità POSIX.1b specificate nell'edizione del 1993 (IEEE - Standard 1003.1b-1993). Un valore maggiore o uguale a `199506L' attiva le - funzionalità POSIX.1 specificate nell'edizione del 1996 (ISO/IEC 9945-1: - 1996). Valori superiori abiliteranno ulteriori estensioni. + funzionalità. Se è uguale a ``\texttt{1}'' vengono attivate le funzionalità + specificate nella edizione del 1990 (IEEE Standard 1003.1-1990), valori + maggiori o uguali a ``\texttt{2}'' attivano le funzionalità POSIX.2 + specificate nell'edizione del 1992 (IEEE Standard 1003.2-1992). Un valore + maggiore o uguale a ``\texttt{199309L}'' attiva le funzionalità POSIX.1b + specificate nell'edizione del 1993 (IEEE Standard 1003.1b-1993). Un valore + maggiore o uguale a ``\texttt{199506L}'' attiva le funzionalità POSIX.1 + specificate nell'edizione del 1996 (ISO/IEC 9945-1: 1996). Valori superiori + abiliteranno ulteriori estensioni. \item[\macro{\_BSD\_SOURCE}] definendo questa macro si attivano le funzionalità derivate da BSD4.3, insieme a quelle previste dagli standard ISO C, POSIX.1 e POSIX.2. Alcune delle funzionalità previste da BSD sono @@ -677,9 +685,9 @@ Le macro disponibili per i vari standard sono le seguenti: 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. Se il valore della macro è posto a 500 questo - include anche le nuove definizioni introdotte con la \textit{Single UNIX - Specification, version 2}, cioè Unix98. + disponibili in BSD e SVID. Se il valore della macro è posto a + ``\texttt{500}'' questo include anche le nuove definizioni introdotte con la + \textit{Single UNIX Specification, version 2}, cioè Unix98. \item[\macro{\_XOPEN\_SOURCE\_EXTENDED}] definendo questa macro si attivano le ulteriori funzionalità necessarie ad essere conformi al rilascio del marchio \textit{X/Open Unix}. diff --git a/process.tex b/process.tex index 1127247..d59f968 100644 --- a/process.tex +++ b/process.tex @@ -43,13 +43,13 @@ tutti gli altri.\footnote{questo non Quando un programma viene lanciato il kernel esegue un'opportuna routine di avvio, usando il programma \cmd{ld-linux.so}. Questo programma prima carica -le librerie condivise che servono al programma, poi effettua il link dinamico -del codice e alla fine lo esegue. Infatti, a meno di non aver specificato il -flag \texttt{-static} durante la compilazione, tutti i programmi in Linux sono -incompleti e necessitano di essere \textit{linkati} alle librerie condivise -quando vengono avviati. La procedura è controllata da alcune variabili di -ambiente e dal contenuto di \file{/etc/ld.so.conf}. I dettagli sono riportati -nella man page di \cmd{ld.so}. +le librerie condivise che servono al programma, poi effettua il collegamento +dinamico del codice e alla fine lo esegue. Infatti, a meno di non aver +specificato il flag \texttt{-static} durante la compilazione, tutti i +programmi in Linux sono incompleti e necessitano di essere \textsl{collegati} +alle librerie condivise quando vengono avviati. La procedura è controllata da +alcune variabili di ambiente e dal contenuto di \file{/etc/ld.so.conf}. I +dettagli sono riportati nella man page di \cmd{ld.so}. Il sistema fa partire qualunque programma chiamando la funzione \func{main}; sta al programmatore chiamare così la funzione principale del programma da cui diff --git a/sockctrl.tex b/sockctrl.tex index ebbcee9..79505d4 100644 --- a/sockctrl.tex +++ b/sockctrl.tex @@ -117,6 +117,7 @@ dell'ordine in cui questi vengono interrogati.\footnote{con le implementazioni funzioni di libreria, prevedendo un ordine di interrogazione predefinito e non modificabile (a meno di una ricompilazione delle librerie stesse).} +\index{\textit{Name~Service~Switch}|(} Per risolvere questa serie di problemi la risoluzione dei nomi a dominio eseguirà dal \textit{resolver} è stata inclusa all'interno di un meccanismo generico per la risoluzione di corrispondenze fra nomi ed informazioni ad essi @@ -192,6 +193,7 @@ quello che conta sono le funzioni classiche che il \textit{resolver} mette a disposizione,\footnote{è cura della implementazione fattane nelle \acr{glibc} tenere conto della presenza del \textit{Name Service Switch}.} e sono queste quelle che tratteremo nelle sezioni successive. +\index{\textit{Name~Service~Switch}|)} \subsection{Le funzioni di interrogazione del \textit{resolver}} diff --git a/system.tex b/system.tex index b435f61..1d66211 100644 --- a/system.tex +++ b/system.tex @@ -933,9 +933,10 @@ dall'altra con il diffondersi delle reti la necessit informazioni degli utenti e dei gruppi per insiemi di macchine, in modo da mantenere coerenti i dati, ha portato anche alla necessità di poter recuperare e memorizzare dette informazioni su supporti diversi, introducendo il sistema -del \textit{Name Service Switch} che tratteremo brevemente più avanti (in -sez.~\ref{sec:sock_resolver}) dato che la maggior parte delle sua applicazioni -sono relative alla risoluzioni di nomi di rete. +del \index{\textit{Name~Service~Switch}}\textit{Name Service Switch} che +tratteremo brevemente più avanti (in sez.~\ref{sec:sock_resolver}) dato che la +maggior parte delle sua applicazioni sono relative alla risoluzioni di nomi di +rete. In questo paragrafo ci limiteremo comunque a trattere le funzioni classiche per la lettura delle informazioni relative a utenti e gruppi tralasciando @@ -1067,15 +1068,15 @@ fig.~\ref{fig:sys_group_struct}. Le funzioni viste finora sono in grado di leggere le informazioni sia direttamente dal file delle password in \file{/etc/passwd} che tramite il -sistema del \textit{Name Service Switch} e sono completamente generiche. Si -noti però che non c'è una funzione che permetta di impostare direttamente una -password.\footnote{in realtà questo può essere fatto ricorrendo a PAM, ma - questo è un altro discorso.} Dato che POSIX non prevede questa possibilità -esiste un'altra interfaccia che lo fa, derivata da SVID le cui funzioni sono -riportate in tab.~\ref{tab:sys_passwd_func}. Questa però funziona soltanto -quando le informazioni sono mantenute su un apposito file di \textsl{registro} -di utenti e gruppi, con il formato classico di \file{/etc/passwd} e -\file{/etc/group}. +sistema del \index{\textit{Name~Service~Switch}}\textit{Name Service Switch} e +sono completamente generiche. Si noti però che non c'è una funzione che +permetta di impostare direttamente una password.\footnote{in realtà questo può + essere fatto ricorrendo a PAM, ma questo è un altro discorso.} Dato che +POSIX non prevede questa possibilità esiste un'altra interfaccia che lo fa, +derivata da SVID le cui funzioni sono riportate in +tab.~\ref{tab:sys_passwd_func}. Questa però funziona soltanto quando le +informazioni sono mantenute su un apposito file di \textsl{registro} di utenti +e gruppi, con il formato classico di \file{/etc/passwd} e \file{/etc/group}. \begin{table}[htb] \footnotesize -- 2.30.2