X-Git-Url: https://gapil.gnulinux.it/gitweb/?a=blobdiff_plain;f=prochand.tex;h=be5e9767554d85d7b5ef362e49dcaf4d0fdd3dc5;hb=af4cf2bcebfaf023cc182b8370b978194e8027f7;hp=07af836fe7c3e99189156b9b7b701353db1b8de3;hpb=193d612d40c5f81f5559ea6e11e70f6b6e51fb39;p=gapil.git diff --git a/prochand.tex b/prochand.tex index 07af836..be5e976 100644 --- a/prochand.tex +++ b/prochand.tex @@ -659,8 +659,9 @@ Le differenze fra padre e figlio dopo la \func{fork} invece sono:\footnote{a \item i \textit{lock} sui file (vedi sez.~\ref{sec:file_locking}) e sulla memoria (vedi sez.~\ref{sec:proc_mem_lock}), che non vengono ereditati dal figlio; -\item gli allarmi (vedi sez.~\ref{sec:sig_alarm_abort}) ed i segnali pendenti - (vedi sez.~\ref{sec:sig_gen_beha}), che per il figlio vengono cancellati. +\item gli allarmi, i timer (vedi sez.~\ref{sec:sig_alarm_abort}) ed i segnali + pendenti (vedi sez.~\ref{sec:sig_gen_beha}), che per il figlio vengono + cancellati. \item le operazioni di I/O asincrono in corso (vedi sez.~\ref{sec:file_asyncronous_io}) che non vengono ereditate dal figlio; \item gli aggiustamenti fatti dal padre ai semafori con \func{semop} (vedi @@ -669,7 +670,7 @@ Le differenze fra padre e figlio dopo la \func{fork} invece sono:\footnote{a sez.~\ref{sec:sig_notification}), che non vengono ereditate dal figlio; \item le mappature di memoria marcate come \const{MADV\_DONTFORK} (vedi sez.~\ref{sec:file_memory_map}) che non vengono ereditate dal figlio; -\item l'impostazione con \func{prctl} (vedi sez.~\ref{sec:prctl_xxx}) che +\item l'impostazione con \func{prctl} (vedi sez.~\ref{sec:process_prctl}) che notifica al figlio la terminazione del padre viene cancellata; \item il segnale di terminazione del figlio è sempre \const{SIGCHLD} anche qualora nel padre fosse stato modificato (vedi sez.~\ref{sec:process_clone}). @@ -1031,11 +1032,11 @@ quando un processo figlio entra nello stato \textit{stopped}\footnote{in realtà viene notificato soltanto il caso in cui il processo è stato fermato da un segnale di stop (vedi sez.~\ref{sec:sess_ctrl_term}), e non quello in cui lo stato \textit{stopped} è dovuto all'uso di \func{ptrace} (vedi - sez.~\ref{sec:xxx_ptrace}).} (vedi tab.~\ref{tab:proc_proc_states}), mentre -con \const{WCONTINUED} la funzione ritorna quando un processo in stato + sez.~\ref{sec:process_ptrace}).} (vedi tab.~\ref{tab:proc_proc_states}), +mentre con \const{WCONTINUED} la funzione ritorna quando un processo in stato \textit{stopped} riprende l'esecuzione per la ricezione del segnale \const{SIGCONT} (l'uso di questi segnali per il controllo di sessione è -dettagliato in sez.~\ref{sec:sess_ctrl_term}). +dettagliato in sez.~\ref{sec:sess_ctrl_term}). La terminazione di un processo figlio (così come gli altri eventi osservabili con \func{waitpid}) è chiaramente un evento asincrono rispetto all'esecuzione @@ -1538,11 +1539,11 @@ nell'esecuzione della funzione \func{exec}, queste sono: sez.~\ref{sec:thread_xxx}) sono cancellati e tutti gli oggetti ad essi relativi (vedi sez.~\ref{sec:thread_xxx}) rimossi; \item viene impostato il flag \const{PR\_SET\_DUMPABLE} di \func{prctl} (vedi - sez.~\ref{sec:prctl_xxx}) a meno che il programma da eseguire non sia + sez.~\ref{sec:process_prctl}) a meno che il programma da eseguire non sia \itindex{suid~bit} \acr{suid} o \itindex{sgid~bit} \acr{sgid} (vedi sez.~\ref{sec:proc_access_id}); \item il flag \const{PR\_SET\_KEEPCAPS} di \func{prctl} (vedi - sez.~\ref{sec:prctl_xxx}) viene cancellato; + sez.~\ref{sec:process_prctl}) viene cancellato; \item il nome del processo viene impostato al nome del file contenente il programma messo in esecuzione; \item il segnale di terminazione viene reimpostato a \const{SIGCHLD}; @@ -3261,11 +3262,14 @@ dei processi che gli appartengono,\footnote{per la modifica delle priorità di altri processi occorrono privilegi amministrativi, ed in particolare la capacità \const{CAP\_SYS\_NICE} (vedi sez.~\ref{sec:proc_capabilities}).} cioè quelli il cui user-ID reale corrisponde all'user-ID reale o effettivo del -chiamante. Data la possibilità di ottenere un blocco totale dello stesso, solo +chiamante. Data la possibilità di ottenere un blocco totale del sistema, solo l'amministratore\footnote{o un processo con la capacità \const{CAP\_SYS\_ADMIN} (vedi sez.~\ref{sec:proc_capabilities}).} può impostare un processo ad una priorità di I/O nella classe -\const{IOPRIO\_CLASS\_RT} o \const{IOPRIO\_CLASS\_IDLE}. +\const{IOPRIO\_CLASS\_RT}, lo stesso privilegio era richiesto anche per la +classe \const{IOPRIO\_CLASS\_IDLE} fino al kernel 2.6.24, ma dato che in +questo caso non ci sono effetti sugli altri processi questo limite è stato +rimosso a partire dal kernel 2.6.25. %TODO verificare http://lwn.net/Articles/355987/ @@ -3273,6 +3277,40 @@ impostare un processo ad una priorità di I/O nella classe % vedi man numa e le pagine di manuale relative % vedere anche dove metterle... + +\section{Funzioni di gestione avanzata} +\label{sec:proc_advanced_control} + +Nelle precedenti sezioni si sono trattate la gran parte delle funzioni che +attengono alla gestione ordinaria dei processi e delle loro proprietà più +comuni. Tratteremo qui alcune \textit{system call} specialistiche dedicate +alla gestione di alcune funzionalità specifiche ed avanzate il cui uso è in +genere piuttosto ridotto. + +\subsection{La system call \func{clone}} +\label{sec:process_clone} + +Da fare + +\subsection{La funzione \func{prctl}} +\label{sec:process_prctl} + +Da fare + +\subsection{La funzione \func{ptrace}} +\label{sec:process_ptrace} + +Da fare + +\subsection{L'accesso alle porte di I/O} +\label{sec:process_io_port} + +% +% TODO l'I/O sulle porte di I/O +% consultare le manpage di ioperm, iopl e outb + +Da fare + \section{Problematiche di programmazione multitasking} \label{sec:proc_multi_prog} @@ -3367,14 +3405,13 @@ cui si compiono le operazioni sulle risorse condivise (le cosiddette opportunamente protette da meccanismi di sincronizzazione (torneremo su queste problematiche di questo tipo in cap.~\ref{cha:IPC}). -\itindbeg{deadlock} -Un caso particolare di \textit{race condition} sono poi i cosiddetti -\textit{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} è 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. - +\itindbeg{deadlock} Un caso particolare di \textit{race condition} sono poi i +cosiddetti \textit{deadlock} (traducibile in \textsl{condizioni di stallo}), +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} è 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 \textit{deadlock} è quello in cui un flag di