Gestione dei processi Appunti di Sistemi Operativi per gli alunni dell’I.T.I. « E. Medi » in S. Giorgio a Cremano Page 1 Multiprogrammazione Tutti i Sistemi Operativi moderni sono in grado di eseguire contemporaneamente più di un programma. La CPU esegue comunque una sola istruzione per volta. Il S.O. gestisce l’avvicendamento dei processi in esecuzione: assegna la CPU ai vari processi istante dopo istante. L’utente ha la sensazione che le proprie applicazioni siano eseguite contemporaneamente dal computer. In realtà la sensazione di contemporaneità è data dall’elevata velocità di esecuzione dei programmi da parte del computer. Page 2 Programma e Processo • • • • Un programma è costituito dal codice oggetto generato dalla compilazione del codice sorgente E’ salvato sotto forma di uno o più file. E’ un'entità statica, che rimane immutata durante l'esecuzione. Il programma esiste indipendentemente dal computer che è in grado di eseguirlo. • • • • Al momento dell’esecuzione del programma il SO crea il processo. E’ un'entità dinamica, che dipende dai dati che vengono elaborati, e dalle operazioni eseguite su di essi. E’ caratterizzato, oltre che dal codice eseguibile, dall'insieme di tutte le informazioni che ne definiscono lo stato. Da un solo programma possono scaturire più processi distinti. Page 3 Cos’è un processo • • • • • Un processo è un’attività, controllata da un programma E’ un entità dinamica che rappresenta l’esecuzione del programma Un processo è rappresentato da: – codice (text) del programma – dati: variabili globali del programma – program counter: indirizzo della successiva istruzione – alcuni registri di CPU – stack: parametri e variabili locali di funzioni o procedure In un sistema multitasking possono essere avviati molti processi contemporaneamente Per l’avanzamento di un processo è necessaria l’assegnazione di un processore Page 4 Terminazione di un processo • • Un processo termina : – Quando esegue una istruzione assembler di terminazione – Quando effettua una operazione illecita • es. cerca di accedere alla memoria privata di altri processi – Quando c’è un errore che non gli permette di proseguire (es. overflow, etc) In tutti questi casi il processore ricomincia automaticamente ad eseguire il sistema operativo ad un indirizzo prefissato Page 5 Interruzione momentanea di un processo • Un processo in esecuzione può cedere il processore al SO nei due casi seguenti: – quando il processo stesso esegue una chiamata di sistema per richiedere un servizio da parte del SO (funzioni che permettono di invocare servizi di competenza del SO, es. scrittura di file, stampa su video …Sono disponibili in una libreria predefinita) – quando arriva una interruzione hw (quando si verifica una situazione anomala tipo overflow, oppure programmata dal clock, oppure richiesta dall’I/O) Page 6 Gestione dei processi • I processi hanno in memoria sempre aree dati disgiunte (sebbene possano, a richiesta, condividere parte dei dati oppure scambiarsi dei messaggi tra di loro). Memoria centrale Altri processi … Codice eseguibile del programma P Processo P1 Dati sui cui agisce il programma P Memoria centrale Processo Q1 Processo P2 Processo P1 Codice eseguibile del programma Q Dati sui cui agisce il programma Q Codice eseguibile del programma P Dati sui cui agisce il programma P Codice eseguibile del programma P Dati sui cui agisce il programma P Page 7 Identificativo di processo • • Il Sistema Operativo associa a ogni processo (al momento della creazione) un identificativo numerico univoco, detto PID (Process Identifier). Ad un processo sono associate le seguenti strutture dati: – Uno o più segmenti di codice. – Uno o più segmenti di memoria dati. – I descrittori di eventuali risorse in uso (file, finestre, periferiche, ecc.) – Uno o più thread. Page 8 Process control block • • Il Process Control Block (Blocco di Controllo del Processo) o PCB di un processo è una struttura dati del nucleo del sistema operativo che contiene le informazioni essenziali per la gestione del processo. Contenuto del PCB: – Program counter – Salvataggio dei registri – Stato corrente di avanzamento del processo (Pronto, In Esecuzione, Bloccato) – Identificatore unico del processo – Puntatore al processo padre e ai processi figli se esistenti – Livello di priorità – Informazioni per la gestione della memoria Page 9 Il contesto • Contesto all’istante t : – istruzione da eseguire (indirizzo in RAM: PC, IR) – contenuto dei registri dati del processore – il processo rappresenta lo stato di avanzamento del programma istante per istante. Page 10 Context-switching • • • • • Il context switch (commutazione di contesto) è la fase in cui l’uso della CPU passa da un processo al suo successivo Si interrompe momentaneamente il primo processo per riprendere temporaneamente l’esecuzione del secondo. Nel context-switching viene salvato il PCB del primo processo e caricato il PCB del secondo. Nella fase di passaggio il SO realizza, in sequenza, le seguenti operazioni: – Salvataggio dello stato del processo uscente – Selezione del nuovo processo – Ripristino dello stato del processo entrante Si modifica, in questo modo, il contesto in cui lavora il processore. Page 11 Durata del context switch • • Il tempo utilizzato dal SO per le operazioni di context switch, in rapporto al time-slice (quanto di tempo di CPU), non deve essere causa di – riduzione dell’efficienza della CPU – lunghi tempi di risposta A tal fine, il tempo di context switch non deve superare il 25% del time-slice (solitamente di circa 100 ms) Page 12 Stati di un processo • Ogni processo può essere in uno dei 3 stati: – Pronto (ready) • Il processo non è in esecuzione, ha tutte le risorse necessarie tranne la CPU – Attesa (wait) (sleep) • Il processo non è in esecuzione, ha invocato un servizio (es I/O) ed è in attesa di un segnale da parte di un altro processo relativo al completamento del servizio richiesto. – Esecuzione (run) • Il processo dispone di tutte le risorse necessarie ed è in esecuzione sulla CPU Page 13 Stati di un processo Ready Wait Run Page 14 Transizione 1 • Il processo viene creato e posto nello stato di “pronto” (ready): può andare in esecuzione, se il gestore dei processi lo decide Ready Wait Run Page 15 Transizione 2 • Il Sistema Operativo seleziona uno dei processi in stato Ready e lo pone in esecuzione (run): assegnato al processore ed eseguito da esso Ready Wait Run Page 16 Transizione 3 • Il Sistema Operativo interrompe l’esecuzione di un processo e lo pone in stato di ready Ready Wait Run Page 17 Transizione 4 • Nel corso dell’esecuzione il processo richiede un servizio al Sistema Operativo e viene posto nello stato di wait Ready Wait Run Page 18 Transizione 5 • Il Sistema Operativo completa la richiesta di un processo che passa quindi allo stato di ready Ready Wait Run Page 19 Transizione 6 • Il processo termina l’esecuzione e viene distrutto dal Sistema Operativo Ready Wait Run Page 20 Il ciclo di vita dei processi 1 Ogni nuovo processo entra nel sistema accedendo alla ready queue (new ready), e va in esecuzione (ready running) quando viene selezionato dallo scheduler Un processo attivo può essere arrestato per un interrupt esterno (running ready) Un processo può anche essere sospeso dal nucleo (running ready), dopo un dato intervallo temporale, per garantire a tutti i processi un uso paritario della CPU: lo scheduler sceglie quale fra i processi pronti Page 21 Il ciclo di vita dei processi 2 Anche un’interruzione interna può causare l’arresto di un processo (running waiting) Viceversa, il verificarsi dell’evento atteso da un processo fa sì che esso passi dallo stato di attesa allo stato di pronto (waiting ready) Infine, un processo in esecuzione può terminare regolarmente, o essere interrotto e terminato forzatamente dal nucleo (aborted) per il verificarsi di un errore Lo scheduler seleziona un nuovo processo dalla coda dei processi ready Page 22 Code d’attesa • • Più processi possono essere in stato di ready pronti per ottenere la risorsa CPU e passare in esecuzione. I processi vengono quindi messi in coda d’attesa. Page 23 Time sharing • • • I Sistemi Operativi moderni adottano la tecnica del timesharing per la gestione del processore. Ad ogni processo viene assegnato un “quanto” di tempo (time slice dell’ordine dei millisecondi) dopo il quale deve rilasciare il processore passando dallo stato di run a quello di ready. Preemption (prerilascio) è l'operazione in cui un processo viene temporaneamente interrotto, senza alcuna cooperazione da parte del processo stesso, al fine di permettere l'esecuzione di un altro processo. Page 24 Scheduler • • Lo scheduler (letteralmente "mettere in lista”) è un programma che, dato un insieme di richieste di accesso ad una risorsa, stabilisce un ordinamento temporale per l'esecuzione di tali richieste, privilegiando quelle che rispettano determinati parametri, in modo da ottimizzare l'accesso a tale risorsa e consentire così l'espletamento del servizio. Lo short-time-scheduler (scheduler della CPU) deve garantire l’esecuzione di ogni processo, in modo ordinato, concedendo e revocando la CPU alternativamente mediante operazioni dette commutazioni di contesto tra i processi. Page 25 Lo scheduler • Lo scheduler (di basso livello) è la parte del SO che si preoccupa di ripartire il processore fra i processi in maniera trasparente – es : 3 processi P1, P2, P3, vengono mandati in esecuzione ciclicamente tempo Eseguo P1 Quanto 20-100 ms Eseguo P2 Eseguo P3 Eseguo P1 Interruzione : lo scheduler riprende il controllo e decide chi eseguire nel quanto successivo Periferica ‘clock’ Page 26 Politiche di scheduling • L'attenzione posta su alcuni parametri piuttosto che su altri, differenzia la politica di scheduling: – – – lo scheduler può eseguire le richieste in base al loro ordine di arrivo (politica FIFO), oppure dare precedenza a quelle che impegnano per meno tempo la risorsa; possono esistere politiche che si basano su principi statistici o sulla predizione per individuare un ordinamento delle richieste che si avvicini il più possibile quello ottimale. Page 27 Obiettivi dello scheduler • • • • • Fairness (Equità) - processi della stesso tipo devono avere trattamenti simili Massimizzare il throughput (produttività dell'intero sistema), minimizzando i tempi in cui la risorsa è inutilizzata. Minimizza il tempo che intercorre tra l'istante in cui la richiesta è generata e quello in cui la richiesta è soddisfatta. Evitare fenomeni indesiderati come la starvation ovvero "l'attesa eterna" di alcune richieste. Dare all'utilizzatore del sistema la percezione che le richieste vengano soddisfatte contemporaneamente. Page 28 Tipi di processi • • CPU Bound – Processi che sfruttano pesantemente le risorse computazionali del processore, ma non richiedono servizi di ingresso/uscita dati al sistema operativo in quantità rilevanti. – Es. i programmi di calcolo matematico, i quali necessitano spesso di un'enorme potenza di calcolo, ma sfruttano l'I/O solo all'inizio della loro vita (per caricare gli input) ed alla fine di essa (per produrre gli output). I/O Bound – molti accessi alle periferiche, il processo è spesso interrotto per attendere il completamento delle richieste di I/O. Page 29 Classi di scheduling • Nella gestione delle risorse di un elaboratore, il fattore tempo porta a identificare tre tipi di scheduling: – Scheduling a breve termine – Scheduling a medio termine – Scheduling a lungo termine Page 30 Scheduling a lungo termine • • • • E’ impiegato nella scelta dei programmi, presenti in memoria secondaria, da caricare in memoria centrale per la creazione dei corrispondenti processi individua i programmi da ammettere all’esecuzione regola la presenza in memoria centrale di processi I/O bound e CPU bound controlla il livello di multiprogrammazione Page 31 Scheduling a medio termine • • • Gestisce la permanenza in memoria dei processi non in esecuzione coordina le operazioni di trasferimento temporaneo dei processi in memoria secondaria (swap out): interviene nella gestione dei processi in attesa di eventi da lungo tempo Page 32 Scheduling a breve termine • • Si occupa della selezione del nuovo processo da eseguire, quando – il processo in esecuzione passa allo stato di attesa o ritorna allo stato di pronto oppure termina – un processo passa dallo stato di attesa allo stato di pronto – si verificano eventi particolari (interruput, chiamate al S. O.) Quando la CPU rimane inattiva, il process scheduler (modulo del kernel) seleziona dalla ready queue (coda dei processi pronti) il prossimo processo a cui assegnare la CPU e decide da quale momento e per quanto tempo farlo eseguire. Page 33 Dispatcher • L’effettiva assegnazione della CPU al processo prescelto per l’esecuzione è affidata al dispatcher, modulo del kernel che gestisce – il context switch – il passaggio al modo utente – il salto alla giusta posizione del programma utente (impostazione del program counter) Page 34 Classificazione delle politiche di scheduling • Le politiche di scheduling della CPU si differenziano in base a tre criteri di classificazione: – senza prelazione/con prelazione – senza priorità/con priorità – statiche/dinamiche Page 35 Prelazione (pre-rilascio) Politiche con prelazione Politiche senza prelazione Una volta che la CPU è stata assegnata ad un processo, essa non può più essergli tolta se non quando il processo ha esaurito il suo tempo di servizio o necessita di un'operazione di I/O. La CPU può essere forzatamente tolta al processo in corso di esecuzione per essere assegnata ad un altro processo. Page 36 Priorità Politiche senza priorità Pongono i processi sullo stesso piano, dal punto di vista dell’urgenza di esecuzione. Politiche con priorità Distinguono e suddividono in classi i processi in stato di pronto, a secondala della loro importanza o urgenza di esecuzione. Sono necessarie nei sistemi real-time e interattivi. Page 37 Statiche/dinamiche Politiche statiche Un processo conserva nel tempo i suoi diritti di accesso all’unità centrale (priorità) Politiche dinamiche I processi modificano nel tempo i propri diritti di accesso all’unità centrale. Page 38 Politiche di schedulazione • FCFS: First Come First Served • SJF: Shortest Job First -> (SRTF) • Per priorità • Round Robin Page 39 FCFS: First Come First Served • • • • La CPU è assegnata ai singoli processi in base al loro ordine nella coda dei processi pronti (ready queue), stabilito in base al tempo di arrivo oppure dal numero identificativo (PID) La ready queue è gestita in modalità FIFO (First In First Out) E’ senza prelazione: il processo in esecuzione trattiene la CPU sino al termine del suo tempo di servizio o fino a quando non necessita di un’operazione di I/O Tende a penalizzare i processi I/O bound e quelli di breve durata, poiché costretti a lunghe attese dietro processi CPU bound. Tempi di attesa molto variabili e generalmente lunghi. La gestione dei dispositivi è poco efficiente. Page 40 SJF: Shortest Job First • • • • La CPU è assegnata al processo il cui intervallo di tempo previsto per l’utilizzo della CPU è più breve Nel caso in cui più processi pronti presentino gli stessi tempi di servizio, la scelta viene fatta secondo la politica FCFS. SJF senza prelazione: il processo in esecuzione trattiene la CPU sino al termine del suo tempo di servizio o fino a quando non necessita di un’operazione di I/O. SJF con prelazione: se, ad un certo istante, nella coda dei processi pronti giunge un processo con un tempo di servizio più breve di quello che rimane (da completare) al processo in esecuzione, la CPU viene rilasciata e ceduta al processo appena arrivato (Shortest Remaining Time First - SRTF) Page 41 Scheduling per priorità • • • A ciascun processo, in fase di generazione, viene attribuito un livello di priorità, espresso da un numero intero. La CPU è assegnata al processo che presenta la massima priorità. A parità di priorità, si ricorre alla politica FCFS Senza prelazione – il processo in esecuzione trattiene la CPU sino al termine del suo tempo di servizio o fino a quando non necessita di un’operazione di I/O. Con prelazione – se nella coda dei processi pronti arriva un processo con priorità maggiore di quella del processo in esecuzione, questo rilascia la CPU, cedendola al processo appena arrivato Page 42 Determinare la priorità • • • • Priorità definite dal S. O. (p. interna) Priorità definite dall’utente (p. esterna) Priorità statica – una volta stabilita, non varia nel tempo Priorità dinamica – varia nel tempo per evitare che alcuni processi possano essere bloccati per un tempo indefinito (starvation), a causa della costante presenza nella ready queue di processi a più elevata priorità Page 43 Starvation (attesa indefinita) • Una possibile soluzione allo starvation è data dalla procedura di aging (invecchiamento): la priorità di un processo può – aumentare al crescere del suo tempo di attesa – diminuire al crescere del tempo di CPU già utilizzato Page 44 Round Robin • • • La CPU viene assegnata, a turno, ad ogni processo per un certo periodo q di tempo massimo (time-slice o quanto di tempo) Se, alla fine di tale periodo, il processo in esecuzione non è terminato, esso viene ricondotto nella coda dei processi pronti, all’ultima posizione Alla messa in esecuzione, il S. O. avvia un dispositivo timer, trascorso l’intervallo q, il timer genera un’interruzione che provoca il prerilascio della CPU Page 45 Time-slice • • • Un time-slice troppo grande rischia di far tendere la politica Round Robin a quella FCFS. Un time-slice troppo piccolo consente tempi di risposta brevi ma impegna eccessivamente la CPU per le operazioni di context switch, con conseguente calo della produttività e dell’efficienza del sistema. Nei sistemi reali il valore del time-slice che garantisce buone prestazioni è compreso tra 20 e 50 millisecondi. Page 46 E questa è davvero la (almeno per quest’anno…) Page 47