Qualche altra aggiunta minimale.
[gapil.git] / ipc.tex
diff --git a/ipc.tex b/ipc.tex
index 654ec7d6083c0e0bd2467031a59d50275aa245a9..e18dbbc157fcf487eddda20ff8a1613c69280e02 100644 (file)
--- a/ipc.tex
+++ b/ipc.tex
@@ -3250,12 +3250,11 @@ una interfaccia completamente nuova, che tratteremo in questa sezione.
 \subsection{Considerazioni generali}
 \label{sec:ipc_posix_generic}
 
-In Linux non tutti gli oggetti del POSIX IPC sono pienamente supportati nel
-kernel ufficiale; solo la memoria condivisa è presente con l'interfaccia
-completa, ma solo a partire dal kernel 2.4.x, i semafori sono forniti dalle
-\acr{glibc} nella sezione che implementa i thread POSIX, le code di messaggi
-non hanno alcun tipo di supporto ufficiale.  Per queste ultime esistono
-tuttavia dei patch e una libreria aggiuntiva.
+Oggi Linux supporta tutti gli oggetti definito nello standard POSIX per l'IPC,
+ma a lungo non è stato così; la memoria condivisa è presente a partire dal
+kernel 2.4.x, i semafori sono forniti dalle \acr{glibc} nella sezione che
+implementa i thread POSIX di nuova generazione che richiedono il kernel 2.6,
+le code di messaggi sono supportate a partire dal kernel 2.6.6.
 
 La caratteristica fondamentale dell'interfaccia POSIX è l'abbandono dell'uso
 degli identificatori e delle chiavi visti nel SysV IPC, per passare ai
@@ -3315,7 +3314,7 @@ processo che esegue la creazione.
 \label{sec:ipc_posix_mq}
 
 Le code di messaggi POSIX sono supportate da Linux a partire dalla versione
-2.6.6-rc1 del kerne;, \footnote{l'implementazione è dovuta a Michal Wronski e
+2.6.6-rc1 del kernel,\footnote{l'implementazione è dovuta a Michal Wronski e
   Krzysztof Benedyczak, e le relative informazioni si possono trovare su
   \href{http://www.geocities.com/wronski12/posix_ipc/index.html}
   {\texttt{http://www.geocities.com/wronski12/posix\_ipc/index.html}}.} In
@@ -3586,7 +3585,7 @@ valore della priorit
 
 Qualora la coda sia piena, entrambe le funzioni si bloccano, a meno che non
 sia stata selezionata in fase di apertura la modalità non
-bloccante,\footnote{o si sia impostato il flag \const{O\_NONBLOCK} sul fie
+bloccante,\footnote{o si sia impostato il flag \const{O\_NONBLOCK} sul file
   descriptor della coda.} nel qual caso entrambe ritornano \errcode{EAGAIN}.
 La sola differenza fra le due funzioni è che la seconda, passato il tempo
 massimo impostato con l'argomento \param{abs\_timeout},\footnote{deve essere
@@ -3634,7 +3633,7 @@ viene tolto dalla coda e la sua dimensione viene restituita come valore di
 ritorno.\footnote{si tenga presente che 0 è una dimensione valida la
   condizione di errore è restituita dal valore -1; Stevens in \cite{UNP2} fa
   notare che questo è uno dei casi in cui vale ciò che lo standard
-  \textsl{non} dice, una dimenzione nulla infatti, pur non essendo citata, non
+  \textsl{non} dice, una dimensione nulla infatti, pur non essendo citata, non
   viene proibita.}
 
 Se la dimensione specificata da \param{msg\_len} non è sufficiente a contenere
@@ -3763,37 +3762,58 @@ forma estesa.\footnote{di nuovo si faccia riferimento a quanto detto al
 \subsection{Semafori}
 \label{sec:ipc_posix_sem}
 
-Dei semafori POSIX esistono sostanzialmente due implementazioni; una è fatta a
-livello di libreria ed è fornita dalla libreria dei thread; questa però li
-implementa solo a livello di thread e non di processi.\footnote{questo
-  significa che i semafori sono visibili solo all'interno dei thread creati da
-  un singolo processo, e non possono essere usati come meccanismo di
-  sincronizzazione fra processi diversi.} Esiste però anche una libreria
-realizzata da Konstantin Knizhnik, che reimplementa l'interfaccia POSIX usando
-i semafori di SysV IPC, e che non vale comunque la pena di usare visto che i
-problemi sottolineati in sez.~\ref{sec:ipc_sysv_sem} rimangono, anche se
-mascherati.
-
-In realtà a partire dal kernel 2.5.7 è stato introdotto un meccanismo di
+Fino alla serie 2.4.x del kernel esistevano due implementazioni dei semafori
+POSIX; una parziale che li realizzava solo a livello di thread e non di
+processi,\footnote{questo significava che i semafori erano visibili solo
+  all'interno dei thread creati da un singolo processo, e non potevano essere
+  usati come meccanismo di sincronizzazione fra processi diversi.} presente
+nella sezione delle estensioni \textit{real-time} delle
+\acr{glibc},\footnote{quelle che si accedono collegandosi alla libreria
+  \texttt{librt}.} ed una che realizzava l'interfaccia POSIX usando le
+funzioni dei semafori di SysV IPC (mantenendo così tutti i problemi
+sottolineati in sez.~\ref{sec:ipc_sysv_sem}).
+
+A partire dal kernel 2.5.7 è stato introdotto un meccanismo di
 sincronizzazione completamente nuovo, basato sui cosiddetti
-\textit{futex}\footnote{la sigla sta per \textit{fast user mode mutex}.}, con
-il quale è stato possibile implementare una versione nativa dei semafori; esso
-è già stato usato con successo per reimplementare in maniera più efficiente
-tutte le direttive di sincronizzazione previste per i thread POSIX; e con il
-kernel della serie 2.6 e le nuove versioni delle \acr{glibc} che usano quella
-che viene chiamata la \textit{New Posix Thread Library} sono state
-implementate tutte le funzioni occorrenti. 
-
-Anche in questo caso (come per le code di messaggi) è necessario appoggiarsi
-alla libreria per le estensioni \textit{real-time} \texttt{librt}, questo
-significa che se si vuole utilizzare questa interfaccia, oltre ad utilizzare
-gli opportuni file di definizione, occorrerà compilare i programmi con
-l'opzione \texttt{-lrt}. 
+\textit{futex},\footnote{la sigla sta per \textit{fast user mode mutex}.} con
+il quale è stato possibile implementare una versione nativa dei semafori
+POSIX.  Grazie a questo con i kernel della serie 2.6 e le nuove versioni delle
+\acr{glibc} che usano questa nuova infrastruttura per quella che viene quella
+che viene chiamata \textit{New Posix Thread Library}, sono state implementate
+anche tutte le funzioni dell'interfaccia dei semafori POSIX.
+
+Anche in questo caso è necessario appoggiarsi alla libreria per le estensioni
+\textit{real-time} \texttt{librt}, questo significa che se si vuole utilizzare
+questa interfaccia, oltre ad utilizzare gli opportuni file di definizione,
+occorrerà compilare i programmi con l'opzione \texttt{-lrt}.
 
 % TODO trattare l'argomento a partire da man sem_overview.
 
 
 
+
+\begin{functions}
+  \headdecl{semaphore.h} 
+  
+  \funcdecl{sem\_t *sem_open(const char *name, int oflag)}
+  
+  \funcdecl{sem\_t *sem_open(const char *name, int oflag,, mode_t mode,
+    unsigned int value)} 
+
+  Crea un semaforo o ne apre uno esistente.
+  
+  \bodydesc{Le funzioni restituiscono il numero di byte del messaggio in caso
+    di successo e -1 in caso di errore; nel quel caso \var{errno} assumerà i
+    valori:
+    \begin{errlist}
+    \item[\errcode{EAGAIN}] Si è aperta la coda con \const{O\_NONBLOCK}, e la
+      coda è vuota.
+    \end{errlist}    
+    ed inoltre \errval{EBADF}, \errval{EINTR}, \errval{ENOMEM}, o
+    \errval{EINVAL}.}
+\end{functions}
+
+
 \subsection{Memoria condivisa}
 \label{sec:ipc_posix_shm}
 
@@ -3981,7 +4001,7 @@ restituendo al chiamante il valore di ritorno.
 % LocalWords:  PDF EPS lseek ESPIPE PPM Portable PixMap format pnmcrop PNG pnm
 % LocalWords:  pnmmargin png BarCode inode filesystem l'inode mknod mkfifo RDWR
 % LocalWords:  ENXIO deadlock client reinviate fortunes fortunefilename daemon
-% LocalWords:  FortuneServer FortuneParse FortuneClient pid libgapil  LD
+% LocalWords:  FortuneServer FortuneParse FortuneClient pid libgapil  LD librt
 % LocalWords:  PATH linker pathname ps tmp killall fortuned crash socket domain
 % LocalWords:  socketpair BSD sys protocol sv EAFNOSUPPORT EPROTONOSUPPORT AF
 % LocalWords:  EOPNOTSUPP SOCK SysV IPC Process Comunication ipc perm key exec
@@ -3994,7 +4014,7 @@ restituendo al chiamante il valore di ritorno.
 % LocalWords:  cmd struct buf EPERM RMID msgsnd msgbuf msgp msgsz msgflg EAGAIN
 % LocalWords:  NOWAIT EINTR mtype mtext long message sizeof LENGTH ts sleep BIG
 % LocalWords:  msgrcv ssize msgtyp NOERROR EXCEPT ENOMSG multiplexing select ls
-% LocalWords:  poll polling queue MQFortuneServer write init HandSIGTERM 
+% LocalWords:  poll polling queue MQFortuneServer write init HandSIGTERM  l'IPC
 % LocalWords:  MQFortuneClient mqfortuned mutex risorse' inter semaphore semget
 % LocalWords:  nsems SEMMNS SEMMSL semid otime semval sempid semncnt semzcnt nr
 % LocalWords:  SEMVMX SEMOPM semop SEMMNU SEMUME SEMAEM semnum union semun arg
@@ -4019,7 +4039,7 @@ restituendo al chiamante il valore di ritorno.
 % LocalWords:  EBUSY sigev SIGNAL signo value sigval siginfo all'userid MESGQ
 % LocalWords:  Konstantin Knizhnik futex tmpfs ramfs cache shared swap CONFIG
 % LocalWords:  lrt blocks PAGECACHE TRUNC CLOEXEC mmap ftruncate munmap FindShm
-% LocalWords:  CreateShm RemoveShm LIBRARY
+% LocalWords:  CreateShm RemoveShm LIBRARY Library
 
 
 %%% Local Variables: