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


Guida alla virtualizzazione dei sistemi operativi - Prof. Ghini, Sintesi del corso di Sistemi Informatici

Una panoramica dettagliata sulla virtualizzazione dei sistemi operativi, spiegando concetti come la virtualizzazione hardware, la virtualizzazione a livello sistema operativo, i container, l'hyper-v, xen, proxmox, kubernetes, terraform e la gestione di sistemi virtualizzati tramite bash scripting. Vengono inoltre spiegati concetti come la traduzione dinamica binaria, la gestione delle risorse, la replicazione dei pods su host diversi e l'autoscaling.

Tipologia: Sintesi del corso

2021/2022

In vendita dal 20/04/2024

tommaso-bagnolini
tommaso-bagnolini 🇮🇹

4 documenti

1 / 13

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
Virtualizzazione
DEF.: possibilità di astrarre le componenti HW di un calcolatore al fine di renderle disponibili in
forma virtuale, permettendo quindi di installare OS su HW virtuali. Nello specifico, l’insieme di
componenti HW virtuali prende il nome di “macchina virtuale”.
Vantaggi:
Miglior utilizzo di risorse HW e riduzione di consumo di spazio
Possibilità di utilizzare OS diversi
Miglior gestione delle immagini di sistema
Miglior portabilità dei sistemi
Maggior scalabilità
Vocabolario
Sistema HOST: macchina fisica su cui gira l’OS principale che poi ospiterà le VM.
Sistema GUEST (MV): risorse HW e OS eseguiti “sopra” il sistema host.
Hypervisor: software che crea e manda in esecuzione le VM oltre che astrarre e rendere
disponibili le risorse HW. Svolge anche funzioni di monitoring e sicurezza.
Virtualizzazione Desktop
Opera sul PC dell’utente, perciò la VM sfrutta le periferiche della macchina fisica per consentire
l’interazione con il sistema guest. È realizzata mediante SW che permettono di eseguire altri OS
“sopra” l’host. L’hypervisor utilizzato è classificato come Type2 (hosted).
È utile per far funzionare un SW non compatibile con l’OS dell’host.
SW per virtualizzazione desktop:
VirtualBox
Qemu
Vmware
Virtualizzazione Server
Si esegue su HW in sale macchine in cui l’utente non opera direttamente sfruttando le periferiche
della macchina fisica, bensì si collega da remoto tramite MV. Essa è realizzata mediante OS
dedicati o ad hoc e viene impiegata per virtualizzare server/servizi/appliance di organizzazioni.
L’hypervisor utilizzato è classificato come Type1 (bare-metal).
È utile per virtualizzare OS desktop che poi verranno utilizzati dagli utenti attraverso sessioni
remote.
SW per virtualizzazione server:
Hyper-V
Xen
Proxmox
pf3
pf4
pf5
pf8
pf9
pfa
pfd

Anteprima parziale del testo

Scarica Guida alla virtualizzazione dei sistemi operativi - Prof. Ghini e più Sintesi del corso in PDF di Sistemi Informatici solo su Docsity!

Virtualizzazione

DEF.: possibilità di astrarre le componenti HW di un calcolatore al fine di renderle disponibili in

forma virtuale, permettendo quindi di installare OS su HW virtuali. Nello specifico, l’insieme di

componenti HW virtuali prende il nome di “macchina virtuale”.

Vantaggi:

 Miglior utilizzo di risorse HW e riduzione di consumo di spazio

 Possibilità di utilizzare OS diversi

 Miglior gestione delle immagini di sistema

 Miglior portabilità dei sistemi

 Maggior scalabilità

Vocabolario

 Sistema HOST : macchina fisica su cui gira l’OS principale che poi ospiterà le VM.

 Sistema GUEST (MV): risorse HW e OS eseguiti “sopra” il sistema host.

 Hypervisor : software che crea e manda in esecuzione le VM oltre che astrarre e rendere

disponibili le risorse HW. Svolge anche funzioni di monitoring e sicurezza.

Virtualizzazione Desktop

Opera sul PC dell’utente, perciò la VM sfrutta le periferiche della macchina fisica per consentire

l’interazione con il sistema guest. È realizzata mediante SW che permettono di eseguire altri OS

“sopra” l’host. L’hypervisor utilizzato è classificato come Type2 (hosted).

È utile per far funzionare un SW non compatibile con l’OS dell’host.

SW per virtualizzazione desktop:

 VirtualBox

 Qemu

 Vmware

Virtualizzazione Server

Si esegue su HW in sale macchine in cui l’utente non opera direttamente sfruttando le periferiche

della macchina fisica, bensì si collega da remoto tramite MV. Essa è realizzata mediante OS

dedicati o ad hoc e viene impiegata per virtualizzare server/servizi/appliance di organizzazioni.

L’hypervisor utilizzato è classificato come Type1 (bare-metal).

È utile per virtualizzare OS desktop che poi verranno utilizzati dagli utenti attraverso sessioni

remote.

SW per virtualizzazione server:

 Hyper-V

 Xen

 Proxmox

Virtualizzazione in senso generale

 Virtualizzazione (in senso stretto): permette di eseguire 1 o + OS da un unico PC in un

ambiente che prende il nome di VM. Il codice della VM viene eseguito direttamente dal

sistema host ma il guest pensa di essere sulla macchina reale. CPU virtuali UGUALI a quello della

macchina fisica

 Emulazione di CPU: l’hardware viene completamente emulato e ogni istruzione che il guest

esegue viene tradotta in una sequenza di istruzioni dalla macchina host. È un processo più

lento rispetto alla virtualizzazione. CPU virtuali diverse da quello fisico grazie a processi di traduzione che però

consumano operosità al calcolatore.

Esempio di Emulatore di CPU – QEMU

QEMU è un emulatore di processore e in quanto tale emula l’HW dell’OS ospitante esaminando in

modo dinamico il codice eseguito all’interno della VM e traducendolo in istruzioni comprensibili

alla macchina host.

Nel caso di architetture x86 esiste un’implementazione apposita (acceleratore kqemu) che limita la

traduzione dinamica permettendo prestazioni attorno al 30-50% di quelle del sistema host.

Tassonomia di virtualizzazioni

Le moderne CPU prevedono confini di sicurezza ( protection ring ) indicizzati da 0 a 3 e in base al

livello in cui la CPU è settata può eseguire solo alcune operazioni. In riferimento a ciò le istruzioni

macchina si distinguono in:

 Privilegiate : possono essere eseguite solo dal kernel del OS. Nel ring di indice più basso

(modalità kernel ) la CPU esegue istruzioni privilegiate.

 Generali : possono essere eseguite anche dallo spazio utente. Nel ring di indice più alto

(modalità utente ) la CPU non esegue istruzioni privilegiate.

Full/Para – Virtualization

la virtualizzazione hardware fornisce una astrazione di macchina virtuale (CPU) che però deve

essere dello stesso tipo della macchina fisica sottostante. Fornisce una interfaccia, su cui installare

un sistema operativo, e può essere distinta in Para-virtualization e Full-virtualization.

 Para-virtualization: la macchina virtuale presenta un’interfaccia differente rispetto alla

macchina fisica questo comporta il dover modificare l’OS guest per consentire l’esecuzione

all’interno della macchina virtuale.

L’hypervisor espone un insieme di API che il sistema operativo guest dovrà utilizzare, in

particolare per utilizzare le istruzioni privilegiate. Le chiamate a queste funzioni sono

usualmente definite Hypercall.

 Full-virtualization: fornisce macchine virtuali che hanno la medesima interfaccia di una

macchina fisica. Idealmente il sistema operativo guest non può identificare che si trova su

una macchina virtuale. Il grande vantaggio è il non dover modificare il sistema operativo.

L'hypervisor adotterà un sistema di TRAP per gestire le istruzioni privilegiate.

Istruzioni privilegiate nella Full Virtualization

Il grosso problema delle istruzioni privilegiate è che dovrebbero essere eseguite in kernel mode.

Potenzialmente possono svolgere compiti senza alcuna limitazione, e potrebbero travalicare i

confini delle macchine virtuali.

Occorre limitare e controllare le azioni che vengono svolte dalle istruzioni privilegiate, eseguite nel

ring 0, cioè in kernel mode. Esistono 2 diverse soluzioni:

 Traduzione dinamica binaria (binary translation):

La traduzione binaria (binary translation) consiste nel riscrivere dinamicamente a run-time,

le parti del codice del sistema operativo guest che dovrebbero essere eseguite in modo

privilegiato. Le istruzioni non privilegiate del guest sono eseguite direttamente.

Per le istruzioni privilegiate invece la CPU opera sospendendo via via l'esecuzione delle

istruzioni. Il codice viene analizzato e parti di questo codice copiate in una cache e qui in

parte sostituito con codice che accede alle risorse virtualizzate invece che alle risorse reali.

 Assistita dall’hardware (HW assisted):

L’HW assisted aggiunge un nuovo ring all’architettura standard x86, chiamato Ring -1. Il

sistema operativo host e hypervisor vengono eseguiti nel nuovo ring -1, mentre il sistema

operativo guest è eseguito nel Ring 0. Così facendo il sistema operativo guest può eseguire

le istruzioni privilegiate, sotto però il controllo dell'hypervisor.

Vengono poi aggiunte delle funzionalità che aggiungono un ulteriore livello di mappatura

delle pagine in memoria: Intel Extended Page Tables (EPT). Individuata la pagina in

memoria virtuale si stabilisce un’altra tabella dove viene collocata la pagina dell’Hypervisor.

Infine vengono aggiunte tabelle con le info. su ciascuna VM: VMCS shadowing, struttura

dati in memoria che esiste per ogni VM.

Container

Creano uno spazio utente separato, isolando un’applicazione dal resto dell’OS (pacchettizzo

un’applicazione rendendola pronta per il deployment). Più container possono appoggiarsi allo

stesso spazio kernel. Una volta creato e customizzato posso replicare quel container più volte sia

su una stessa VM che su una diversa.

Può essere comodo salvare i dati permanenti delle applicazioni di un container su un servizio

separato, magari anch'esso contenuto in un container. Posso inoltre costruire applicazioni

composte da tanti micro-componenti riutilizzabili, ciascuno dei quali isolato in un container.

Esempi di container:

 Docker : si appoggia su OS Linux in quanto fornisce a livello kernel un supporto detto LXC

(Linux Container)

 Hyper-V : di Microsoft, il quale fornisce dei container che in realtà sono VM.

 Container di Windows Server : installabile su configurazioni minimali detti nano server (no

GUI, 64 bit, …).

1. Docker Swarm

Non è altro che distribuire il carico su più container e su più macchine ed eseguire una

applicazione formata da container su un cluster di host fisici o virtuali allo scopo di aumentare il

numero di richieste da servire.

In Docker Swarm esiste un cluster di macchine comandate da un nodo Manager, gli altri sono nodi

Worker. Una applicazione è costituita da insiemi (detti service) di container (detti task); questi

ultimo possono essere replicati e collocati su più nodi worker.

Il nodo Manager coordina i workers e distribuisce i task tra i nodi worker, il Manager riceve le

richieste dai client e le distribuisce tra i task del servizio richiesto.

2. KUBERNETES - Applicazioni

Fornisce automaticamente scalabilità e resilienza ad applicazioni basate su container docker, in

esecuzione su cluster di host fisici o virtuali.

Le app per Kubernetes sono costituite da pods , ciascuno dei quali è un insieme di container che cooperano e comunicano tra loro come se si trovassero in un unico host fisico e svolgono nel complesso un certo servizio, ad esempio un pod può realizzare un servizio web mentre un altro pod può eseguire una serie di calcoli, oppure può salvare dati in un database.

KUBERNETES – Gestione Scalabilità

L’app decide quanti pods impiegare, mentre kubernetes decide automaticamente su quali nodi allocare tali pods. Inoltre l’app può configurare kubernetes in modo tale che all’aumentare del carico dell’app effettui 3 tipi di operazioni:

Autoscaling verticale : aumenti le risorse a disposizione di un pod (uso CPU, memoria impiegata, …).  Autoscaling orizzontale : aumenti il numero delle repliche dei pods applicativi.  Cluster autoscaling : aumenti il numero di nodi che compongono il cluster redistribuendo i pods.

Ciò consente anche di mantenere l'applicazione in funzione anche se qualche host si guasta poiché ne rimangono altri a disposizione.

N.B.: La possibilità di realizzare un cluster autoscaling dipende da quali host usiamo:

 Per host FISICI : occorre un sistema di accensione degli host fisici guidabile via SW.  Per host VIRTUALI : occorre un supporto che ci dia la possibilità di creare e configurare nuove VM in automatico via SW.

KUBERNETES – Nodi Virtuali

Come detto precedentemente è possibile creare un cluster kubernetes formato da host che siano VM, le quali possono essere create manualmente su host fisici oppure create via SW su cloud pubblici/privati.

Esistono cloud di diversi provider:

 Google Cloud  Microsoft Azure  Amazon AWS  …

È possibile però creare cloud privati gestendo le proprie macchine con un insieme di applicativi open source noto come Openstack.

Inoltre i sistemi cloud forniscono delle API tramite le quali possiamo ordinare la creazione e configurazione delle VM. Purtroppo le API differiscono da cloud a cloud ma per ovviare a questa problematica esistono SW come Terraform , i quali offrono un servizio di astrazione dei sistemi cloud offrendo quindi un insieme di API universali utilizzabili su tutti i sistemi cloud.

Tramite tali strumenti è possibile creare cluster kubernetes composti da host virtuali e applicare il cluster autoscaling configurando kubernetes affinché usi Terraform per creare nuove VM quando necessario per scalare.

3. KUBERNETES-as-a-Service

Alcuni cloud offrono un servizio kubernetes senza che sia necessario creare il cluster, infatti questo viene installato dal provider su richiesta via SW e a chi produce l’app vengono fornite API mediante le quali inizializzare il cluster e dispiegarvi l’app.

In tal modo è possibile costruire app scalabili e resilienti in maniera più semplice pagando al provider cloud il costo del cluster (solitamente elevato).

4. Container-as-a-Service

Alcuni cloud offrono la possibilità di far eseguire un container in molteplici istanze su un cluster kubernetes- as-a-service costruito dal provider stesso. Il container in questione viene incapsulato in un pod eseguito nel cluster kubernetes. In tal modo essendo completamente gestito dal provider (a pagamento ), lo sviluppatore dell’app si deve preoccupare solo di costruire il container.

5. Serverless / Function-as-a-Service (FaaS)

Alcuni provider offrono un servizio che consenti di implementare funzione eseguite “apparentemente” senza definire né container né cluster. Ciò che accade è che il provider incorpora le funzioni definite dall’utente in un container e lo incapsula su un cluster kubernetes replicandolo in base al carico di richieste.

Per l’utente è facile creare tali funzioni ed il problema della creazione di container e pod è risolto, dietro pagamento , dal provider cloud.

SISTEMI VIRTUALIZZATI – Bash scripting

Struttura del Sistema Operativo:

  1. Utenti
  2. Unità di sistema (shell, editor, …)
  3. Librerie standard (printf, exec, …)
  4. Kernel
  5. Hardware

In origine i terminali (schermo+tastiera) erano dispositivi separati dal computer vero e proprio (detto mainframe) e comunicavano con questo mediante una linea seriale. L’output verso l’utente era di tipo solo testuale.

Attualmente i terminali sono integrati nei computer (schermo e tastiera del PC).

Con l’avvento delle interfacce grafiche, lo schermo del terminale viene emulato in una “finestra” dell’ambiente grafico. Si parla di terminale virtuale.

La shell legge ciascuna riga di comando, e la interpreta eseguendo alcune operazioni. La shell comincia riconoscendo i caratteri speciali. Successivamente la shell opera alcune sostituzioni nella riga di comando, effettuando le cosiddette espansioni (expansion). Le espansioni principali sono:

 history expansion  brace expansion  tilde expansion  parameter and variable expansion  arithmetic expansion  command substitution (effettuata da sinistra verso destra)  word splitting  pathname expansion  quote removal

Il comando echo permette di visualizzare a video la sequenza dei caratteri scritti subito dopo la parola echo e fino al primo carattere di andata a capolinea (che è inserito digitando il tasto o .

Se ho bisogno di far stampare a video anche caratteri speciali come punti e virgola, andate a capo (per visualizzare su più righe), e altri, devo inserire sia prima che dopo la stringa da stampare il separatore “ doppio apice.

Variabili

La shell dei comandi permette di usare delle Variabili che sono dei simboli dotati di un nome e di un valore. Le variabili di una shell possono essere stabilite e modificate sia dal sistema operativo sia dall’utente che usa quella shell.

Alcune variabili (dette d’ambiente) vengono impostate subito dal sistema operativo non appena viene iniziata l’esecuzione della shell (ad es la variabile PATH).

Le variabili possono essere usate quando si digitano degli ordini per la shell. La shell riconosce i nomi delle variabili contenuti negli ordini digitati, e cambia il contenuto dell’ordine sostituendo al nome della variabile il valore della variabile.

Affinchè la shell distingua il nome di una variabile, questa deve essere preceduta dalla coppia di caratteri $ { e seguita dal carattere }.

Path

Esiste una variabile d’ambiente particolare e importantissima, detta PATH che viene impostata dal sistema operativo già all’inizio dell’esecuzione della shell. L’utente può cambiare il valore di questa variabile.

La variabile PATH contiene una sequenza di percorsi assoluti nel filesystem di alcune directory in cui sono contenuti gli eseguibili. I diversi percorsi sono separati dal carattere :

Utenti e Gruppi

Nei sistemi Unix/Linux esistono le astrazioni di utente (user) e gruppo di utenti (group).

Un utente (user) è caratterizzato da una stringa chiamata username che contiene il nome utente (studente, vic, syslog) e da un identificatore numerico chiamato userID entrambi univoci nel sistema.

Un gruppo (group) è caratterizzato da una stringa chiamata groupname che contiene il nome del gruppo (staff, admin, ) e da un identificatore numerico chiamato groupID entrambi univoci nel sistema. Ciascun utente appartiene ad uno o più gruppi.

Un utente può tentare di accedere ad un file, chiedendo di leggere o modificare il contenuto di un file oppure di eseguire un file eseguibile, anche se non è il proprietario del file.

Il proprietario di un file stabilisce chi può accedere a quel suo file, configurando i permessi di accesso a quel file. Il proprietario stabilisce, distinguendoli, i permessi assegnati al proprietario del file (sé stesso), agli utenti appartenenti allo stesso gruppo del file e, infine, a tutti gli altri.

Permessi di file e directory

Ogni file ha un proprietario (identificato da un numero intero univoco detto userID) ed un gruppo del proprietario (identificato da un intero detto groupID). Quando un utente crea un file, il s.o. assegna l’utente come proprietario del file appena creato. Il proprietario/creatore poi può cambiare il proprietario del file con il comando chown nuovoproprietario nomefile

Lettura (valore 4, simbolo r) File: lettura Directory: elenco file/directory nella cartella (non le proprietà di file e directory)

Scrittura (valore 2, simbolo w) File: modifica Directory: creazione, eliminazione, cambio nome file

Esecuzione (valore 1, simbolo x) File: esecuzione Directory: accesso all'interno della directory e proprietà di suoi file e directory

Solo il proprietario del file può cambiare proprietario, gruppo e permessi del proprio file. Comandi per cambiare proprietario, gruppo e permessi: chown, chgrp, chmod

Esempio di assegnazione contemporanea di permessi mediante formato numerico:

per owner (lettura, scrittura e esecuzione: 7), per group (lettura e scrittura: 6) e per other (sola lettura: 4)

chmod 764 ./miofile.txt

 Se una var. non è mai stata dichiarata allora non esiste  Se una var è stata creta ed inizializzata con “ ” allora esiste ma è vuota

Posso eliminare una var esistente tramite il comando “unset nome_variabile”.

Funzione history

History memorizza i comandi lanciati dalla shell e permette di visualizzarli come elenco ed eventualmente rievocarli tramite il comando “! n umero_comando

Comando set

 Set lanciato da solo restituisce l’elenco di tutte le variabili della shell e le funzioni implementate.  Set con parametri setta/resetta un’opzione di comportamento della shell in cui viene lanciato, esempio: o Set +o history: disabilita memorizzazione history o Set -o history: abilita la memorizzazione history o Set -a: le variabili create sono istantaneamente definite d’ambiente