X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=prochand.tex;h=cc64ab80a9210683e22b5e6b6bf61cdf0a1d6356;hp=96297d754398ee2c90ebe2131e2ddc3d6394884c;hb=6a94b0f6f36bad6daf7b8d3f52d211661a135836;hpb=86de518c1856b983608c791e0bbbc265aaf8e9b4;ds=sidebyside diff --git a/prochand.tex b/prochand.tex index 96297d7..cc64ab8 100644 --- a/prochand.tex +++ b/prochand.tex @@ -113,7 +113,6 @@ organizzati in un albero di directory (si veda comando \cmd{pstree} che permette di visualizzare questa struttura, alla cui base c'è \cmd{init} che è progenitore di tutti gli altri processi. - Il kernel mantiene una tabella dei processi attivi, la cosiddetta \textit{process table}; per ciascun processo viene mantenuta una voce nella tabella dei processi costituita da una struttura \type{task\_struct}, che @@ -1348,7 +1347,7 @@ rispettivamente \textit{real} ed \textit{effective}. \hline \end{tabular} \caption{Identificatori di utente e gruppo associati a ciascun processo con - indicazione dei suffissi usate dalle varie funzioni di manipolazione.} + indicazione dei suffissi usati dalle varie funzioni di manipolazione.} \label{tab:proc_uid_gid} \end{table} @@ -1836,6 +1835,66 @@ il tempo di CPU per l'esecuzione dei processi ed oggetto di numerose ricerche; in ogni caso essa dipende in maniera essenziale anche dal tipo di utilizzo che deve essere fatto del sistema. +Si tenga presente comunque che l'utilizzo della CPU è soltanto una delle +risorse (insieme alla memoria e all'accesso alle periferiche) che sono +necessarie per l'esecuzione di un programma, e spesso non è neanche la più +importante. Per questo non è affatto detto che dare ad un programma la massima +priorità di esecuzione abbia risultati significativi in termini di +prestazioni. + +La caratteristica specifica di un sistema multitasking come Linux è quella del +cosiddetto \textit{prehemptive multitasking}: questo significa che al +contrario di altri sistemi (che usano invece il cosiddetto \textit{cooperative + multitasking}) non sono i singoli processi, ma il kernel stesso a decidere +quando la CPU deve essere passata ad un altro processo. Come accennato in +\secref{sec:proc_hierarchy} questa scelta viene eseguita dallo +\textit{scheduler} il cui scopo è quello di distribuire al meglio il tempo di +CPU fra i vari processi. + +Il Linux un processo può trovarsi in uno degli stati riportati in + + + +\begin{table}[htb] + \centering + \begin{tabular}[c]{|l|c|p{8cm}|} + \hline + \textbf{Stato} & \texttt{STAT} & \textbf{Descrizione} \\ + \hline + \hline + \textbf{Runnable} & \texttt{R} & Il processo è in esecuzione o è pronto ad + essere eseguito (cioè è in attesa che gli venga assegnata la CPU). \\ + \textbf{Sleep} & \texttt{S} & Il processo processo è in attesa di un + risposta dal sistema, ma può essere interrotto da un segnale. \\ + \textbf{Uninterrutible Sleep} & \texttt{D} & Il processo è in + attesa di un risposta dal sistema (in genere per I/O), e non può essere + interrotto in nessuna circostanza. \\ + \textbf{Stopped} & \texttt{T} & Il processo è stato fermato con un + \macro{SIGSTOP}, o è tracciato.\\ + \textbf{Zombie} & \texttt{Z} & Il processo è terminato ma il suo stato di + terminazione non è ancora stato letto dal padre. \\ + \hline + \end{tabular} + \caption{Tabella degli stati possibili per processo in Linux, si sono + riportati nella colonna \texttt{STAT} i valori dello stato ottenibili + dall'output del comando \cmd{ps}.} + \label{tab:proc_proc_states} +\end{table} + + + + +Una delle caratteristiche c + +,\footnote{lo stato di un processo + è riportato nel campo \texttt{STAT} dell'output del comando \cmd{ps}, + abbiamo già visto che lo stato di \textit{zombie} è indicato con \texttt{Z}, + gli stati \textit{runnable}, \textit{sleep} e di I/O (\textit{uninteruttible + sleep}) sono invece indicati con \texttt{R}, \texttt{S} e \texttt{D}.}) +la priorità assoluta viene invece ignorata per quelli che sono bloccati su una +richiesta di I/O o in stato di \textit{sleep} + + La cosa è resa ancora più complicata dal fatto che con le architetture multi-processore si introduce anche la problematica dovuta alla scelta di quale sia la CPU più opportuna da utilizzare.\footnote{nei processori moderni @@ -1850,12 +1909,8 @@ la risorsa \textsl{tempo di esecuzione}, la cui assegnazione sar dagli stessi meccanismi di scelta di priorità, solo che nel caso di più processori sarà a disposizione di più di un processo alla volta. -Si tenga presente inoltre che l'utilizzo della CPU è soltanto una delle -risorse (insieme alla memoria e all'accesso alle periferiche) che sono -necessarie per l'esecuzione di un programma, e spesso non è neanche la più -importante. Per questo non è affatto detto che dare ad un programma la massima -priorità di esecuzione abbia risultati significativi in termini di -prestazioni. + + Il meccanismo tradizionale di scheduling di Unix (che tratteremo in \secref{sec:proc_sched_stand}) è sempre stato basato su delle \textsl{priorità @@ -1882,13 +1937,7 @@ Il concetto di priorit l'esecuzione, vince sempre quello con la priorità assoluta più alta, anche quando l'altro è in esecuzione (grazie al \textit{prehemptive scheduling}). Ovviamente questo avviene solo per i processi che sono pronti per essere -eseguiti (cioè nello stato \textit{runnable},\footnote{lo stato di un processo - è riportato nel campo \texttt{STAT} dell'output del comando \cmd{ps}, - abbiamo già visto che lo stato di \textit{zombie} è indicato con \texttt{Z}, - gli stati \textit{runnable}, \textit{sleep} e di I/O (\textit{uninteruttible - sleep}) sono invece indicati con \texttt{R}, \texttt{S} e \texttt{D}.}) -la priorità assoluta viene invece ignorata per quelli che sono bloccati su una -richiesta di I/O o in stato di \textit{sleep}. La priorità assoluta viene in +eseguiti (cioè nello stato \textit{runnable}). La priorità assoluta viene in genere indicata con un numero intero, ed un valore più alto comporta una priorità maggiore. Su questa politica di scheduling torneremo in \secref{sec:proc_real_time}.