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