From c3fd21cb52ca5e27011f68c621ff8d3ae1cd50d1 Mon Sep 17 00:00:00 2001 From: Simone Piccardi Date: Tue, 9 Jan 2007 17:11:04 +0000 Subject: [PATCH] Correzioni minime al'introduzione ai semafori Posix. --- ipc.tex | 58 ++++++++++++++++++++++++++++----------------------------- 1 file changed, 28 insertions(+), 30 deletions(-) diff --git a/ipc.tex b/ipc.tex index f165026..617f46b 100644 --- a/ipc.tex +++ b/ipc.tex @@ -3585,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 @@ -3633,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 @@ -3762,32 +3762,30 @@ 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. @@ -3980,7 +3978,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 @@ -3993,7 +3991,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 @@ -4018,7 +4016,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: -- 2.30.2