Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
vuoi
o PayPal
tutte le volte che vuoi
CPU.
Sistemi di Virtualizzazione 8
I bus sono suddivisi in linee, nelle quali "passano" dati, indirizzi e informazioni di controllo.
Tipi di bus:
Bus per le comunicazioni tra CPU e memoria: lunghezza corta ma velocità alta.
Bus di tipo I/O: lunghezza più ampia e dunque più lenti.
Dispositivi di I/O
Un dispositivo di I/O è formato da:
dal dispositivo vero e proprio (stampante, mouse, disco, ecc…).
il controllore del dispositivo, che funge da interfaccia per tutte le operazioni.
I controllori posso avere dei registri:
status, memorizza lo stato della periferica (idle, busy, down, ...).
control, memorizza il comando da eseguire.
data-in, memorizza i dati da I/O.
data-out, memorizza i dati dal dispositivo di I/O.
Per richiedere un'operazione di I/O, la CPU deve preparare il contenuto da caricare nei registri del
controllore, legge il bit di status (il busy bit).
I dispositivi di I/O sono molto più lenti del processore, tuttavia esistono diverse tecniche per gestirli:
Controllo Programmato
È un metodo in cui il processore è pienamente coinvolto nella gestione dell’operazione di I/O richiesta.
Il processore, dopo aver preparato il controller ad eseguire l’operazione di I/O, interroga continuamente
il controller per verificare l’esito dell’operazione. Quando l'operazione è completata, il processore
trasferisce i dati (nel caso di un'operazione di input) o esegue una nuova istruzione. Il ciclo eseguito
dal processore in attesa che l'operazione venga eseguita viene chiamato attesa attiva.
Il controllo programmato è molto semplice ma anche molto costoso. Il processore spreca tempo nel
ciclo di attesa attiva, perché non svolge nessun'altra attività oltre a osservare lo stato del dispositivo.
Polling
Con questa tecnica il processore, durante i cicli di attesa attiva, controlla gli altri dispositivi di I/O. Se un
dispositivo necessita di attenzioni, il processore soddisfa la sua richiesta.
Interrupt
Gli interrupt (già visti in sistemi operativi mod. A) costituiscono probabilmente la soluzione migliore. Per
evitare che la CPU sprechi tempo essa controlla la linea degli interrupt al termine di ciascuna
operazione. In questo modo evitiamo una attesa attiva, ottimizzando la gestione della CPU (vedi
paragrafo sugli interrupt in SO mod. A). In sostanza, quando il controller termina l’operazione manda
una richiesta di interrupt; il processore controlla la linea di richiesta degli interrupt e, se presente, lo
gestisce con una routine ecc…
Sistemi di Virtualizzazione 9
Gli eventi di I/O sono interrupt di tipo mascherabile.
Direct Memory Access (DMA)
Con l’uso degli interrupt il processore è comunque molto impegnato nel trasferire i dati tra i dispositivi
I/O e la memoria.
Il DMA e una tecnologia che permette ai dispositivi di I/O di accedere direttamente alla memoria
principale del computer senza passare per la CPU. Questo migliora le prestazioni del sistema,
consentendo alla CPU di concentrarsi su altre attività di elaborazione ed è fondamentale per il
funzionamento efficiente di molte applicazioni e periferiche hardware.
Tipi di dispositivi
I vari dispositivi I/O possono essere distinti in tre classi differenti: dispositivi a blocchi, dispositivi a
carattere e dispositivi di rete.
Dispositivi a blocchi: i dispositivi a blocchi sono dispositivi che trasferiscono dati in blocchi fissi di
dimensione specifica, tipicamente da 512 byte a diversi kilobyte. Questi dispositivi sono utilizzati
per l'accesso casuale ai dati, il che significa che puoi leggere o scrivere blocchi di dati in qualsiasi
ordine. Esempi comuni di dispositivi a blocchi includono: dischi rigidi (HDD), unità a stato solido
(SSD), CD-ROM, Memorie USB.
Dispositivi a carattere: i dispositivi a caratteri, invece, trasferiscono dati come un flusso continuo
di byte, uno alla volta. Sono ideali per l'accesso sequenziale ai dati. Esempi di dispositivi a caratteri
includono: tastiere, mouse, stampanti.
Questi dispositivi non supportano l'accesso casuale come i dispositivi a blocchi, il che significa che
i dati vengono elaborati in modo sequenziale
Dispositivi di rete: i dispositivi di rete sono utilizzati per gestire la comunicazione tra computer
attraverso una rete. Questi dispositivi inviano e ricevono pacchetti di dati tramite protocolli di rete.
Esempi comuni di dispositivi di rete includono: schede di rete, modem, router e switch.
Virtualizzazione dell’I/O
L’I/O in un certo senso è più semplice da gestire. In un ambiente fisico (non virtualizzato) il sistema
operativo manda richieste I/O ai dispositivi di archiviazione e, per comunicare con il controller di quel
dispositivo (disco), il SO utilizza i driver SCSI.
In un ambiente virtualizzato cosa succede? Il SO della VM manda richieste I/O (come detto sopra),
all’interno della VM, il SO utilizza effettivamente i driver SCSI e crede di comunicare con il controller
fisico; in realtà quello che vede è un’astrazione (un emulatore) che l’hypervisor usa per inviare e
ricevere richieste di I/O. L’emulatore inserisce la richiesta in una coda (di storage in questo caso), che
raccoglie tutte le richieste I/O (di storage) di tutte le macchine virtuali presenti sull’host. Questa
richiesta viene successivamente passata al driver di storage dell’hypervisor che comunica
direttamente con il controller fisico di storage. Il controller esegue finalmente la richiesta e i blocchi di
dati seguono il percorso inverso per restituire alla VM corretta il risultato.
Sistemi di Virtualizzazione 10
Il Citrix Hypervisor (Xen Hypervisor - tipo 1) si comporta in modo diverso invece: abbiamo una
macchina virtuale chiamata “Contro Domain” che contiene dei moduli che comunicano direttamente
con i dispositivi I/O. Il componente che prende in carico la richiesta del driver che viene dal guest è il
Control Domain che comunica direttamente con l’host. L’hypervisor in questo modo viene bypassato.
Provisioning dello storage
Esistono due metodi per gestire il provisioning (ovvero come la macchina virtuale si prende lo storage
che dovrà utilizzare): thick provisioning e thin provisioning.
Quando configuriamo il disco della macchina virtuale e per esempio chiediamo 100GB, utilizzando
il thick provisioning vengono presi immediatamente dallo storage dell’host e non sono più
disponibili ad esso (disponibili solo dalla VM). Il principale lato negativo è che ovviamente tutta
quella parte del disco è presa a priori, quindi rischio di avere memoria in eccesso che non mi serve.
Si divide a sua volta in Lazy Zeroed e Eager Zeroed: nel primo caso i 100GB non vengono
inizializzati subito ma man mano che io utilizzo la memoria precedentemente allocata, riferendosi ai
Sistemi di Virtualizzazione 11
blocchi e mettendo gli 0 su tutti i blocchi. Nel secondo caso i 100GB vengono inizializzati subito,
assegnando i blocchi. In entrambi i casi ovviamente quei 100GB sono occupati e non più disponibili
dall’host.
L’altro approccio è il thin provisioning. Configuro la macchina virtuale e chiedo 100GB ma viene
allocata man mano che mi serve, senza avere 100GB immediatamente occupati. E’ una sorta di
ottimizzazione della memoria.
I Driver
Il driver è il software che inizia a dipendere dal dispositivo stesso. Il driver fa parte del kernel del
sistema operativo. Solitamente non nasce con il sistema operativo, solitamente sono dei moduli caricati
esternamente. Il driver va a settare i vari registri. Intercetta una chiamata di sistema (o per meglio dire,
una funzione) effettuata dal device independent operating system software.
Solitamente il sistema operativo fornisce un'interfaccia che, lo sviluppatore del driver, deve
implementare per far funzionare il dispositivo.
Loadable Kernel Module (LKM)
I LKM sono dei moduli caricati nel kernel run-time, caratterizzati dall'estensione .
.ko
Vengono utilizzati per:
per i dispositivi;
per il file system;
per le chiamate di sistema;
per la rete.
permette di inserire un modulo nel kernel, a patto che sia compilato e salvato in una cartella
modprobe
particolare: per farlo si usa .
sudo modproble <nome_modulo>
#include <linux/init.h>
#include <linux/module.h>
MODULE_AUTHOR("Antjuan");
MODULE_LICENCE("GPL");
static int __init hello_init(void) {
printk(KERNEL_INFO "Module loaded successfully.");
return 0;
}
module_init(hello_init);
Virtual Box
Sistemi di Virtualizzazione 12
# Step 1: Create a new virtual machine
VBoxManage createvm --name "<VM_NAME>" --register
# Step 2: Configure virtual machine settings
VBoxManage modifyvm "<VM_NAME>" --memory 2048 --cpus 2 --nic1 nat
# Step 3: Create and attach virtual hard disk
VBoxManage createhd --filename "<PATH_TO_VM_DISK>.vdi" --size 20000
VBoxManage storagectl "<VM_NAME>" --name "SATA Controller" --add sata --controll
VBoxManage storageattach "<VM_NAME>" --storagectl "SATA Controller" --port 0 --d
# Step 4: Attach installation ISO (if needed)
VBoxManage storageattach "<VM_NAME>" --storagectl "SATA Controller" --port 1 --d
# Step 5: Start the virtual machine in headless mode
VBoxManage startvm "<VM_NAME>" --type headless
# ----------------------------------------------------------------------- #
# Set Port Forwarding for VM in NAT Mode
# In this example, port 2222 on the host machine is forwarded to port 22 on the
VBoxManage modifyvm "<VM_NAME>" --natpf1 "guestssh,tcp,,2222,,22"
# Creating a VM starting from an VirtualBox Image
VBoxManage registervm "<PATH_TO_VBOX_FILE>.vbox"
Sistemi distribuiti
I sistemi distribuiti sono un insieme di macchine, processori, o host debolmente accoppiati (ogni host è
molto indipendente rispetto agli altri) e connessi tra loro tramite una rete.
Configurazioni
Le configurazioni principali dei sistemi distribuiti sono:
Client-Server: Il client richiede il servizio che il server fornisce.
Peer-to-Peer: Non ci sono ruoli fissi tra i nodi; ogni nodo può fungere sia da client che da server.
Hybrid: Combinazione di client-server e peer-to-peer.
La comunicazione avviene tramite messaggi.
Vantaggi dei sistemi distribuiti
I sistemi distribuiti nascono dall'esigenza di:
Sistemi di Virtualizzazione 13
Condividere risorse: Condividere file o utilizzare hardware in modo remoto.
Aumentare la velocità di computazione: Attraverso il load balancing e la parallelizzazione dei
processi.
Affidabilità: Assicurare che il sistema continui a funzionare anche se un nodo dovesse cadere.
Sistemi operativi distribuiti
Rete
Gli utenti sono consapevoli di avere a che fare co