X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=intro.tex;h=56c59ffb15c39360f2397e9b710b1332760f9f23;hp=e349fe678271fbaea6d618fe4f6d746a97f35ab4;hb=adbc2a4478d606025705a406603e6097584b9fa0;hpb=0345bbfd866e46d3c76d0df7f37a83f9a3924926 diff --git a/intro.tex b/intro.tex index e349fe6..56c59ff 100644 --- a/intro.tex +++ b/intro.tex @@ -8,6 +8,10 @@ %% license is included in the section entitled "GNU Free Documentation %% License". %% +\part{Programmazione di sistema} +\label{part:progr-di-sist} + + \chapter{L'architettura del sistema} \label{cha:intro_unix} @@ -64,15 +68,15 @@ porte di input/output). Una parte del kernel, lo \textit{scheduler}\index{scheduler}, si occupa di stabilire, ad intervalli fissi e sulla base di un opportuno calcolo delle -priorità, quale ``processo'' deve essere posto in esecuzione (il cosiddetto -\textit{preemptive scheduling}\index{preemptive scheduling}). Questo verrà -comunque eseguito in modalità protetta; quando necessario il processo potrà -accedere alle risorse hardware soltanto attraverso delle opportune chiamate al -sistema che restituiranno il controllo al kernel. +priorità, quale ``\textsl{processo}'' deve essere posto in esecuzione (il +cosiddetto \textit{preemptive scheduling}\index{preemptive scheduling}). +Questo verrà comunque eseguito in modalità protetta; quando necessario il +processo potrà accedere alle risorse hardware soltanto attraverso delle +opportune chiamate al sistema che restituiranno il controllo al kernel. La memoria viene sempre gestita dal kernel attraverso il meccanismo della \textsl{memoria virtuale}\index{memoria virtuale}, che consente di assegnare a -ciascun processo uno spazio di indirizzi ``virtuale'' (vedi +ciascun processo uno spazio di indirizzi ``\textsl{virtuale}'' (vedi \secref{sec:proc_memory}) che il kernel stesso, con l'ausilio della unità di gestione della memoria, si incaricherà di rimappare automaticamente sulla memoria disponibile, salvando su disco quando necessario (nella cosiddetta @@ -196,7 +200,7 @@ maggioranza dei casi,\footnote{esistono implementazioni diverse delle librerie completamente soppiantate dalle \acr{glibc}, le \textit{uClib} pur non essendo complete come le \acr{glibc}, restano invece molto diffuse nel mondo embedded per le loro di dimensioni ridotte (e soprattutto la possibilità di - togliere le parti non necessearie), e pertanto costituiscono un valido + togliere le parti non necessarie), e pertanto costituiscono un valido rimpiazzo delle \acr{glibc} in tutti quei sistemi specializzati che richiedono una minima occupazione di memoria.} si dovrebbe usare il nome GNU/Linux (piuttosto che soltanto Linux) in quanto una parte essenziale del @@ -252,10 +256,10 @@ 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 file \file{/etc/passwd} e \file{/etc/groups}). Questi numeri sono l'\textit{user identifier}, detto in -breve \textsl{userid}, ed indicato dall'acronimo \acr{uid}, e il \textit{group - identifier}, detto in breve \textsl{groupid}, ed identificato dall'acronimo -\acr{gid}, e sono quelli che vengono usati dal kernel per identificare -l'utente. +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 per ogni processo dell'utente a cui appartiene ed impedire ad altri utenti di interferire con @@ -365,15 +369,19 @@ usare le varie estensioni al linguaggio e al preprocessore da esso supportate. Uno dei problemi di portabilità del codice più comune è quello dei tipi di dati utilizzati nei programmi, che spesso variano da sistema a sistema, o anche da una architettura ad un altra (ad esempio passando da macchine con -processori 32 bit a 64). - -Storicamente alcuni tipi di dati definiti dallo standard ANSI C sono sempre -stati associati ad alcune variabili nei sistemi Unix, ad esempio la posizione -corrente all'interno di un file è sempre stato associato ad un intero a 32 -bit, mentre il numero di dispositivo è sempre stato associato ad un intero a -16 bit. Tutto questo ovviamente costituisce un incubo per la portabilità tutte -le volte che, con l'evolversi delle piattaforme hardware, alcuni di questi -tipi si sono rivelati inadeguati, e se ne è dovuto cambiare la dimensione. +processori 32 bit a 64). In particolare questo è vero nell'uso dei cosiddetti +\textit{tipi elementari}\index{tipo!elementare} del linguaggio C (come +\ctyp{int}) la cui dimensione varia a seconda dell'architettura hardware. + +Storicamente alcuni tipi nativi dello standard ANSI C sono sempre stati +associati ad alcune variabili nei sistemi Unix, dando per scontata la +dimensione. Ad esempio la posizione corrente all'interno di un file è sempre +stata associata ad un intero a 32 bit, mentre il numero di dispositivo è +sempre stato associato ad un intero a 16 bit. Storicamente questi erano +definiti rispettivamente come \ctyp{int} e \ctyp{short}, ma tutte le volte +che, con l'evolversi ed il mutare delle piattaforme hardware, alcuni di questi +tipi si sono rivelati inadeguati o sono cambiati, ci si è trovati di fronte ad +una infinita serie di problemi di portabilità. \begin{table}[htb] \footnotesize @@ -408,10 +416,11 @@ tipi si sono rivelati inadeguati, e se ne \end{table} Per questo motivo tutte le funzioni di libreria di solito non fanno -riferimento ai tipi standard del linguaggio C, ma ad una serie di \textsl{tipi - primitivi}, riportati in \tabref{tab:intro_primitive_types}, caratteristici -di ogni sistema, definiti nell'header file \file{sys/types.h}, che associano i -tipi utilizzati dalle funzioni di sistema ai tipi elementari supportati dal +riferimento ai tipi elementari dello standard del linguaggio C, ma ad una +serie di \textsl{tipi primitivi}\index{tipo!primitivo} del sistema, riportati +in \tabref{tab:intro_primitive_types}, e definiti nell'header file +\file{sys/types.h}, in modo da mantenere completamente indipendenti i tipi +utilizzati dalle funzioni di sistema dai tipi elementari supportati dal compilatore C. @@ -440,15 +449,14 @@ 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 si può parlare di POSIX.4 come di POSIX.1b). -Si tenga presente però che nuove specifiche e proposte di standardizzazione si -aggiungono continuamente, mentre le versioni precedenti vengono riviste; +Si tenga presente inoltre che nuove specifiche e proposte di standardizzazione +si aggiungono continuamente, mentre le versioni precedenti vengono riviste; talvolta poi i riferimenti cambiamo 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 è: \href{http://www.pasc.org/standing/sd11.html} {http://www.pasc.org/standing/sd11.html}. - \begin{table}[htb] \footnotesize \centering @@ -462,13 +470,13 @@ 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 & --- & Threads \\ + POSIX.4a& 1003.1c & --- & 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 \\ POSIX.8 & 1003.1f& 9945-1& Accesso ai file via rete \\ - POSIX.9 & 1003.9 & --- & Intercaccia per il Fortran-77 \\ - POSIX.12& 1003.1g& 9945-1& Sockets \\ + POSIX.9 & 1003.9 & --- & Interfaccia per il Fortran-77 \\ + POSIX.12& 1003.1g& 9945-1& Socket \\ \hline \end{tabular} \caption{Elenco dei vari standard POSIX e relative denominazioni.} @@ -554,7 +562,7 @@ richiede sia X11 che Motif). La conformit del nome \textit{Unix 98}, usato spesso anche per riferirsi allo standard. -\subsection{Lo ``standard'' BSD} +\subsection{Lo ``\textsl{standard}'' BSD} \label{sec:intro_bsd} Lo sviluppo di BSD iniziò quando la fine della collaborazione fra l'Università @@ -663,7 +671,7 @@ Le macro disponibili per i vari standard sono le seguenti: standard ISO C, POSIX.1, POSIX.2, and X/Open. \item[\macro{\_XOPEN\_SOURCE}] definendo questa macro si attivano le funzionalità descritte nella \textit{X/Open Portability Guide}. Anche queste - sono un soprainsieme di quelle definite in POSIX.1 e POSIX.2 ed in effetti + 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