Supporto al Sistema Operativo
Transcript
Supporto al Sistema Operativo
Livelli del sistema Supporto al Sistema Operativo Middleware di supporto al sistema operativo in sistemi distribuiti Funzione del nucleo Modelli architetturali di SO Decomposizione delle funzionalità Funzionalità base del Nucleo del Sistema Operativo Gestione processo Applicazioni e servizi Middleware Processi, thread, processi multi-thread Gestione dei processi - Scheduling Concorrenza - Comunicazione fra processi Meccanismi di invocazione Gestione delle risorse (incapsulare) Protezione e sicurezza Separazione fra politiche e Gestione della memoria (…) meccanismi di gestione delle risorse Gestione del file system: file service Name Service Gestore della comunicazione OS: kernel, librerie & servers OS1 Processi, threads, comunicazione, ... OS2 Processi, threads, comunicazione, ... Computer & network hardware Computer & network hardware Nodo 1 Nodo 2 S.O. Distribuito vs S.O. di Rete (Network Operating System) es. Unix, MacOs, Windows Piattaforme Gestore dei Thread Supervisore Creazione, scheduling, sincronizzazione 1 S. Balsamo - 2008 - Università Ca’ Foscari di Venezia "16:45" S. Balsamo - 2008 - Università Ca’ Foscari di Venezia Processi e thread SD.6.2 Obbiettivo: massimizzare il grado di concorrenza Gestione di risorse: Fisica e virtuale "16:45" SD.6.3 Creazione di un processo In un sistema distribuito 2 ambiente di esecuzione 1. scelta dell’host N - sincronizzazione thread (es. semafori) - comunicazione (es. socket) Regioni: Specifica di - dimensioni - diritti di accesso - in quale direzione cresce - risorse di alto livello (es. file) Uso: - mapping di file Heap Testo notazione (processo - thread) heavyweigth vs ligthweigth (con/senza ambiente di esecuzione) 0 SD.6.4 S. Balsamo - 2008 - Università Ca’ Foscari di Venezia Diverse politiche (di trasferimento, di locazione) trasparenza assegnamento statico vs dinamico (adattivo) possibile bilanciamento del carico Stack Costo di creazione e gestione dell’ambiente di esecuzione Sistemi multi-thread vs un solo thread per processo "16:45" 2. Creazione di un ambiente di esecuzione 3. Creazione di un thread iniziale Regioni ausiliarie - spazio di indirizzamento insieme di risorse a cui il thread può accedere S. Balsamo - 2008 - Università Ca’ Foscari di Venezia Chiamate di sistema, eccezioni, interruzioni S. Balsamo - 2008 - Università Ca’ Foscari di Venezia Spazio di indirizzamento Ad un processo sono associate più attività concorrenti thread: astrazione di attività insieme di thread + Gestore memoria - condivisione di regioni > librerie > nucleo > dati > comunicazione "16:45" distribuito centralizzato gerarchico sender- initiated SD.6.5 Spazio di indirizzamento (standard, copia di uno esistente) ereditarietà Copy-on-write (es:Chorus, Mach) copia ma non fisica, fino ad una modifica receiver- initiated S. Balsamo - 2008 - Università Ca’ Foscari di Venezia "16:45" SD.6.6 1 Copy-on-write Spazio di indirizzamento di A Threads Spazio di indirizzamento di B - costo minore per creazione e gestione (cambio contesto) - più semplice realizzare la condivisione di risorse Possibili problemi di protezione - meccanismi di programmazione concorrente (sezioni critiche, semafori, …) RB copiato da RA RB RA Clienti e serventi con threads Permettono la concorrenza con operazioni di I/O e di computazione in sistemi multiprocessor Vantaggi del multi-thread Architetture per server multi-thread - worker pool architecture semplice, ma molto I/O, scarsa flessibilità - thread-per-request architecture un worker per richiesta, poi si distrugge a fine richiesta regione condivisa b) Dopo il write "16:45" S. Balsamo - 2008 - Università Ca’ Foscari di Venezia - thread-per-object architecture SD.6.7 Architettura alternative per threading del server anche diverse priorità delle code minor overhead, possibile spreco idem obbiettivo: massimizzare il throughput S. Balsamo - 2008 - Università Ca’ Foscari di Venezia SD.6.8 "16:45" per-connection threads remote objects remote objects per-object threads I/O remote objects b. Thread-per-connection Linguaggi di programmazione per sistemi multi-thread creazione più semplice, condivisione delle risorse meglio realizzabile grazie all’ambiente di esecuzione condiviso - estensioni di linguaggi di programmazione (es. C con C Thread package) - POSIX 1003.4 cambiamento di contesto più efficiente Thread Salvataggio dei registri della CPU Stato di esecuzione e priorità (es: BLOCCATO) Semafori, altri oggetti per la sincronizzazione Informazione di gestione di interrupt Lista di identificatori di thread S. Balsamo - 2008 - Università Ca’ Foscari di Venezia Identificatore dell’ambiente di esecuzione Pagine di spazio di indirizzi residenti in memoria; hardware cache entries Varianti e ibridi "16:45" SD.6.10 standard IEEE PThread - linguaggi con supporto integrato (es. Java, Modula-3,…) Componenti e informazioni di stato Ambiente di esecuzione c. Thread-per-object SD.6.9 Threads e linguaggi Tabella dello spazio di indirizzamento Interfacce di comunicazione, apertura file a. Thread-per-request "16:45" S. Balsamo - 2008 - Università Ca’ Foscari di Venezia Stati associati all’ambiente di esecuzione e ai threads Confronto fra più processi single-thread e un processo multi-thread: I/O N threads Server overhad - thread-per-connenction architecture un worker per connessione a) Prima del write workers Requests Client senza coda condivisa, max throughput, ma Tabella Pagine di B Input-output T1 in una architettura client-server come allocare le richieste ai thread del servente Kernel Tabella pagine di A Thread 1 genera i risultati Thread 2 fa richiesta al server Ricezione & accodamento S. Balsamo - 2008 - Università Ca’ Foscari di Venezia "16:45" SD.6.11 Programmazione concorrente. Costrutti - semafori - regioni critiche - monitor Linguaggi con supporto per thread, metodi per - creazione - distruzione - sincronizzazione S. Balsamo - 2008 - Università Ca’ Foscari di Venezia "16:45" SD.6.12 2 Gestione Thread Thread in Java Condivisione oggetti Costruttore di thread Java e gestione dei metodi Monitor per la sincronizzazione Cooperazione Coordinazione Thread(ThreadGroup group, Runnable target, String name) Crea un nuovo nello stato SUSPENDED, che apparterrà al group e sarà identificato dal name; il thread eseguirà il metodo run() dell’oggetto target setPriority(int newPriority), getPriority() Assegna e restituisce la priorità del thread run() Un thread esegue, se c’è, il metodo run() dell’oggetto target, altrimenti il proprio metodo run() (Thread implementa Runnable) start() Cambia lo stato di un thread da SUSPENDED a RUNNABLE sleep(int millisecs) Porta il thread nello stato SUSPENDED per il tempo specificato yield() entra nello stato READY e invoca lo scheduler. destroy() distrugge il thread synchronized definisce un monitor Es: gestione coda: classe Queue metodi sincronizzati addTo(), removeFrom() JVM gruppo Uso di variabili di condizione per bloccare e riattivare thread thread Limite: i monitor implementati in Java hanno una sola v.cond. implicita Gruppi -> sicurezza Classe Object con metodi controllo priorità wait(), notify(), notifyAll() Creato in stato SUSPENDED SUSPENDED start() destroy() RUNNABLE wait() Attivo TERMINATED sleep() Thread() da un altro run() S. Balsamo - 2008 - Università Ca’ Foscari di Venezia Bloccato notify(), notifyAll() "16:45" SD.6.13 "16:45" S. Balsamo - 2008 - Università Ca’ Foscari di Venezia Chiamate di sincronizzazione di thread Java SD.6.14 Scheduler e thread Scheduling thread.join(int millisecs) Blocca la chiamata di thread per un tempo al più come specificato finchè il thread non ha terminato Attivazione dello scheduler con/senza prelazione Esempio: sistema con scheduler gerarchico e basato su eventi Implementazione nucleo S.O. che supporta multi-thread - Windows, Mach, Chorus multi-thread a livello di applicazione thread.interrupt() Interrompe il thread: causa il ritorno da una chiamata bloccante come sleep() object.wait(long millisecs, int nanosecs) Blocca il thread chiamante finchè una chiamata fatta da notify() o notifyAll() su un object sveglia il thread, o il thread è interrotto, o il tempo specificato è esaurito object.notify(), object.notifyAll() Sveglia, rispettivamente, uno o tutti i threads che hanno chiamato wait() su un object Livello applicazione + minor costo per cambiamento di contesto (senza chiamata di sistema) scheduling ad hoc (adattivo) maggior numero di thread possibile - il nucleo non può schedulare threads non si possono comparare priorità di thread in diversi processi thread non possono usare la concorrenza dei multiprocessori un errore di thread blocca il processo e tutti i suoi threads SD.6.16 S. Balsamo - 2008 - Università Ca’ Foscari di Venezia A P added SA preempted Processo B Processo SA unblocked SA blocked Kernel upcall Kernel Assegnamento di processori virtuali ai processi Assegnamento variabile P idle P needed Eventi fra scheduler a livello utente e kernel P = processore, SA = attivazione scheduler Vantaggio: flessibilità - lo scheduler ad alto livello può allocare threads ad SA in accordo a politiche del livello nucleo Soluzioni ibride "16:45" Processo Processori virtuali Scheduling gerarchico S. Balsamo - 2008 - Università Ca’ Foscari di Venezia SD.6.15 "16:45" S. Balsamo - 2008 - Università Ca’ Foscari di Venezia "16:45" SD.6.17 S. Balsamo - 2008 - Università Ca’ Foscari di Venezia "16:45" SD.6.18 3 Comunicazione: invocazione e chiamata Invocazione fra spazi di indirizzi Comunicazione ad alto livello -> middleware chiamata di sistema RPC RMI chiamata di procedura locale invocazione di metodo locale invio messaggi notifica eventi comunicazione a gruppi (a) Chiamata di sistema User User 1 - User 1 SD.6.19 Lightweight remote procedure call User A Invocazioni serializzate process args marshal Send Receive unmarshal process results process args marshal Send 4. Execute procedure and copy results 1. Copy args stub stub Kernel 2. Trap to Kernel 3. Upcall 5. Return (trap) "16:45" SD.6.22 trasmissione Receive unmarshal process results "16:45" S. Balsamo - 2008 - Università Ca’ Foscari di Venezia SD.6.21 Organizzazione e architettura dei sistemi operativi distribuiti Separazione delle politiche di gestione delle risorse dai meccanismi di gestione delle risorse Le politiche possono dipendere dai servizi e dalle applicazioni Receive unmarshal execute request marshal Send Receive unmarshal execute request marshal Send Receive unmarshal process results Receive unmarshal execute request marshal Send 2000 Dimensione dei pacchetti Un pacchetto in più SD.6.20 Invocazioni concorrenti process args marshal Send process args marshal Send Receive unmarshal execute request marshal Send 1000 Openess gestione eterogeneità ed espandibilità sistemi eterogenei servizi eterogenei usi differenziati per gli stessi servizi per diversi utenti nuovi servizi Organizzazione del s.o. monolitico microkernel tempo es. Unix, Sprite, Windows NT es. Mach, Chorus Receive unmarshal process results Client S. Balsamo - 2008 - Università Ca’ Foscari di Venezia "16:45" S. Balsamo - 2008 - Università Ca’ Foscari di Venezia Server A stack Thread 2 User 2 Kernel 2 Kernel 1 Tempi di invocazioni serializzate e concorrenti Processi sulla stessa macchina - ottimizza le copie dei dati, lo scheduling dei thread A : parametri e argomenti condivisi Client Network Thread 1 uso di chiamate nulle per misurare i tempi di overhead (latenza) "16:45" Dimensione dei dati richiesti (bytes) User 2 0 banda (throughput) S. Balsamo - 2008 - Università Ca’ Foscari di Venezia Thread 2 Kernel (c) RPC/RMI (fra host) spazi di indirizzi da attraversare (locali, remoti, rete) comunicazione sulla rete (protocolli,…) scheduling thread, cambiamento di contesto ritardo (tempo) Kernel Thread 1 sincrona vs asincrona dipendenza da Ritardo RPC Control transfer via privileged instructions Protection domain boundary Prestazioni della comunicazione ad alto livello (invocazione) Misure: Thread (b) RPC/RMI (in un host) Uso di socket -> portabilità e interoperabilità tipo di comunicazione Ritardo RPC vs dimensione dei parametri Control transfer via trap instruction S. Balsamo - 2008 - Università Ca’ Foscari di Venezia Server Client Server "16:45" SD.6.23 S. Balsamo - 2008 - Università Ca’ Foscari di Venezia "16:45" SD.6.24 4 Nucleo monolitico e microkernel S4 ....... Key: S2 Scheduling - allocazione dei processi Allocazione dei processi nei sistemi centralizzati: Coda unica di processi scheduler come componente del s.o. con il compito di - gestire la coda (lo stato) dei processi - applicare un algoritmi di scheduling Middleware S1 S1 Ruolo del microkernel S2 S3 S4 ....... ....... S3 Monolithic Kernel Language support subsystem Language support subsystem OS emulation subsystem Gli algoritmi di scheduling sono progettati per ottimizzare le prestazioni del sistema: .... (1) minimizzazione del tempo di risposta per varie classi di utenti (2) massimizzazione dell’uso delle risorse del sistema (e.g. throughput, utilizzazione CPU) Microkernel Microkernel Hardware Server: Kernel code and data: Dynamically loaded server program: Vantaggio: relativa efficienza estendibile modulare più semplice da verificare Funzionalità: monolitico - microkernel "16:45" Esempi: Round Robin (a quanto di tempo), a priorità con/senza prelazione, a priorità astatta/basata sui tempi (es. SPTF, SRPTF),… Vantaggi: Separazione fra politiche e meccanismi di gestione delle risorse S. Balsamo - 2008 - Università Ca’ Foscari di Venezia Altre caratteristiche: equità, efficienza, tolleranza ai guasti… Il microkernel supporta il middleware tramite i sottosistemi Vantaggio: estendibilità modularità SD.6.25 Scheduling - allocazione dei processi S. Balsamo - 2008 - Università Ca’ Foscari di Venezia "16:45" SD.6.26 Scheduling - allocazione dei processi in sistemi distribuiti Classificazione: Obbietivi degli algoritmi di allocazione di processi in sistemi distribuiti: l’ottimizzazione delle prestazioni - come per sistemi centralizzati Coda unica di processi statici / dinamici deterministici / non-deterministici se sono note le richieste future dei processi (1) minimizzazione del tempo di risposta per varie classi di utenti Un insieme di processori identici Un algoritmo di scheduling può tener conto della storia passata per assegnare un processo ad una CPU già utilizzata per ottimizzare l’uso della cache interna al processore (obbiettivo 1) (2) massimizzazione dell’uso delle risorse del sistema (e.g. throughput, utilizzo CPU) - inoltre a tal fine anche Allocazione dei processi nei sistemi distribuiti: la coda dei processi non è unica => a quale U.E. allocare il processo? => è necessario effettuare una migrazione di processi già allocati? (3) bilanciamento del carico centralizzati / distribuiti / gerarchici ottimi / approssimati migratori/ non- migratori Gli algoritmi possono usare informazioni di stato (locale, di un sottosistema, globali?) possono usare la migrazione possono usare euristiche o principi di ottimalità (ma l’allocazione dei processi è in generale un problema NP-completo) I processori possono essere identici oppure possono essere eterogenei o con differenze limitate alla velocità del clock (es. cluster di workstations) o con differenze significative SD.6.27 Algoritmi di allocazione dei processi in sistemi distribuiti Teoremi della teoria delle code mostrano gli algoritmi ottimi sotto varie condizioni Allocazione dei processi nei sistemi multiprocessore: "16:45" S. Balsamo - 2008 - Università Ca’ Foscari di Venezia se un processo in esecuzione può essere spostato Per gli algoritmi con migrazione: politica di trasferimento: locale / globale in base alle informazioni usate per la decisione politica di localizzazione: sender-initiated / receiver-initiated se la decisione viene presa dal mittente o dal destinatario S. Balsamo - 2008 - Università Ca’ Foscari di Venezia "16:45" SD.6.28 S. Balsamo - 2008 - Università Ca’ Foscari di Venezia "16:45" SD.6.29 S. Balsamo - 2008 - Università Ca’ Foscari di Venezia "16:45" SD.6.30 5 Algoritmi di allocazione dei processi in sistemi distribuiti Algoritmi di allocazione dei processi in sistemi distribuiti Gli algoritmi dinamici basano le decisioni su informazioni di stato - quale stato? Algoritmo probes - Quando il processore su cui sta girando un processo diventa sovraccarico decide di trasferire il processo Alcuni esempi Quale misura di stato è significativa? E aggiornata? - algoritmo probes - locale / globale? - algoritmo deterministico - quando raccogliere lo stato? - algoritmo centralizzato - quanto spesso aggiornarlo? - algoritmo bidding - come considerare il tempo necessario per reperire le informazioni? - algoritmo gerarchico - e quello, in generale, per calcolare l’algoritmo di scheduling? - coscheduling - sonda un altro processore per stabilire se effettuare il trasferimento - se il processore interrogato è sottoutilizzato avviene il trasferimento - altrimenti si sceglie un altro processore a caso per ripetere il tentativo fino ad un massimo stabilito Come scegliere la soglia sia locale sia di accettazione? Quanti tentativi effettuare? -… SD.6.31 "16:45" S. Balsamo - 2008 - Università Ca’ Foscari di Venezia "16:45" S. Balsamo - 2008 - Università Ca’ Foscari di Venezia Algoritmo deterministico SD.6.32 Algoritmo centralizzato n processi da distribuire su k processori identici (n>k) Lʼalgoritmo centralizzato distribuisce il carico per bilanciare il carico Assume noto il traffico fra ogni coppia di processi Ad ogni workstation viene assegnato un punteggio Lʼalgoritmo distribuisce il carico per minimizzare il traffico totale fra i processori "16:45" S. Balsamo - 2008 - Università Ca’ Foscari di Venezia SD.6.33 Algoritmo bidding Lʼalgoritmo bidding estende lʼalgoritmo centralizzato se invia ad altri i processi (consuma risorsa) il punteggio aumenta se serve altri (esegue processi di altre w.) il punteggio diminuisce Si basa su metafora del sistema economico, dove Applicazione di tecniche di clustering tempo di CPU ↔ il prezzo delle risorse fissate da leggi di mercato (punteggi) Partizionamento del grafo nodi = processi archi = comunicazione che minimizzi il numero di archi che attraversano la partizione Un processore in stato libero riceve il processo generato dalla workstation con punteggio minore ogni processore calcola il prezzo offerto in base alle richieste e alla qualità del servizio Lʼalgoritmo usa una tabella di utilizzo dei processori … … … Lʼalgoritmo valuta la scelta più conveniente per ogni processo da eseguire Problema NP-hard Euristica Variante: il punteggio può essere incrementato/decrementato di una costante per ogni unità di tempo di CPU richiesto/offerto Svantaggi: informazione sul traffico - difficile da stabilire - possibilmente soggetta a variazioni S. Balsamo - 2008 - Università Ca’ Foscari di Venezia "16:45" SD.6.34 S. Balsamo - 2008 - Università Ca’ Foscari di Venezia "16:45" SD.6.35 S. Balsamo - 2008 - Università Ca’ Foscari di Venezia "16:45" SD.6.36 6 Algoritmo gerarchico Coscheduling Lʼalgoritmo gerarchico aumenta la scalabilità Un algoritmo può tenere conto della interazione della comunicazione fra processi per allocare processi fortemente comunicanti sulla stessa U.E. Organizzazione gerarchica dei processori ⇒ conviene mantenere insieme i processi comunicanti ogni k processori un supervisore mantiene le informazioni sui - singoli carichi di lavoro - numero di processori disponibili Esempio: matrice che raccoglie l’informazione righe = unità di tempo colonne = processori elemento [i,j] = id. di processo da eseguire sul al tempo i sul processore j Diversi livelli di gerarchia Meccanismo di sostituzione in caso di caduta di un supervisore Assume processori uniprogrammati L’algoritmo all’unità di tempo i esegue i processi assegnati indicati nella riga [i] Ogni supervisore che riceve una richiesta di J processori - se dispone di K<J inoltra la richiesta al livello superiore della gerarchia - altrimenti suddivide la richiesta in parti secondo le CPU libere dei livelli inferiori inoltrandole verso il basso fino ai processori S. Balsamo - 2008 - Università Ca’ Foscari di Venezia "16:45" SD.6.37 S. Balsamo - 2008 - Università Ca’ Foscari di Venezia "16:45" SD.6.38 7