






Studia grazie alle numerose risorse presenti su Docsity
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Prepara i tuoi esami
Studia grazie alle numerose risorse presenti su Docsity
Prepara i tuoi esami con i documenti condivisi da studenti come te su Docsity
Trova i documenti specifici per gli esami della tua università
Preparati con lezioni e prove svolte basate sui programmi universitari!
Rispondi a reali domande d’esame e scopri la tua preparazione
Riassumi i tuoi documenti, fagli domande, convertili in quiz e mappe concettuali
Studia con prove svolte, tesine e consigli utili
Togliti ogni dubbio leggendo le risposte alle domande fatte da altri studenti come te
Esplora i documenti più scaricati per gli argomenti di studio più popolari
Ottieni i punti per scaricare
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Descrizione del processore e algoritmi di scheduling
Tipologia: Dispense
1 / 12
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!







I nuovi SO cercano di sfruttare il parallelismo fisico dell’hardware per ridurre i tempi di risposta ed aumentare il numero di programmi eseguiti per unità di tempo. Si procede con una prima precisazione: Programma : costituito da un insieme di istruzioni memorizzate su una memoria di massa (entità statica); Processo : istanza di un programma in evoluzione, cioè in esecuzione sul processore quindi residente in memoria RAM (entità dinamica); Task : sinonimo di processo;
L’ottimizzazione del tempo di CPU avviene per mezzo della multiprogrammazione, cioè alla contemporanea presenza di più programmi in memoria. Si può migliorare la gestione:
l’esecuzione di un processo è una successione di fasi di elaborazione sulla CPU e fasi di attesa per l’esecuzione di operazioni su altre risorse del sistema che lasciano inattiva la CPU.
Il parallelismo è virtuale Distinguiamo il parallelismo in:
multitasking: esecuzione di programmi indipendenti sulla CPU e sul processore di I/O multiprocessing: multiprogrammazione estesa ad elaboratori con più CPU e processori di I/O
il multitasking non implica la multiutenza.
I PROCESSI Un processo è composto di due parti:
Per quanto riguarda i processi abbiamo 3 modelli di computazione che sono:
Modello di computazione indipendente: Modello di computazione con cooperazione; Modello di computazione con competizione;
vediamo i tre modelli nel dettaglio:
a) Modello di computazione indipendente quando un
processo evolve in maniera autonoma senza bisogno di comunicare con gli altri per scambiare dati; b) Modello di computazione con cooperazione quando due o più processi hanno la necessità di cooperare per poter evolvere; c) Modello di computazione con competizione quando due o più processi si ostacolano a vicenda compromettendo il
buon esito delle loro elaborazioni. Due processi competono tra loro per usare la medesima risorsa che a volte è in quantità limitata.
Gli stati di un processo sono quelle situazioni in cui un processo può trovarsi durante
il suo ciclo di vita rispetto alla CPU.
Vediamo nel dettaglio quali sono:
Nuovo (new): stato del processo al momento della sua creazione cioè quando l’utente richiede l’esecuzione di un programma che si trova su disco; Esecuzione (running): la CPU sta eseguendo le istruzioni del programma, ciò vuol dire che gli è stato assegnato il processore. Nei sistemi monoprocessore possiamo trovare un solo processo in questo stato;
Attesa (waiting): un processo si trova in questo stato quando è in attesa di un qualche evento che lo faccia evolvere, ad esempio il rilascio di una risorsa che le è necessaria per poter proseguire nella sua elaborazione;
Passiamo ora ad analizzare il PCB di un processo, ovvero il Process control block, definito anche come descrittore del processo.
l Process Control Block (o PCB) di un processo è una struttura dati del nucleo del sistema operativo che contiene le informazioni essenziali per la gestione del processo. Le informazioni contenute variano a seconda delle implementazioni, ma in generale sono presenti:
l’identificatore unico o nome del processo; stato corrente del processo; Il contenuto del program Counter; Il contenuto dei registri generali della CPU; Puntatori alla memoria del processo; Puntatori alle risorse allocate al processo; Priorità del processo;
Durante la commutazione di contesto, è necessario salvare in memoria centrale lo stato di esecuzione del processo che viene fermato.
Queste informazioni vengono memorizzate proprio nel PCB del processo, e sarà sempre dal PCB che esse verranno lette quando si dovrà proseguire l'esecuzione
Il Program Counter e i registri insieme prendono il nome di area di salvataggio dello stato della CPU.
Il PID viene allocato in maniera dinamica nel momento della creazione e viene rimosso nel momento in cui il processo termina la sua elaborazione.
nome del processo PID Stato del processo Program counter Altri registri Priorità Limiti di memoria File aperti
Lo scheduling è il meccanismo che sceglie i processi che devono ottenere il permesso di utilizzo della CPU. Nei SO con partizione del tempo troviamo un solo processo in esecuzione mentre gli altri vengono inseriti: Nella coda dei processi pronti RL Nella coda dei processi in attesa di un evento WL;
il cambio di contesto ( context-switch) si ha quando lo scheduler sospende un processo in esecuzione in quel momento, inserendolo in una coda di processi pronti, per riattivare un altro processo presente in quella stessa coda. Quando la CPU riattiva un processo che era stato sospeso, analizza il PCB del processo stesso per poter ripristinare le informazioni dello stesso e poter riprendere l’esecuzione dal punto esatto in cui era stato interrotto.
Semplice rappresentazione di uno stack
Con il termine stack o pila , si indica una struttura dati, con modalità di accesso di tipo LIFO ( L ast I n F irst O ut), ovvero tale per cui i dati vengono estratti (letti) in ordine rigorosamente inverso rispetto a quello in cui sono stati inseriti (scritti), (primo inserito, ultimo letto). La modalità di accesso FIFO ( F irst I n F irst O ut), vengono estratti in ordine rispetto a quello in cui sono stati inseriti, (primo inserito, primo letto).
Alcuni processi non possono essere sospesi dal S.O. in ogni momento, alcuni devono terminare la loro esecuzione oppure un insieme di istruzioni, questi processi sono Processi non Pre-emptive, quelli che invece possono essere interrotti in qualsiasi momento sono Processi Pre-emptive.
Gli obiettivi generali comuni a tutti i sistemi operativi sono:
equità: dare a tutti i processi una porzione della CPU; bilanciamento: tenere occupate tutte le parti del sistema; attuare politiche di controllo che verifichino l’attuazione delle politiche stesse; tenere la CPU sempre occupata;
Gli obiettivi specifici a seconda del tipo di sistema che si sta utilizzando:
un particolare modo di gestire le operazioni di un sistema di calcolo. Tutta la sequenza di operazioni e dati necessari per svolgere un particolare compito vengono preparati in anticipo e memorizzati su un adeguato supporto creando una procedura. La procedura viene poi eseguita dal sistema come un blocco unico, cioè senza che sia necessario, o possibile, un intervento umano prima che sia terminata. Anche oggi vengono utilizzate procedure predisposte in anticipo ed eseguite con modalità batch (ad esempio per svolgere operazioni periodiche), ma vengono più comunemente chiamate procedure o scripts, anche se una traccia del termine “batch” rimane nel nome dei files che contengono sequenze di comandi nei sistemi Windows e che terminano infatti con l’estensione BAT.
hardware e software che ricevono input da un utente umano, e gli forniscono un output, allo scopo di supportare l’effettuazione di un compito ”. Questa definizione è molto ampia e comprende tutti i sistemi che possono interagire con un utente umano, da quelli più semplici (come un frullatore o un robot da cucina) a quelli più complessi, come un telefono cellulare, il cruscotto di un aereo, un sistema di realtà virtuale. In pratica, la definizione esclude solamente quei sistemi che interagiscono esclusivamente con altri sistemi, senza alcun intervento umano, come i sistemi di controllo di processo “a ciclo chiuso”, che intervengono sul processo controllato senza alcun intervento dell’operatore.
₃ sistemi real time: Un sistema operativo real-time o in tempo reale è un sistema operativo specializzato per il supporto di applicazioni software real-time. Questi sistemi vengono
utilizzati tipicamente in ambito industriale (controllo di processo, pilotaggio di robot, trasferimento dati nelle telecomunicazioni) o comunque dove sia necessario ottenere una risposta dal sistema entro un tempo prefissato.
Un sistema operativo real-time non deve essere necessariamente veloce: non è importante l'intervallo di tempo in cui il sistema operativo/applicativo deve reagire; l'importante è che risponda entro un tempo massimo pre-determinato. In altre parole il sistema deve essere prevedibile, nel senso che nel sistema si possa conoscere il tempismo reale di un determinato processo o elaborazione.
In pratica un sistema real-time deve garantire che una elaborazione termini entro un dato vincolo temporale o scadenza (detta deadline ). Per garantire questo è richiesto che la schedulazione delle operazioni sia fattibile. Il concetto di fattibilità di schedulazione è alla base della teoria dei sistemi real-time ed è quello che ci permette di dire se un insieme di task sia eseguibile o meno in funzione dei vincoli temporali dati.
Riassumendo abbiamo 3 classi generali:
E’ facile da implementare, basta una coda FIFO: il PCB di un processo che entra nella coda dei processi pronti (RL) e viene messo in fondo alla coda. Quando la CPU si libera viene assegnata al processo il cui PCB è in testa alla coda FIFO. Con FCFS il tempo di attesa del completamento di un processo è spesso lungo ed essendo inoltre FCFS un algoritmo non preemptive, non va bene per i sistemi time-sharing. Supponiamo tre processi che arrivano assieme e che entrano in CPU nell’ordine P1, P2, P3. I tre processi hanno i seguenti tempo di esecuzione di CPU, e poi terminano.
il Burst Time rappresenta l’unità di tempo/ utilizzo CPU
Nel caso preemptive, se arriva in coda ready un processo il cui burst time è inferiore a quanto rimane da eseguire al processo attualmente running, quest’ultimo viene interrotto e la Cpu passa al nuovo processo. Questo schema è noto come Shortest- Remaining- Time-First (SRTF). Si può dimostrare che SJF è ottimale: spostando uno processo breve prima di uno lungo (anche se quest’ultimo è arrivato prima) si migliora l’attesa del processo breve più di quanto si peggiori l’attesa del lungo ed il tempo medio di attesa diminuisce. C’ è però un problema. Purtroppo, in generale la durata del prossimo burst di CPU di un processo non è nota, allora possiamo cercare di stimare il prossimo CPU burst sulla base dei precedenti.
Esempio : Calcolo del tempo di attesa in SJF
processo durata arrivo P1 9 0 P2 4 1 P3 10 2 P4 5 3
La sequenza di attivazione per SJF non pre-emptive è questa:
Vediamo come calcolare il tempo di attesa Ad ogni processo si sottrae il tempo di arrivo in coda
Tw = ( P1, P2, P3, P4 ) = [ 0 + ( 9- 1) + ( 13- 3) + ( 18- 2)]/4 = 8.
Vediamo ora il caso di SJF pre-emptive ( detto anche SFRT)
Il tempo di attesa medio in questo caso sarà:
Tw = ( P1, P2, P4, P1, P3) = [ 0+(1-1) + (5-3)+10+(18-2)]/4=
ALGORITMO DI SCHEDULING CON PRIORITA’
Nello scheduling con priorità viene assegnato ad ogni processo un numero che corrisponde ad un livello di priorità del processo stesso con il quale deve essere mandato in esecuzione
Il processo con priorità più alta verrà mandato in esecuzione per primo. Una volta terminata la sua esecuzione viene scelto: Il processo, tra quelli presenti in coda, con la priorità più alta Nel caso di due processi con la stessa priorità viene scelto il primo processo in coda A seconda del sistema operativo si ha una diversa valutazione del valore di priorità: in alcuni sistemi operativi si assegna al valore 0 priorità massima mentre in altri ( Windows e Linux ) si assegna al valore 0 priorità minima.
Esempio:
La sequenza di attivazione dei processi è la seguente:
P1 P5 P2 P3 P 0 8 11 12 15 20
Il tempo di attesa medio è:
Tw = ( P1, P5, P2, P3, P4) = ( 0+8+11+12+15 )/5 = 9.
Gli algoritmi con priorità possono essere: Non pre-emptive Pre-emptive: in questo caso se si sta eseguendo un processo con priorità più bassa di uno nuovo inserito in coda allora si passa la CPU al processo con priorità più alta e si sospende il processo che in quel momento è in esecuzione.
Se arrivano in continuazione processi con priorità alta si può venire a creare un fenomeno detto di starvation Lo starvation si verifica quando più processi con priorità bassa rimangono nella coda dei processi pronti per un periodo indefinito in quanto arrivano in continuazione processi pronti con priorità più alta. Si può introdurre, come soluzione, le priorità variabili, cioè si modificano dinamicamente le priorità dei processi in base al tempo di attesa di ognuno di essi. Cioè, se un processo si trova da parecchio tempo nella coda dei processi pronti, si aumenta il valore della sua priorità e si diminuisce la priorità del processo in esecuzione se questo sta utilizzando la CPU da tanto tempo.
Processo Durata Priorità P1 8 1 P2 1 3 P3 3 4 P4 5 5 P5 3 2