Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


Gestione del processore, Dispense di Informatica

Descrizione del processore e algoritmi di scheduling

Tipologia: Dispense

2018/2019

Caricato il 30/06/2019

Laura.79
Laura.79 🇮🇹

4.4

(10)

14 documenti

1 / 12

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
GESTIONE DEL PROCESSORE
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:
1. dello scheduling dei job insieme di strategie usate per scegliere i
programmi che devono essere caricati nella RAM;
2. dello scheduling della CPU insieme di strategie che permettono di
assegnare e revocare l’uso della CPU ai programmi;
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:
1. il codice ( istruzioni );
2. i dati del programma, che si suddividono a loro volta in:
variabili globali che si trovano nella memoria centrale;
variabili locali e non memorizzate in uno stack;
variabili temporanee usate dal compilatore (PC) caricate nei registri del
processore;
variabili allocate dinamicamente durante l’esecuzione del programma;
pf3
pf4
pf5
pf8
pf9
pfa

Anteprima parziale del testo

Scarica Gestione del processore e più Dispense in PDF di Informatica solo su Docsity!

GESTIONE DEL PROCESSORE

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:

  1. dello scheduling dei job → insieme di strategie usate per scegliere i programmi che devono essere caricati nella RAM;
  2. dello scheduling della CPU → insieme di strategie che permettono di assegnare e revocare l’uso della CPU ai programmi;

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:

  1. il codice ( istruzioni );
  2. i dati del programma, che si suddividono a loro volta in:  variabili globali che si trovano nella memoria centrale;variabili locali e non memorizzate in uno stack;variabili temporanee usate dal compilatore (PC) caricate nei registri del processore;variabili allocate dinamicamente durante l’esecuzione del programma;

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.

STATO DEI PROCESSI

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

SCHEDULING DEI PROCESSI

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:

 Sistemi batch ₁

  • Massimizzare il numero di processi per unità di tempo
  • Minimizzare il tempo medio di esecuzione

 Sistemi interattivi ₂

  • Minimizzare i tempi di risposta tra il sistema e l’utente

 Sistemi real time ₃

  • Si devono rispettare le scadenze stabilite per evitare di provocare danni a volte irreversibili

₁ sistemi batch: Il termine batch viene usato per indicare

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.

₂ sistemi interattivi: Per sistema interattivo intendiamo qualsiasi “combinazione di componenti

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:

  • Sistemi “a lotti” ( batch ): Ordinamento predeterminato; lavori di lunga durata e limitata urgenza; pre-rilascio non necessario
  • Sistemi interattivi: Grande varietà di attività; prerilascio essenziale
  • Sistemi in tempo reale: Lavori di durata ridotta ma con elevata urgenza; l’ordinamento deve riflettere l’importanza del processo; pre-rilascio possibile

ALGORITMO DI SCHEDULING FCFS

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

Il diagramma di Gantt• per questa sequenza è:

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:

P1 P2 P4 P

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)

P1 P2 P4 P1 P

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