%% intro.tex
%%
-%% Copyright (C) 2000-2002 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-2003 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 "Prefazione",
%% 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}
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
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
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
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
\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.
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
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.}
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à
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
includere i vari header file.
-\subsection{Gli standard di GNU/Linux}
-\label{sec:intro_linux_std}
+%% \subsection{Gli standard di GNU/Linux}
+%% \label{sec:intro_linux_std}
-Da fare (o cassare, a seconda del tempo e della voglia).
+%% Da fare (o cassare, a seconda del tempo e della voglia).