X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=ipc.tex;h=f3a2ec75f9ad64d8adc21a1c330fdc08d5fdcf2a;hp=81ad3cf624dc3e73c0c3ddc8f23e3614bc778272;hb=dcf2c2df897955ff3503a7c426025457ab456fd7;hpb=ffb12837c5ed8ccc095bc9c88349cd19b5e6b472 diff --git a/ipc.tex b/ipc.tex index 81ad3cf..f3a2ec7 100644 --- a/ipc.tex +++ b/ipc.tex @@ -649,12 +649,12 @@ state raccolte nella libreria \file{libgapil.so}, per poter usare quest'ultima occorrerà definire la variabile di ambiente \envvar{LD\_LIBRARY\_PATH} in modo che il linker dinamico possa accedervi. -In generale questa variabile indica il \itindex{pathname} \textit{pathname} -della directory contenente la libreria. Nell'ipotesi (che daremo sempre per -verificata) che si facciano le prove direttamente nella directory dei sorgenti -(dove di norma vengono creati sia i programmi che la libreria), il comando da -dare sarà \code{export LD\_LIBRARY\_PATH=./}; a questo punto potremo lanciare -il server, facendogli leggere una decina di frasi, con: +In generale questa variabile indica il \textit{pathname} della directory +contenente la libreria. Nell'ipotesi (che daremo sempre per verificata) che si +facciano le prove direttamente nella directory dei sorgenti (dove di norma +vengono creati sia i programmi che la libreria), il comando da dare sarà +\code{export LD\_LIBRARY\_PATH=./}; a questo punto potremo lanciare il server, +facendogli leggere una decina di frasi, con: \begin{Verbatim} [piccardi@gont sources]$ ./fortuned -n10 \end{Verbatim} @@ -882,13 +882,13 @@ nome di un file ed un numero di versione; il suo prototipo è: \end{functions} La funzione determina un valore della chiave sulla base di \param{pathname}, -che deve specificare il \itindex{pathname} \textit{pathname} di un file -effettivamente esistente e di un numero di progetto \param{proj\_id)}, che di -norma viene specificato come carattere, dato che ne vengono utilizzati solo -gli 8 bit meno significativi.\footnote{nelle libc4 e libc5, come avviene in - SunOS, l'argomento \param{proj\_id} è dichiarato tipo \ctyp{char}, la - \acr{glibc} usa il prototipo specificato da XPG4, ma vengono lo stesso - utilizzati gli 8 bit meno significativi.} +che deve specificare il \textit{pathname} di un file effettivamente esistente +e di un numero di progetto \param{proj\_id)}, che di norma viene specificato +come carattere, dato che ne vengono utilizzati solo gli 8 bit meno +significativi.\footnote{nelle libc4 e libc5, come avviene in SunOS, + l'argomento \param{proj\_id} è dichiarato tipo \ctyp{char}, la \acr{glibc} + usa il prototipo specificato da XPG4, ma vengono lo stesso utilizzati gli 8 + bit meno significativi.} Il problema è che anche così non c'è la sicurezza che il valore della chiave sia univoco, infatti esso è costruito combinando il byte di \param{proj\_id)} @@ -2193,7 +2193,7 @@ Alla creazione di un nuovo insieme viene allocata una nuova strutture \struct{semid\_ds} ed il relativo vettore di strutture \struct{sem}. Quando si richiede una operazione viene anzitutto verificato che tutte le operazioni possono avere successo; se una di esse comporta il blocco del processo il -kernel crea una struttura \struct{sem\_queue} che viene aggiunta in fondo alla +kernel crea una struttura \kstruct{sem\_queue} che viene aggiunta in fondo alla coda di attesa associata a ciascun insieme di semafori\footnote{che viene referenziata tramite i campi \var{sem\_pending} e \var{sem\_pending\_last} di \struct{semid\_ds}.}. @@ -2213,7 +2213,7 @@ all'operazione (\var{sleeper}) viene riportato a \textit{running}; il tutto viene ripetuto fin quando non ci sono più operazioni eseguibili o si è svuotata la coda. Per gestire il meccanismo del ripristino tutte le volte che per un'operazione si è specificato il flag \const{SEM\_UNDO} viene mantenuta -per ciascun insieme di semafori una apposita struttura \struct{sem\_undo} che +per ciascun insieme di semafori una apposita struttura \kstruct{sem\_undo} che contiene (nel vettore puntato dal campo \var{semadj}) un valore di aggiustamento per ogni semaforo cui viene sommato l'opposto del valore usato per l'operazione. @@ -2224,7 +2224,7 @@ all'insieme di cui fa parte il semaforo, che viene usata per invalidare le strutture se questo viene cancellato o per azzerarle se si è eseguita una operazione con \func{semctl}; l'altra associata al processo che ha eseguito l'operazione;\footnote{attraverso il campo \var{semundo} di - \struct{task\_struct}, come mostrato in \ref{fig:ipc_sem_schema}.} quando un + \kstruct{task\_struct}, come mostrato in \ref{fig:ipc_sem_schema}.} quando un processo termina, la lista ad esso associata viene scandita e le operazioni applicate al semaforo. Siccome un processo può accumulare delle richieste di ripristino per semafori differenti chiamate attraverso diverse chiamate a @@ -3284,8 +3284,8 @@ possono avere o meno una corrispondenza sul filesystem; tutto quello che è richiesto è che: \begin{itemize*} \item i nomi devono essere conformi alle regole che caratterizzano i - \itindex{pathname} \textit{pathname}, in particolare non essere più lunghi di - \const{PATH\_MAX} byte e terminati da un carattere nullo. + \textit{pathname}, in particolare non essere più lunghi di \const{PATH\_MAX} + byte e terminati da un carattere nullo. \item se il nome inizia per una \texttt{/} chiamate differenti allo stesso nome fanno riferimento allo stesso oggetto, altrimenti l'interpretazione del nome dipende dall'implementazione. @@ -3658,7 +3658,7 @@ Se la dimensione specificata da \param{msg\_len} non è sufficiente a contenere il messaggio, entrambe le funzioni, al contrario di quanto avveniva nelle code di messaggi di SysV, ritornano un errore di \errcode{EMSGSIZE} senza estrarre il messaggio. È pertanto opportuno eseguire sempre una chiamata a -\func{mq\_getaddr} prima di eseguire una ricezione, in modo da ottenere la +\func{mq\_getattr} prima di eseguire una ricezione, in modo da ottenere la dimensione massima dei messaggi sulla coda, per poter essere in grado di allocare dei buffer sufficientemente ampi per la lettura. @@ -3729,7 +3729,7 @@ valori di tab.~\ref{tab:sigevent_sigev_notify}.\footnote{la pagina di manuale \const{SIGEV\_SIGNAL}).} Il metodo consigliato è quello di usare \const{SIGEV\_SIGNAL} usando il campo \var{sigev\_signo} per indicare il quale segnale deve essere inviato al processo. Inoltre il campo \var{sigev\_value} è -un puntatore ad una struttura \struct{sigval\_t} (definita in +un puntatore ad una struttura \struct{sigval} (definita in fig.~\ref{fig:sig_sigval}) che permette di restituire al gestore del segnale un valore numerico o un indirizzo,\footnote{per il suo uso si riveda la trattazione fatta in sez.~\ref{sec:sig_real_time} a proposito dei segnali @@ -4018,12 +4018,12 @@ esistente o per crearne uno nuovi, i relativi prototipi sono: L'argomento \param{name} definisce il nome del semaforo che si vuole utilizzare, ed è quello che permette a processi diversi di accedere allo -stesso semaforo. Questo deve essere specificato con un pathname nella forma -\texttt{/qualchenome}, che non ha una corrispondenza diretta con un pathname -reale; con Linux infatti i file associati ai semafori sono mantenuti nel -filesystem virtuale \texttt{/dev/shm}, e gli viene assegnato automaticamente -un nome nella forma \texttt{sem.qualchenome}.\footnote{si ha cioè una - corrispondenza per cui \texttt{/qualchenome} viene rimappato, nella +stesso semaforo. Questo deve essere specificato con un \textit{pathname} nella +forma \texttt{/qualchenome}, che non ha una corrispondenza diretta con un +\textit{pathname} reale; con Linux infatti i file associati ai semafori sono +mantenuti nel filesystem virtuale \texttt{/dev/shm}, e gli viene assegnato +automaticamente un nome nella forma \texttt{sem.qualchenome}.\footnote{si ha + cioè una corrispondenza per cui \texttt{/qualchenome} viene rimappato, nella creazione tramite \func{sem\_open}, su \texttt{/dev/shm/sem.qualchenome}.} L'argomento \param{oflag} è quello che controlla le modalità con cui opera la @@ -4129,7 +4129,7 @@ programma possa proseguire. La seconda variante di \func{sem\_wait} è una estensione specifica che può essere utilizzata soltanto se viene definita la macro \macro{\_XOPEN\_SOURCE} ad un valore di 600 prima di includere \headfile{semaphore.h}, la funzione è -\func{sem\_timedwait}, ed il suo prototipo è: +\funcd{sem\_timedwait}, ed il suo prototipo è: \begin{functions} \headdecl{semaphore.h}