X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=prochand.tex;h=6beef58d08f7d02e31c9d8896ff3da33bd475a16;hp=bddc07a62e9286dbc34a3bf675a9737d8f4e2c28;hb=e0cc9bf7b67899cae825bc33819aaac05c40561e;hpb=fd86592a845b5f76ad43ba2374ca0b798ffca595 diff --git a/prochand.tex b/prochand.tex index bddc07a..6beef58 100644 --- a/prochand.tex +++ b/prochand.tex @@ -456,13 +456,15 @@ attende il numero di secondi specificato, e procede nell'esecuzione del ciclo; alla conclusione del ciclo, prima di uscire, può essere specificato un altro periodo di attesa. -Se eseguiamo il comando senza specificare attese (come si può notare in -\texttt{\small 17--19} i valori predefiniti specificano di non attendere), -otterremo come output sul terminale: +Se eseguiamo il comando\footnote{che è preceduto dall'istruzione \code{export + LD\_LIBRARY\_PATH=./} per permettere l'uso delle librerie dinamiche.} +senza specificare attese (come si può notare in (\texttt{\small 17--19}) i +valori predefiniti specificano di non attendere), otterremo come output sul +terminale: \footnotesize \begin{verbatim} -[piccardi@selidor sources]$ ./forktest 3 +[piccardi@selidor sources]$ export LD_LIBRARY_PATH=./; ./forktest 3 Process 1963: forking 3 child Spawned 1 child, pid 1964 Child 1 successfully executing @@ -2151,8 +2153,8 @@ La funzione imposta la priorit tutti i processi indicati dagli argomenti \param{which} e \param{who}. La gestione dei permessi dipende dalle varie implementazioni; in Linux, secondo le specifiche dello standard SUSv3, e come avviene per tutti i sistemi che -derivano da SYSV, è richiesto che l'user-ID reale o effettivo del processo -chiamante corrispondano al real user id (e solo quello) del processo di cui si +derivano da SysV, è richiesto che l'user-ID reale o effettivo del processo +chiamante corrispondano al real user-ID (e solo quello) del processo di cui si vuole cambiare la priorità; per i sistemi derivati da BSD invece (SunOS, Ultrix, *BSD) la corrispondenza può essere anche con l'user-ID effettivo. @@ -2464,13 +2466,13 @@ condiviso, onde evitare problemi con le ottimizzazioni del codice. \textit{deadlock}\index{deadlock}} \label{sec:proc_race_cond} -Si definiscono \textit{race condition} tutte quelle situazioni in cui processi -diversi operano su una risorsa comune, ed in cui il risultato viene a -dipendere dall'ordine in cui essi effettuano le loro operazioni. Il caso -tipico è quello di un'operazione che viene eseguita da un processo in più -passi, e può essere compromessa dall'intervento di un altro processo che -accede alla stessa risorsa quando ancora non tutti i passi sono stati -completati. +Si definiscono \textit{race condition}\index{race condition} tutte quelle +situazioni in cui processi diversi operano su una risorsa comune, ed in cui il +risultato viene a dipendere dall'ordine in cui essi effettuano le loro +operazioni. Il caso tipico è quello di un'operazione che viene eseguita da un +processo in più passi, e può essere compromessa dall'intervento di un altro +processo che accede alla stessa risorsa quando ancora non tutti i passi sono +stati completati. Dato che in un sistema multitasking ogni processo può essere interrotto in qualunque momento per farne subentrare un'altro in esecuzione, niente può @@ -2483,22 +2485,22 @@ funzioner Per questo occorre essere ben consapevoli di queste problematiche, e del fatto che l'unico modo per evitarle è quello di riconoscerle come tali e prendere gli adeguati provvedimenti per far sì che non si verifichino. Casi tipici di -\textit{race condition} si hanno quando diversi processi accedono allo stesso -file, o nell'accesso a meccanismi di intercomunicazione come la memoria -condivisa. In questi casi, se non si dispone della possibilità di eseguire -atomicamente le operazioni necessarie, occorre che quelle parti di codice in -cui si compiono le operazioni sulle risorse condivise (le cosiddette +\textit{race condition}\index{race condition} si hanno quando diversi processi +accedono allo stesso file, o nell'accesso a meccanismi di intercomunicazione +come la memoria condivisa. In questi casi, se non si dispone della possibilità +di eseguire atomicamente le operazioni necessarie, occorre che quelle parti di +codice in cui si compiono le operazioni sulle risorse condivise (le cosiddette \textsl{sezioni critiche}\index{sezioni critiche}) del programma, siano opportunamente protette da meccanismi di sincronizzazione (torneremo su queste problematiche di questo tipo in \capref{cha:IPC}). -Un caso particolare di \textit{race condition} sono poi i cosiddetti -\textit{deadlock}\index{deadlock}, particolarmente gravi in quanto comportano -spesso il blocco completo di un servizio, e non il fallimento di una singola -operazione. Per definizione un \textit{deadlock}\index{deadlock} è una -situazione in cui due o più processi non sono più in grado di proseguire -perché ciascuno aspetta il risultato di una operazione che dovrebbe essere -eseguita dall'altro. +Un caso particolare di \textit{race condition}\index{race condition} sono poi +i cosiddetti \textit{deadlock}\index{deadlock}, particolarmente gravi in +quanto comportano spesso il blocco completo di un servizio, e non il +fallimento di una singola operazione. Per definizione un +\textit{deadlock}\index{deadlock} è una situazione in cui due o più processi +non sono più in grado di proseguire perché ciascuno aspetta il risultato di +una operazione che dovrebbe essere eseguita dall'altro. L'esempio tipico di una situazione che può condurre ad un