X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=intro.tex;h=611bc37478e15e095ba691c103cbd76e9603e173;hp=e4bcdee976e7fcc1a72d7002f2e2231c1f9ad7c6;hb=0c4a9ed958f4797e1cf4dc90e0c0358e302956f5;hpb=9949b501aea36905b12f069e11743b70b3e2df57 diff --git a/intro.tex b/intro.tex index e4bcdee..611bc37 100644 --- a/intro.tex +++ b/intro.tex @@ -1,6 +1,6 @@ %% intro.tex %% -%% Copyright (C) 2000-2014 Simone Piccardi. Permission is granted to +%% Copyright (C) 2000-2015 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 "Un preambolo", @@ -116,11 +116,13 @@ fig.~\ref{fig:intro_sys_struct}. \label{fig:intro_sys_struct} \end{figure} -Una parte del kernel, lo \itindex{scheduler} \textit{scheduler}, si occupa di -stabilire, sulla base di un opportuno calcolo delle priorità e con una -suddivisione appropriata del tempo di processore, quali fra i vari -``\textsl{processi}'' presenti nel sistema deve essere eseguito, realizzando -il cosiddetto \itindex{preemptive~multitasking} \textit{preemptive +\itindbeg{scheduler} + +Una parte del kernel, lo \textit{scheduler}, si occupa di stabilire, sulla +base di un opportuno calcolo delle priorità e con una suddivisione appropriata +del tempo di processore, quali fra i vari ``\textsl{processi}'' presenti nel +sistema deve essere eseguito, realizzando il cosiddetto +\itindex{preemptive~multitasking} \textit{preemptive multitasking}.\footnote{si chiama così quella gestione del \textit{multitasking} in cui è il kernel a decidere a chi assegnare l'uso della CPU, potendo interrompere l'esecuzione di un processo in qualunque @@ -130,6 +132,8 @@ attraverso delle ``\textsl{chiamate al sistema}'' (vedi sez.~\ref{sec:intro_syscall}) che restituiranno il controllo al kernel per eseguire le operazioni necessarie. +\itindend{scheduler} + La memoria viene sempre gestita dal kernel attraverso il meccanismo della \index{memoria~virtuale} \textsl{memoria virtuale}, che consente di assegnare a ciascun processo uno spazio di indirizzi ``\textsl{virtuale}'' (vedi @@ -342,13 +346,12 @@ L'utente e il gruppo sono identificati dal kernel un identificativo numerico, la cui corrispondenza ad un nome espresso in caratteri è inserita nei due file \conffile{/etc/passwd} e \conffile{/etc/group}.\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 - \itindex{Name~Service~Switch~(NSS)} \textit{Name Service Switch}, su varie - tipologie di supporti, compresi server centralizzati come LDAP.} Questi -identificativi sono l'\textit{user identifier}, detto in breve -\textsl{user-ID}, ed indicato dall'acronimo \ids{UID}, e il \textit{group - identifier}, detto in breve \textsl{group-ID}, ed identificato dall'acronimo -\ids{GID}, torneremo in dettaglio su questo argomento in + informazioni possono essere mantenute, con l'uso del \textit{Name Service + Switch}, su varie tipologie di supporti, compresi server centralizzati + come LDAP.} Questi identificativi sono l'\textit{user identifier}, detto in +breve \textsl{user-ID}, ed indicato dall'acronimo \ids{UID}, e il +\textit{group identifier}, detto in breve \textsl{group-ID}, ed identificato +dall'acronimo \ids{GID}, torneremo in dettaglio su questo argomento in sez.~\ref{sec:proc_perms}. Il kernel conosce ed utilizza soltanto questi valori numerici, i nomi ad essi associati sono interamente gestiti in \textit{user space} con opportune funzioni di libreria, torneremo su questo @@ -448,10 +451,10 @@ fig.~\ref{fig:file_VFS_scheme}. \end{figure} Questa interfaccia resta la stessa anche quando, invece che a dei normali -file, si accede alle periferiche coi citati \index{file!di~dispositivo} file -di dispositivo, solo che in questo caso invece di usare il codice del -filesystem che accede al disco, il \textit{Virtual File System} eseguirà -direttamente il codice del kernel che permette di accedere alla periferica. +file, si accede alle periferiche coi citati file di dispositivo, solo che in +questo caso invece di usare il codice del filesystem che accede al disco, il +\textit{Virtual File System} eseguirà direttamente il codice del kernel che +permette di accedere alla periferica. \itindend{Virtual~File~System} @@ -475,9 +478,9 @@ viene posto alla radice dell'albero dei file. Tutti gli ulteriori filesystem che possono essere disponibili su altri dispositivi dovranno a loro volta essere inseriti nell'albero, montandoli su altrettante directory del filesystem radice, su quelli che vengono chiamati -\index{mount~point} \textit{mount point}. Questo comunque avverrà sempre in -un secondo tempo, in genere a cura dei programmi eseguiti nella procedura di -inizializzazione del sistema, grazie alle funzioni che tratteremo in +\textit{mount point}. Questo comunque avverrà sempre in un secondo tempo, in +genere a cura dei programmi eseguiti nella procedura di inizializzazione del +sistema, grazie alle funzioni che tratteremo in sez.~\ref{sec:filesystem_mounting}. @@ -515,7 +518,7 @@ directory. All'interno dello stesso albero si potranno poi inserire anche tutti gli altri oggetti previsti l'interfaccia del \itindex{Virtual~File~System} VFS (su cui torneremo in sez.~\ref{sec:file_file_types}), come le fifo, i collegamenti simbolici, i -socket e gli stessi \index{file!di~dispositivo} file di dispositivo. +socket e gli stessi file di dispositivo. La convenzione usata nei sistemi unix-like per indicare i \textit{pathname} dei file è quella di usare il carattere ``\texttt{/}'' come separatore fra i @@ -605,25 +608,27 @@ completo in tab.~\ref{tab:file_file_types}. \multicolumn{2}{|c|}{\textbf{Tipo di file}} & \textbf{Descrizione} \\ \hline \hline - \textit{regular file} & \textsl{file regolare} & - Un file che contiene dei dati (l'accezione normale di file).\\ - \textit{directory} & \textsl{cartella o direttorio} & - Un file che contiene una lista di nomi associati a degli - \itindex{inode} \textit{inode} (vedi sez.~\ref{sec:file_vfs_work}).\\ - \textit{symbolic link} & \textsl{collegamento simbolico} & - Un file che contiene un riferimento ad un altro file/directory.\\ - \textit{char device} & \textsl{dispositivo a caratteri} & - Un file \textsl{speciale} che identifica una periferica ad accesso a - caratteri.\\ - \textit{block device} & \textsl{dispositivo a blocchi} & - Un file \textsl{speciale} che identifica una periferica ad accesso a - blocchi.\\ - \textit{fifo} & ``\textsl{coda}'' & - Un file \textsl{speciale} che identifica una linea di comunicazione - unidirezionale (vedi sez.~\ref{sec:ipc_named_pipe}).\\ - \textit{socket} & ``\textsl{presa}''& - Un file \textsl{speciale} che identifica una linea di comunicazione - bidirezionale (vedi cap.~\ref{cha:socket_intro}).\\ + \textit{regular file} & \textsl{file regolare} & Un file che contiene dei dati (l'accezione + normale di file).\\ + \textit{directory} & \textsl{cartella o direttorio} & Un file che contiene una lista + di nomi associati a degli + \textit{inode} (vedi + sez.~\ref{sec:file_vfs_work}).\\ + \textit{symbolic link} & \textsl{collegamento simbolico} & Un file che contiene un + riferimento ad un altro + file/directory.\\ + \textit{char device} & \textsl{dispositivo a caratteri} & Un file \textsl{speciale} + che identifica una periferica + ad accesso a caratteri.\\ + \textit{block device} & \textsl{dispositivo a blocchi} & Un file \textsl{speciale} + che identifica una periferica + ad accesso a blocchi.\\ + \textit{fifo} & ``\textsl{coda}'' & Un file \textsl{speciale} che + identifica una linea di comunicazione + unidirezionale (vedi sez.~\ref{sec:ipc_named_pipe}).\\ + \textit{socket} & ``\textsl{presa}''& Un file \textsl{speciale} che identifica una linea di + comunicazione bidirezionale (vedi + cap.~\ref{cha:socket_intro}).\\ \hline \end{tabular} \caption{Tipologia dei file definiti nel VFS} @@ -879,7 +884,8 @@ infinita serie di problemi di portabilità. \type{dev\_t} & Numero di dispositivo (vedi sez.~\ref{sec:file_mknod}).\\ \type{gid\_t} & Identificatore di un gruppo (vedi sez.~\ref{sec:proc_access_id}).\\ - \type{ino\_t} & Numero di \itindex{inode} \textit{inode}.\\ + \type{ino\_t} & Numero di \textit{inode} + (vedi sez.~\ref{sec:file_vfs_work}).\\ \type{key\_t} & Chiave per il System V IPC (vedi sez.~\ref{sec:ipc_sysv_generic}).\\ \type{loff\_t} & Posizione corrente in un file.\\ @@ -893,8 +899,7 @@ infinita serie di problemi di portabilità. \type{size\_t} & Dimensione di un oggetto.\\ \type{ssize\_t} & Dimensione in numero di byte ritornata dalle funzioni.\\ \type{ptrdiff\_t}& Differenza fra due puntatori.\\ - \type{time\_t} & Numero di secondi (in \itindex{calendar~time} - \textit{calendar time}, vedi + \type{time\_t} & Numero di secondi (in \textit{calendar time}, vedi sez.~\ref{sec:sys_time}).\\ \type{uid\_t} & Identificatore di un utente (vedi sez.~\ref{sec:proc_access_id}).\\ @@ -1068,12 +1073,11 @@ sistema e che sono definite nello standard POSIX.2. Nelle versioni più recenti del kernel e delle librerie sono inoltre supportate ulteriori funzionalità aggiunte dallo standard POSIX.1c per quanto riguarda i -\itindex{thread} \textit{thread} (vedi cap.~\ref{cha:threads}), e dallo -standard POSIX.1b per quanto riguarda i segnali e lo \itindex{scheduler} -scheduling real-time (sez.~\ref{sec:sig_real_time} e -sez.~\ref{sec:proc_real_time}), la misura del tempo, i meccanismi di -intercomunicazione (sez.~\ref{sec:ipc_posix}) e l'I/O asincrono -(sez.~\ref{sec:file_asyncronous_io}). +\textit{thread} (vedi cap.~\ref{cha:threads}), e dallo standard POSIX.1b per +quanto riguarda i segnali e lo scheduling real-time +(sez.~\ref{sec:sig_real_time} e sez.~\ref{sec:proc_real_time}), la misura del +tempo, i meccanismi di intercomunicazione (sez.~\ref{sec:ipc_posix}) e l'I/O +asincrono (sez.~\ref{sec:file_asyncronous_io}). Lo standard principale resta comunque POSIX.1, che continua ad evolversi; la versione più nota, cui gran parte delle implementazioni fanno riferimento, e @@ -1275,12 +1279,25 @@ in essi definite, sono illustrate nel seguente elenco: \macro{\_GNU\_SOURCE}) è stata a sua volta attivata, nel qual caso queste hanno la precedenza. Se però si definisce \macro{\_BSD\_SOURCE} dopo aver definito una di queste macro, l'effetto sarà quello di dare la precedenza - alle funzioni in forma BSD. + alle funzioni in forma BSD. Questa macro è stata deprecata a partire dalle + \acr{glibc} 2.20, essendo ricompresa in \macro{\_DEFAULT\_SOURCE} che è + definita di default. \item[\macro{\_SVID\_SOURCE}] definendo questa macro si rendono disponibili le funzionalità derivate da SVID. Esse comprendono anche quelle definite negli standard ISO C, POSIX.1, POSIX.2, e X/Open (XPG$n$) illustrati in - precedenza. + precedenza. Questa macro è stata deprecata a partire dalle \acr{glibc} 2.20, + essendo ricompresa in \macro{\_DEFAULT\_SOURCE} che è definita di default. + +\item[\macro{\_DEFAULT\_SOURCE}] questa macro abilita le definizioni + considerate il \textit{default}, comprese quelle richieste dalla standard + POSIX.1-2008, ed è sostanzialente equivalente a \macro{\_SVID\_SOURCE} + \macro{\_BSD\_SOURCE}] e \macro{\_POSIX\_C\_SOURCE}. Essendo predefinita non + è necessario usarla a meno di non aver richiesto delle definizioni più + restrittive sia con altre macro che con i flag del compilatore, nel qual + caso abilita le funzioni che altrimenti sarebbero disabilitate. Questa macro + è stata introdotta a partire dalle \acr{glibc} 2.19 e consente di deprecare + \macro{\_SVID\_SOURCE} e \macro{\_BSD\_SOURCE}]. \item[\macro{\_XOPEN\_SOURCE}] definendo questa macro si rendono disponibili le funzionalità descritte nella \textit{X/Open Portability Guide}. Anche @@ -1323,6 +1340,12 @@ in essi definite, sono illustrate nel seguente elenco: viene tuttora riconosciuta come equivalente di \macro{\_ISOC99\_SOURCE} per compatibilità. +\item[\macro{\_ISOC11\_SOURCE}] definendo questa macro si rendono disponibili + le funzionalità previste per la revisione delle librerie standard del C + introdotte con lo standard ISO C11, e abilita anche quelle previste dagli + standard C99 e C95. La macro è definita a partire dalla versione 2.16 della + \acr{glibc}. + \item[\macro{\_GNU\_SOURCE}] definendo questa macro si rendono disponibili tutte le funzionalità disponibili nei vari standard oltre a varie estensioni specifiche presenti solo nella \acr{glibc} ed in Linux. Gli standard coperti