X-Git-Url: https://gapil.gnulinux.it/gitweb/?a=blobdiff_plain;f=prochand.tex;h=cd5c04bd7fa5b8a7f6b4b178ab3865b69e3fddb3;hb=9e76c5d9e9b74a6bdae0977ff5cff3b4d56abcc3;hp=510e69ac8f11c3262149395d7b955f753e1c93cc;hpb=2dd133c40d690671199991d8972169c32cbe19a7;p=gapil.git diff --git a/prochand.tex b/prochand.tex index 510e69a..cd5c04b 100644 --- a/prochand.tex +++ b/prochand.tex @@ -631,7 +631,7 @@ comune dopo l'esecuzione di una \func{fork} \item i limiti sulle risorse (vedi sez.~\ref{sec:sys_resource_limit}); \item il valori di \textit{nice}, le priorità real-time e le affinità di processore (vedi sez.~\ref{sec:proc_sched_stand}, - sez.~\ref{sec:proc_real_time} e sez.\ref{sec:proc_sched_multiprocess}); + sez.~\ref{sec:proc_real_time} e sez.~\ref{sec:proc_sched_multiprocess}); \item le variabili di ambiente (vedi sez.~\ref{sec:proc_environ}). \end{itemize*} Le differenze fra padre e figlio dopo la \func{fork} invece sono: @@ -648,7 +648,6 @@ Le differenze fra padre e figlio dopo la \func{fork} invece sono: per il figlio vengono cancellati. \end{itemize*} - Una seconda funzione storica usata per la creazione di un nuovo processo è \func{vfork}, che è esattamente identica a \func{fork} ed ha la stessa semantica e gli stessi errori; la sola differenza è che non viene creata la @@ -666,8 +665,9 @@ venne introdotta in BSD per migliorare le prestazioni. Dato che Linux supporta il \itindex{copy~on~write} \textit{copy on write} la perdita di prestazioni è assolutamente trascurabile, e l'uso di questa -funzione (che resta un caso speciale della system call \func{\_\_clone}) è -deprecato; per questo eviteremo di trattarla ulteriormente. +funzione, che resta un caso speciale della system call \func{clone} (che +tratteremo in dettaglio in sez.~\ref{sec:process_clone}) è deprecato; per +questo eviteremo di trattarla ulteriormente. \subsection{La conclusione di un processo} @@ -742,8 +742,6 @@ che sia cos terminato; si potrebbe avere cioè quello che si chiama un processo \textsl{orfano}. -% TODO verificare il reparenting - Questa complicazione viene superata facendo in modo che il processo orfano venga \textsl{adottato} da \cmd{init}. Come già accennato quando un processo termina, il kernel controlla se è il padre di altri processi in esecuzione: in @@ -2096,8 +2094,6 @@ attivi. In particolare prenderemo in esame i vari meccanismi con cui viene gestita l'assegnazione del tempo di CPU, ed illustreremo le varie funzioni di gestione. -% TODO: rivedere alla luce degli aggiornamenti del 2.6 (man sched_setscheduler) - \subsection{I meccanismi di \textit{scheduling}} \label{sec:proc_sched} @@ -2172,7 +2168,8 @@ fintanto che esso si trova in uno qualunque degli altri stati. 2.6.25, sostanzialmente identico all'\textbf{Uninterrutible Sleep} con la sola differenza che il processo può - terminato (con \const{SIGKILL}).\\ + terminato con \const{SIGKILL} (usato per + lo più per NFS).\\ \hline \end{tabular} \caption{Elenco dei possibili stati di un processo in Linux, nella colonna @@ -2181,8 +2178,6 @@ fintanto che esso si trova in uno qualunque degli altri stati. \label{tab:proc_proc_states} \end{table} -% TODO nel 2.6.25 è stato aggiunto TASK_KILLABLE, da capire dova va messo. - Si deve quindi tenere presente che l'utilizzo della CPU è soltanto una delle risorse che sono necessarie per l'esecuzione di un programma, e a seconda dello scopo del programma non è detto neanche che sia la più importante (molti @@ -2768,13 +2763,22 @@ real-time, e serve a far s da essere rimesso in coda alla lista dei processi con la stessa priorità per permettere ad un altro di essere eseguito; se però il processo è l'unico ad essere presente sulla coda l'esecuzione non sarà interrotta. In genere usano -questa funzione i processi in modalità \textit{fifo}, per permettere +questa funzione i processi con politica \const{SCHED\_FIFO}, per permettere l'esecuzione degli altri processi con pari priorità quando la sezione più urgente è finita. -% TODO: con il 2.6.23 il comportamento è stato leggermente modificato ed è -% stato introdotto /proc/sys/kernel/sched_compat_yield da mettere a 1 per aver -% la compatibilità con il precedente. +La funzione può essere utilizzata anche con processi che usano lo scheduling +ordinario, ma in questo caso il comportamento non è ben definito, e dipende +dall'implementazione. Fino al kernel 2.6.23 questo comportava che i processi +venissero messi in fondo alla coda di quelli attivi, con la possibilità di +essere rimessi in esecuzione entro breve tempo, con l'introduzione del +\textit{Completely Fair Scheduler} questo comportamento è cambiato ed un +processo che chiama la funzione viene inserito nella lista dei processi +inattivo, con un tempo molto maggiore.\footnote{è comunque possibile + ripristinare un comportamento analogo al precedente scrivendo il valore 1 + nel file \texttt{/proc/sys/kernel/sched\_compat\_yield}.} + + \subsection{Il controllo dello \textit{scheduler} per i sistemi multiprocessore} @@ -2884,8 +2888,8 @@ utilizzato per un compito importante (ad esempio per applicazioni real-time o la cui risposta è critica) e si vuole la massima velocità, con questa interfaccia diventa possibile selezionare gruppi di processori utilizzabili in maniera esclusiva. Lo stesso dicasi quando l'accesso a certe risorse (memoria -o periferiche) può avere un costo diverso a seconda del processore (come -avviene nelle architetture NUMA). +o periferiche) può avere un costo diverso a seconda del processore, come +avviene nelle architetture NUMA (\textit{Non-Uniform Memory Access}). Infine se un gruppo di processi accede alle stesse risorse condivise (ad esempio una applicazione con più \itindex{thread} \textit{thread}) può avere @@ -2967,6 +2971,18 @@ non avranno alcun risultato effettivo. \itindend{CPU~affinity} +%TODO trattare le priorità di I/O +% vedi man ioprio_set e Documentation/block/ioprio.txt + +\subsection{Le priorità per le operazioni di I/O} +\label{sec:io_priority} + +Una delle + + +%TODO trattare le funzionalità per il NUMA +% vedi man numa e le pagine di manuale relative +% vedere anche dove metterle... \section{Problematiche di programmazione multitasking} \label{sec:proc_multi_prog}