Γενικές αρχές λειτουργίας του QEMU-KVM

Γενικές αρχές λειτουργίας του QEMU-KVM

Η τρέχουσα κατανόησή μου:

1) KVM

Το KVM (Kernel-based Virtual Machine) είναι ένας hypervisor (VMM – Virtual Machine Manager) που εκτελείται ως λειτουργική μονάδα στο Linux OS. Απαιτείται ένας hypervisor για να τρέξει κάποιο λογισμικό σε ένα ανύπαρκτο (εικονικό) περιβάλλον και ταυτόχρονα να κρύψει από αυτό το λογισμικό το πραγματικό φυσικό υλικό στο οποίο εκτελείται αυτό το λογισμικό. Ο hypervisor λειτουργεί ως «διαχωριστής» μεταξύ του φυσικού υλικού (κεντρικός υπολογιστής) και του εικονικού λειτουργικού συστήματος (επισκέπτης).

Δεδομένου ότι το KVM είναι μια τυπική μονάδα του πυρήνα Linux, λαμβάνει όλα τα απαιτούμενα καλούδια από τον πυρήνα (διαχείριση μνήμης, προγραμματιστής κ.λπ.). Και ανάλογα, στο τέλος, όλα αυτά τα οφέλη πηγαίνουν στους επισκέπτες (αφού οι επισκέπτες εργάζονται σε έναν hypervisor που τρέχει στον/στο πυρήνα του Linux OS).

Το KVM είναι πολύ γρήγορο, αλλά από μόνο του δεν αρκεί για να τρέξει ένα εικονικό λειτουργικό σύστημα, γιατί... Αυτό απαιτεί εξομοίωση εισόδου/εξόδου. Για I/O (CPU, δίσκοι, δίκτυο, βίντεο, PCI, USB, σειριακές θύρες κ.λπ.) το KVM χρησιμοποιεί QEMU.

2) QEMU

Το QEMU (Quick Emulator) είναι ένας εξομοιωτής για διάφορες συσκευές που σας επιτρέπει να εκτελείτε λειτουργικά συστήματα σχεδιασμένα για μια αρχιτεκτονική σε μια άλλη (για παράδειγμα, ARM -> x86). Εκτός από τον επεξεργαστή, το QEMU μιμείται διάφορες περιφερειακές συσκευές: κάρτες δικτύου, HDD, κάρτες βίντεο, PCI, USB κ.λπ.

Δουλεύει κάπως έτσι:

Οδηγίες/δυαδικός κώδικας (για παράδειγμα, ARM) μετατρέπονται σε ενδιάμεσο ανεξάρτητο από πλατφόρμα κώδικα χρησιμοποιώντας τον μετατροπέα TCG (Tiny Code Generator) και στη συνέχεια αυτός ο ανεξάρτητος από πλατφόρμα δυαδικός κώδικας μετατρέπεται σε εντολές/κώδικα προορισμού (για παράδειγμα, x86).

ARM –> ενδιάμεσος_κωδικός –> x86

Ουσιαστικά, μπορείτε να εκτελέσετε εικονικές μηχανές σε QEMU σε οποιονδήποτε κεντρικό υπολογιστή, ακόμη και με παλαιότερα μοντέλα επεξεργαστών που δεν υποστηρίζουν Intel VT-x (Τεχνολογία εικονικοποίησης Intel) / AMD SVM (AMD Secure Virtual Machine). Ωστόσο, σε αυτήν την περίπτωση, θα λειτουργήσει πολύ αργά, λόγω του γεγονότος ότι ο εκτελούμενος δυαδικός κώδικας πρέπει να μεταγλωττιστεί εκ νέου δύο φορές, χρησιμοποιώντας TCG (το TCG είναι ένας μεταγλωττιστής Just-in-Time).

Εκείνοι. Το ίδιο το QEMU είναι πολύ ωραίο, αλλά λειτουργεί πολύ αργά.

3) Δακτύλιοι προστασίας

Γενικές αρχές λειτουργίας του QEMU-KVM

Ο δυαδικός κώδικας προγράμματος στους επεξεργαστές λειτουργεί για κάποιο λόγο, αλλά βρίσκεται σε διαφορετικά επίπεδα (δαχτυλίδια / Δακτύλιοι προστασίας) με διαφορετικά επίπεδα πρόσβασης δεδομένων, από τα πιο προνομιακά (Ring 0), έως τα πιο περιορισμένα, ρυθμισμένα και «με σφιχτά τα παξιμάδια ” (Δαχτυλίδι 3).

Το λειτουργικό σύστημα (πυρήνας λειτουργικού συστήματος) τρέχει στο Ring 0 (λειτουργία πυρήνα) και μπορεί να κάνει ό,τι θέλει με οποιαδήποτε δεδομένα και συσκευές. Οι εφαρμογές χρήστη λειτουργούν στο επίπεδο Ring 3 (λειτουργία χρήστη) και δεν τους επιτρέπεται να κάνουν ό,τι θέλουν, αλλά πρέπει να ζητούν πρόσβαση κάθε φορά για να εκτελέσουν μια συγκεκριμένη λειτουργία (επομένως, οι εφαρμογές χρήστη έχουν πρόσβαση μόνο στα δικά τους δεδομένα και δεν μπορούν να «λάβουν μέσα στο sandbox κάποιου άλλου). Οι δακτύλιοι 1 και 2 προορίζονται για χρήση από τους οδηγούς.

Πριν από την εφεύρεση του Intel VT-x / AMD SVM, οι hypervisors έτρεχαν στο Ring 0 και οι επισκέπτες στο Ring 1. Δεδομένου ότι το Ring 1 δεν έχει αρκετά δικαιώματα για την κανονική λειτουργία του λειτουργικού συστήματος, με κάθε προνομιακή κλήση από το σύστημα επισκεπτών, η Ο hypervisor έπρεπε να τροποποιήσει αυτήν την κλήση αμέσως και να την εκτελέσει στο Ring 0 (όπως το QEMU). Εκείνοι. δυαδικό επισκέπτη ΔΕΝ εκτελούνταν απευθείας στον επεξεργαστή και κάθε φορά περνούσε από αρκετές ενδιάμεσες τροποποιήσεις εν κινήσει.

Τα γενικά έξοδα ήταν σημαντικά και αυτό ήταν ένα μεγάλο πρόβλημα, και στη συνέχεια οι κατασκευαστές επεξεργαστών, ανεξάρτητα ο ένας από τον άλλον, κυκλοφόρησαν ένα εκτεταμένο σύνολο εντολών (Intel VT-x / AMD SVM) που επέτρεπε την εκτέλεση κώδικα επισκέπτη λειτουργικού συστήματος ΚΑΤΕΥΘΕΙΑΝ στον κεντρικό επεξεργαστή (παρακάμπτοντας τυχόν δαπανηρά ενδιάμεσα βήματα, όπως συνέβαινε πριν).

Με την εμφάνιση του Intel VT-x / AMD SVM, δημιουργήθηκε ένα ειδικό νέο επίπεδο Ring -1 (μείον ένα). Και τώρα ο hypervisor τρέχει σε αυτό και οι επισκέπτες τρέχουν στο Ring 0 και αποκτούν προνομιακή πρόσβαση στην CPU.

Εκείνοι. τελικά:

  • ο κεντρικός υπολογιστής εκτελείται στο Ring 0
  • οι επισκέπτες εργάζονται στο Ring 0
  • Ο hypervisor εκτελείται στο Ring -1

4) QEMU-KVM

Το KVM δίνει στους επισκέπτες πρόσβαση στο Ring 0 και χρησιμοποιεί το QEMU για να μιμηθεί το I/O (επεξεργαστής, δίσκοι, δίκτυο, βίντεο, PCI, USB, σειριακές θύρες κ.λπ. που οι επισκέπτες «βλέπουν» και εργάζονται με).

Ως εκ τούτου QEMU-KVM (ή KVM-QEMU) :)

ΣΥΝΤΕΛΕΣΤΕΣ
Εικόνα για να τραβήξετε την προσοχή
Εικόνα δαχτυλιδιών προστασίας

Υ.Γ Το κείμενο αυτού του άρθρου δημοσιεύτηκε αρχικά στο κανάλι Telegram @RU_Voip ως απάντηση σε ερώτηση ενός από τους συμμετέχοντες του καναλιού.

Γράψτε στα σχόλια όπου δεν καταλαβαίνω σωστά το θέμα ή αν υπάρχει κάτι να προσθέσω.

Σας ευχαριστούμε!

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο