Differenze tra le versioni di "Sistemi operativi/Introduzione"

Nessun cambiamento nella dimensione ,  13 anni fa
m
m (Bot: correggo errori comuni)
È infine necessario notare un ulteriore paradigma: il modello a livelli gerarchici. Questo, realizzato nel sistema THE, riprende in alcuni aspetti l'idea dei layer tipica del mondo delle comunicazioni.
 
Un processo in un sistema operativo è un applicazione caricata in memoria e pronta per essere eseguita. Un sistema operativo ha dunque il compito di gestire l'esecuzione dei vari processi, quindi, di assicurare ad ogni processo la disponibilità delle risorse richieste. La risorsa principale di cui ogni processo non può farne a meno è la cpu ( central unit process ), che è il cuore di un calcolatore. Nella gestione dei process, dunque, il sistema operativo deve avere estrema cura nell'assegnare tale risorsa ai vari processi, per effettuare ciò è necessario che il sistema operativo abbia il cosidetto scheduler dei processi. Ad esso è affidato il compito di schedulare i processi secondo un ordine preciso in modo tale da minimizzare i tempi di attesa di ogni processo e massimizzare l'utilizzo della cpu. Sono state sviluppate diverse tecniche per implementare gli scheduler che comunque si dividono in due grandi categorie che sono: scheduler preemptive e scheduler non preemptive. La differenza fra queste due categorie è data dal fatto che nel primo caso lo scheduler di sistema ha il diritto di togliere ad un processo in esecuzione sulla cpu tale risorsa per assegnarla ad un altro processo, nel secondo ciò non accade. Ovviamente il primo approccio risulta più profiquo in quanto, su pc con una solo cpu, è possibile simulare un sistema multiprogrammato ( sistema nel quale più processi son eseguiti in contemporanea ), e in tali sistemi è possibile aumentare il grado di multi programmazione. Come contro ha però, ovviamente, una complessità maggiore, infatti gestire i vari cambi di contesto fra processi risulta un operazione estremamente complicata.<br>I moderni sistemi operativi sono ovviamente sistemi che utilizzano schedulatori del tipo preemptive, assicurano infatti di poter avere più programmi in esecuzione virtualmente in contemporanea. Sono molte le tecniche per l'implementazione effettiva dello scheduler dei processi le più importanti sono: FCFS, SJF, Scheduler per priorità, Scheduler con code a priorità multiple, round robin. Il primo è il più semplice da implementare ma il meno efficace infatti esso serve i processi in ordine di arrivo ( FIRST CAME FIRST SERVECE ), ciò può rendere possibile che un processo che impiega 1 millisecondo a terminare debba aspettare 100 milli secondi per essere eseguito poiché un processo x arrivato prima di esso sia in esecuzione, questa tecnica è, come si vede, utilizzate per schedulatori non preemptive. Una versione per schedulatori preemptive è la round robin che assegna ad ogni processo un quanto di tempo dopodichèdopodiché allo scadere di tale peridodo se il processo non ha terminato l'esecuzione viene posto in fondo alla coda per essere rieseguito dopo che tutti gli atri processi hanno utilizzato il loro quanto di tempo, quindi il tempo di attesa è dato dal quanto di tempo per il numero di processi presenti nella coda.<br>
L'algoritmo SJF ( Shortest Job First ) cerca di fare una previsione sui tempi di esecuzione dei vari processi presenti nella coda dei processi pronti, esso, quindi, esegue il processo il quale ha un tempo previsto di esecuzione minore, tale algoritmo sarebbe la solizione ottima in tale problema di ottimizzazione, ma nella realtà non è comunque possibile prevedere esattamente quanto un processo ci impieghi a terminare. Un problema legato a tali scheduler è dato dal fatto che se non si tiene in consiederazione quanto un prcesso stia aspettando nella coda dei processi pronti si corre il rischio che processi con un tempo di esecuzione molto grande non siano mai eseguiti perché nel sistema continuano ad arrivare processi con un tempo di esecuzione minore, una soluzione a tale problema è la possibilità di associare una priorità ai processi che aumenta con il passare del tempo, cosichè processi che aspettanto da molto tempo abbiano una priorità maggiore e possano, dunque, essere eseguiti. Schedulatori per priorià scedulano i processi in base a quale priorità abbiano, ad esempio un processo di sistema ha sicuramente una priorità maggiore di un processo utente, quindi tali processi saranno eseguiti prima dei processi a bassa priorità, anche qui bisogna prestare attenzione a quanto tempo un processi sia in attesa che la cpu gli venga assegnata, quindi più passa il tempo e più la priorità di un precesso deve crescere. Con tale tecnica abbinata agli scheduler preemptive è possibile togliere ad un processo in esecuzione la cpu nel momento in cui un processo con priorità minore viene aggiunto alla coda dei processi pronti.<br>L'ultima tecnica, scheduler con code a priorità moìultipla, utilizza anzichèanziché una coda a priorità più code, alle quali sono assegnate i varie priorità. É possibile dunque operare nel seguente modo: i processi appena eseguiti passano nella prima coda, alla quale è assegnato una alta priorità, e quindi i suoi processi saranno eseguiti con maggiore frequenza, e ad ognuno di tali processi sarà assegnato un quanto ti tempo molto breve, alla fine del quale se il processo non è terminato viene spostato nella coda con priorità immediatamente inferiore ad essa e con un quanto di tempo maggiore per gni processo, e così via fino ad arrivare alla coda con priorità minima.
 
[[Categoria:Sistemi operativi|Introduzione]]
386

contributi