# Virtualisierung
> Technologie, die es ermöglicht mehrere virtuelle Instanzen auf einem einzigen
> physischen System auszuführen
> 
> Spielt eine entscheidende Rolle bei der effizienten Nutzung von Ressourcen, der Erhöhung von
> Flexibilität und Skalierbarkeit sowie der Verbesserung der Verfügbarkeit von Anwendungen und Daten


## Vorteile der Virtualisierung
- **Ressourceneffizienz**
  - mehrere VMs können auf einem physischen Server laufen
- **Isolation**
  - VMs sind voneinander isoliert
    - verbessert Stabilität und Sicherheit
- **Snapshot- und Wiederherstellungsfunktion**
- **Portabilität**
  - VMs können auf verschiedenen physischen Servern verschoben und ausgeführt werden


## Virtualisierungstypen
### Hypervisor-basierte Virtualisierung
- [Hypervisor](https://www.youtube.com/watch?v=LMAEbB2a50M) (~Virtual Machine Monitor)
  - wird direkt auf Hardware ausgeführt
    - ermöglicht Ausführung mehrerer Betriebssysteme als VMs
#### Typ 1 (Bare-Metal-Hypervisor)
- direkte auf Hardware installiert
  - benötigt kein Host-Betriebssystem
- _bspw.: VMware ESXi, Microsoft Hyper-V_

#### Typ 2 (Hosted-Hypervisor)
- Läuft auf Host-Betriebssystem
- _bspw: VMware Workstation, Oracle VirtualBox_

### Container-Virtualisierung
- Container teilen sich Kernel des Host-Betriebssystems
  - bieten leichtgewichtige Möglichkeit Anwendungen zu isolieren und auszuführen

## Partitionierung von VMs
- Aufteilung einer _physischen oder virtuellen Ressource_ in mehrere logische Einheiten (Partitionen)
- ![image_248.png](image_248.png)
  - können unterschiedliche Betriebssysteminstanzen/Anwendungen beherbergen
  - Vorteile u.a. Ressourcenisolierung, verbesserte Sicherheit, bessere Verwaltbarkeit

## Hardware-Emulation
- Nachbildung oder Simulation von Hardware auf einer anderen Hardware- oder Softwareplattform
  - Replikation von Hardware-Komponenten, Geräten oder ganzen Systemen auf einer virtuellen Ebene
- ![image_249.png](image_249.png)
- **Entwicklung neuer Hardware**
  - Simulation von Hardware-Designs bevor tatsächliche Hardware erstellt wird
- **Fehlerbehebung und Debugging**
  - Identifizierung von Fehlern in Hardware-Komponenten oder -Systemen
- **Testen von Software**

### Hardware-Emulator vs. Simulator
| **Emulator**                                                                | **Simulator**                                                                          |
|-----------------------------------------------------------------------------|----------------------------------------------------------------------------------------|
| Reproduziert Verhalten der tatsächlichen Hardware genau                     | Ahmt Verhalten von Hardware nach                                                       |
| arbeitet auf niedriger Ebene, indem er Hardwarekomponenten genau nachbildet | Arbeitet auf höherer Ebene, Konzentration auf Funktionalität statt exakter Nachbildung |

## Anwendungsvirtualisierung
- Einzelne anwendung in virtueller Umgebung ausführen, die alle benötigten Komponenten bereitstellt
- ![image_250.png](image_250.png)
- virtuelle Maschine befindet sich zwischen Anwendung und Betriebssystem
- _bspw.: Java Virtual Machine (JVM)_

## Betriebssystem-Virtualisierung
- [Container](https://www.youtube.com/watch?v=TvnZTi_gaNc) laufen unter ein und demselben BS-Kern
  - mehrere abgeschottete, identische Systemumgebungen
- ![image_251.png](image_251.png)
- bei Start einer VM wird im Gegensatz kein zusätzliches BS gestartet
  - Erzeugung isolierte Laufzeitumgebung

## Vollständige Virtualisierung
- Hypervisor bietet einer VM eine komplette virtuelle PC-Umgebung inkl. eigenem BIOS
- ![image_252.png](image_252.png)
- Gast-BS erhält eigene VM mit virtuellen Ressourcen
  - Prozessor(en)
  - Hauptspeicher
  - Laufwerke
  - Netzwerkkarten
  - etc.
- Kern der Lösung ist Virtueller Maschinen-Monitor (VMM)
  - Aufgabe ist Zuweisung der Hardwareressourcen an VMs

## Virtualisierungslösungen
- [docker](https://www.docker.com)
- [vmware](https://www.vmware.com)
- [virtualbox](https://www.virtualbox.org)
- [getutm (mac)](https://mac.getutm.app)