X-Git-Url: https://gapil.gnulinux.it/gitweb/?a=blobdiff_plain;f=ipc.tex;h=d4ab6c2f14ef873cbfd5c71654405d1cfe34ad87;hb=1e4d83a2fbb6ea0d957d96ebde4ebb486f69cd37;hp=f3a2ec75f9ad64d8adc21a1c330fdc08d5fdcf2a;hpb=dcf2c2df897955ff3503a7c426025457ab456fd7;p=gapil.git diff --git a/ipc.tex b/ipc.tex index f3a2ec7..d4ab6c2 100644 --- a/ipc.tex +++ b/ipc.tex @@ -1222,7 +1222,7 @@ cui queste strutture vengono mantenute dal kernel.\footnote{lo schema \label{fig:ipc_msqid_ds} \end{figure} -A ciascuna coda è associata una struttura \struct{msgid\_ds}, la cui +A ciascuna coda è associata una struttura \struct{msqid\_ds}, la cui definizione, è riportata in fig.~\ref{fig:ipc_msqid_ds}. In questa struttura il kernel mantiene le principali informazioni riguardo lo stato corrente della coda.\footnote{come accennato questo vale fino ai kernel della serie 2.2.x, @@ -2167,7 +2167,7 @@ Dato che, come già accennato in precedenza, in caso di uscita inaspettata i semafori possono restare occupati, abbiamo visto come \func{semop} permetta di attivare un meccanismo di ripristino attraverso l'uso del flag \const{SEM\_UNDO}. Il meccanismo è implementato tramite una apposita struttura -\struct{sem\_undo}, associata ad ogni processo per ciascun semaforo che esso +\kstruct{sem\_undo}, associata ad ogni processo per ciascun semaforo che esso ha modificato; all'uscita i semafori modificati vengono ripristinati, e le strutture disallocate. Per mantenere coerente il comportamento queste strutture non vengono ereditate attraverso una \func{fork} (altrimenti si @@ -2208,7 +2208,7 @@ Se invece tutte le operazioni possono avere successo queste vengono eseguite immediatamente, dopo di che il kernel esegue una scansione della coda di attesa (a partire da \var{sem\_pending}) per verificare se qualcuna delle operazioni sospese in precedenza può essere eseguita, nel qual caso la -struttura \struct{sem\_queue} viene rimossa e lo stato del processo associato +struttura \kstruct{sem\_queue} viene rimossa e lo stato del processo associato 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 @@ -2218,6 +2218,8 @@ 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. +%TODO verificare queste strutture \kstruct{sem\_queue} e \kstruct{sem\_undo} + Queste strutture sono mantenute in due liste,\footnote{rispettivamente attraverso i due campi \var{id\_next} e \var{proc\_next}.} una associata all'insieme di cui fa parte il semaforo, che viene usata per invalidare le