Gestione dei processi A Ferrari Multiprogrammazione Tutti i

  • Slides: 32
Download presentation
Gestione dei processi A. Ferrari

Gestione dei processi A. Ferrari

Multiprogrammazione Tutti i Sistemi Operativi moderni sono in grado di eseguire contemporaneamente più di

Multiprogrammazione Tutti i Sistemi Operativi moderni sono in grado di eseguire contemporaneamente più di un programma Il numero di programmi in esecuzione è superiore al numero di processori del sistema. 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.

Esecuzione “parallela”

Esecuzione “parallela”

MAC OSX Monitoraggio attività

MAC OSX Monitoraggio attività

Windows Task Manager

Windows Task Manager

Linux System monitor

Linux System monitor

Programma -> Processo Un programma è costituito dal codice oggetto generato dalla compilazione del

Programma -> 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. Un processo è definito come un’istanza di un programma in esecuzione. 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.

Thread Un thread è una suddivisione di un processo in due o più filoni,

Thread Un thread è una suddivisione di un processo in due o più filoni, che vengono eseguiti concorrentemente dal processore. In generale, si può dire che un thread è contenuto all'interno di un processo. Un processo ha sempre almeno un thread (se stesso), ma in alcuni casi un processo può avere più thread che vengono eseguiti in parallelo. I vari thread dello stesso processo condividono alcune risorse (lo spazio d'indirizzamento del processo), mentre processi differenti non condividono le loro risorse. I thread sono spesso utilizzati per la parallelizzazione di un programma, per sfruttare i moderni processori multi core.

Processo vs Thread Processo Il processo è l'oggetto del sistema operativo a cui sono

Processo vs Thread Processo Il processo è l'oggetto del sistema operativo a cui sono assegnate tutte le risorse di sistema per l'esecuzione di un programma, tranne la CPU. Thread Il thread è l'oggetto del sistema operativo o dell'applicazione a cui è assegnata la CPU per l'esecuzione.

Un esempio di applicazione che può far uso di più thread è un browser

Un esempio di applicazione che può far uso di più thread è un browser Web, che usa un thread distinto per scaricare ogni immagine in una pagina Web che contiene più immagini.

Dual Core - multi core Una CPU dual core (doppio nucleo) unisce due processori

Dual Core - multi core Una CPU dual core (doppio nucleo) unisce due processori indipendenti in un singolo package. I primi dual core sono gli IBM Power. PC del 2003. Il termine multi core si usa per descrivere una CPU composta da tre o più core: più nuclei di processori fisici montati sullo stesso package.

Identificativo di processo Il Sistema Operativo assoccia a ogni processo (al momento della creazione)

Identificativo di processo Il Sistema Operativo assoccia 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.

Process control block Il Process Control Block (Blocco di Controllo del Processo) o PCB

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 Area per il salvataggio dei registri Stato corrente di

Contenuto del PCB Program counter Area per il 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 Identificatore della CPU su cui è in esecuzione Informazioni per lo scheduling (gestione) del processo, come il tempo di run (esecuzione) o wait (attesa) accumulato … Informazioni sullo stato di I/O del processo

Context-switching Operazioni eseguite dal SO per passare la risorsa processore da un processo ad

Context-switching Operazioni eseguite dal SO per passare la risorsa processore da un processo ad un altro. 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.

CPU e context-switching

CPU e context-switching

Stati di un processo Ogni processo può essere in uno dei 3 stati: Pronto

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

Stati di un processo Ready Wait Run

Stati di un processo Ready Wait Run

Transizione 1 Il processo viene creato e posto nello stato di “pronto” (ready) Ready

Transizione 1 Il processo viene creato e posto nello stato di “pronto” (ready) Ready Wait Run

Code d’attesa Più processi possono essere in stato di ready pronti per ottenere la

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.

Transizione 2 Il Sistema Operativo seleziona uno dei processi in stato Ready e lo

Transizione 2 Il Sistema Operativo seleziona uno dei processi in stato Ready e lo pone in esecuzione (run) Ready Wait Run

Scheduler Lo scheduler (da to schedule letteralmente "mettere in lista”) è un programma che,

Scheduler Lo scheduler (da to schedule 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.

Politiche di scheduling L'attenzione posta su alcuni parametri piuttosto che su altri, differenzia la

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 si basano su principi statistici o sulla predizione per individuare un ordinamento delle richieste che si avvicini il più possibile quello ottimale.

Obiettivi dello scheduler Fairness (Equità) - processi della stesso tipo devono avere trattamenti simili

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. "Corre voce che quando fu chiuso l'IBM 7094 al MIT, nel 1973, si scoprì che un processo con bassa priorità sottoposto nel 1967 non era ancora stato eseguito". Dare all'utilizzatore del sistema la percezione che le richieste vengano soddisfatte contemporaneamente.

Transizione 3 Il Sistema Operativo interrompe l’esecuzione di un processo e lo pone in

Transizione 3 Il Sistema Operativo interrompe l’esecuzione di un processo e lo pone in stato di ready Ready Wait Run

Time sharing I Sistemi Operativi moderni adottano la tenica del time-sharing per la gestione

Time sharing I Sistemi Operativi moderni adottano la tenica del time-sharing 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.

Transizione 4 Nel corso dell’esecuzione il processo richiede un servizio al Sistema Operativo e

Transizione 4 Nel corso dell’esecuzione il processo richiede un servizio al Sistema Operativo e viene posto nello stato di wait Ready Wait Run

Transizione 5 Il Sistema Operativo completa la richiesta di un processo che passa quindi

Transizione 5 Il Sistema Operativo completa la richiesta di un processo che passa quindi allo stato di ready Ready Wait Run

Transizione 6 Il processo termina l’esecuzione e viene distrutto dal Sistema Operativo Ready Wait

Transizione 6 Il processo termina l’esecuzione e viene distrutto dal Sistema Operativo Ready Wait Run

Algoritmi di schedulazione Round-robin time-sharing e politica FIFO (First In First Out) di selezione

Algoritmi di schedulazione Round-robin time-sharing e politica FIFO (First In First Out) di selezione dei processi in coda di ready Scheduling a priorità Un valore di priorità (intero) è associato a ciascun processo. La CPU viene allocata al processo con la priorità più alta

Tipi di processi CPU Bound Processi che sfruttano pesantemente le risorse computazionali del processore,

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.

P 1 (CPU bound) P 2 /I/O bound) P 1 Lungo burst di CPU

P 1 (CPU bound) P 2 /I/O bound) P 1 Lungo burst di CPU Corto burst di CPU Attesa completamento I/O P 2 tempo In esecuzione In attesa