{"id":37939,"date":"2019-10-31T22:20:41","date_gmt":"2019-10-31T19:20:41","guid":{"rendered":"https:\/\/prohoster.info\/blog\/obshhie-printsipy-raboty-qemu-kvm\/"},"modified":"2019-10-31T22:20:41","modified_gmt":"2019-10-31T19:20:41","slug":"obshhie-printsipy-raboty-qemu-kvm","status":"publish","type":"post","link":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/obshhie-printsipy-raboty-qemu-kvm","title":{"rendered":"Principi generali del funzionamento di QEMU-KVM","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Principi generali del funzionamento di QEMU-KVM\" src=\"\/wp-content\/uploads\/2019\/09\/6619dbfb022d3fdb87159a33d4d27466.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLa mia attuale comprensione:<\/p>\n<h2>1) KVM<\/h2>\n<p>\nKVM (Kernel-based Virtual Machine) \u2013 \u00e8 un hypervisor (VMM \u2013 Virtual Machine Manager) che funziona come modulo su un sistema operativo Linux. L'hypervisor \u00e8 necessario per eseguire del software in un ambiente virtuale (non esistente) e per nascondere all'applicazione il reale hardware fisico su cui opera. L'hypervisor funge da \u00abinterfaccia\u00bb tra l'hardware fisico (host) e il sistema operativo virtuale (guest).<\/p>\n<p>Poich\u00e9 KVM \u00e8 un modulo standard del kernel Linux, riceve dal kernel tutti i vantaggi necessari (gestione della memoria, scheduler, ecc.). Di conseguenza, tutti questi vantaggi vengono trasferiti anche ai guest (dato che i guest operano su un hypervisor che opera all'interno del kernel del sistema operativo Linux).<\/p>\n<p>KVM \u00e8 molto veloce, ma da solo non \u00e8 sufficiente per avviare un sistema operativo virtuale, poich\u00e9 richiede l'emulazione dell'I\/O. Per l'I\/O (processori, dischi, rete, video, PCI, USB, porte seriali, ecc.) KVM utilizza QEMU.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>2) QEMU<\/h2>\n<p>\nQEMU (Quick Emulator) \u2013 \u00e8 un emulatore di vari dispositivi che consente di eseguire sistemi operativi progettati per un'architettura su un'altra (ad esempio, ARM \u2013&gt; x86). Oltre al processore, QEMU emula anche diversi dispositivi periferici: schede di rete, HDD, schede video, PCI, USB, ecc.<\/p>\n<p>Funziona cos\u00ec:<\/p>\n<p>Le istruzioni\/codice binario (ad esempio, ARM) vengono convertiti in codice intermedio indipendente dalla piattaforma tramite un convertitore TCG (Tiny Code Generator) e poi questo codice binario intermedio viene convertito in istruzioni\/codice target (ad esempio, x86).<\/p>\n<p>ARM \u2013&gt; codice_intermedio \u2013&gt; x86<\/p>\n<p>In sostanza, \u00e8 possibile eseguire macchine virtuali su QEMU su qualsiasi host, anche con modelli di processori pi\u00f9 vecchi che non supportano Intel VT-x (Intel Virtualization Technology) \/ AMD SVM (AMD Secure Virtual Machine). Tuttavia, in tal caso, le prestazioni saranno piuttosto lente, poich\u00e9 il codice binario eseguibile deve essere ricompilato al volo due volte, tramite TCG (TCG \u00e8 un compilatore Just-in-Time).<\/p>\n<p>Cio\u00e8, QEMU \u00e8 davvero fantastico, ma funziona molto lentamente.<\/p>\n<h2>3) Anelli di protezione<\/h2>\n<p>\n<img decoding=\"async\" alt=\"Principi generali del funzionamento di QEMU-KVM\" src=\"\/wp-content\/uploads\/2019\/09\/01df130d94b54251f517f776c99009f6.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIl codice binario software sui processori non opera cos\u00ec liberamente, ma si colloca a diversi livelli (anelli \/ Protection rings) con diverse autorizzazioni per l'accesso ai dati, dal livello pi\u00f9 privilegiato (Ring 0) a quello pi\u00f9 limitato e regolato (Ring 3).<\/p>\n<p>Il sistema operativo (nucleo OS) funziona su Ring 0 (modalit\u00e0 kernel) e pu\u00f2 fare qualsiasi cosa con i dati e i dispositivi. Le applicazioni utente operano a livello Ring 3 (modalit\u00e0 utente) e non possono fare tutto ci\u00f2 che vogliono, ma devono invece richiedere l'accesso per eseguire determinate operazioni (in questo modo, le applicazioni utente hanno accesso solo ai propri dati e non possono 'intrufolarsi' nella 'sandbox' altrui). Ring 1 e 2 sono destinati all'uso dei driver.<\/p>\n<p>Prima dell'invenzione di Intel VT-x \/ AMD SVM, gli hypervisor funzionavano su Ring 0, mentre gli ospiti operavano su Ring 1. Poich\u00e9 Ring 1 non ha abbastanza privilegi per il corretto funzionamento dell'OS, ogni volta che c'era una chiamata privilegiata dal sistema ospite, l'hypervisor doveva modificare al volo questa chiamata ed eseguirla su Ring 0 (in un modo simile a come fa QEMU). Ovvero, il codice binario dell'ospite <b><i>NO<\/i><\/b> veniva eseguito direttamente sulla CPU, ma ogni volta passava attraverso diverse modifiche intermedie al volo.<\/p>\n<p>Le spese generali erano significative e questo era un grande problema e cos\u00ec i produttori di processori, indipendentemente l'uno dall'altro, rilasciarono un set di istruzioni esteso (Intel VT-x \/ AMD SVM), che consentiva di eseguire il codice dei sistemi operativi ospiti <b><i>DIRECTAMENTE<\/i><\/b> sulla CPU host (saltando qualsiasi fase intermedia costosa, come avveniva in precedenza).<\/p>\n<p>Con l'emergere di Intel VT-x \/ AMD SVM, \u00e8 stato creato un nuovo livello speciale Ring -1 (meno uno). E ora su di esso funziona l'hypervisor, mentre gli ospiti operano su Ring 0 e ottengono accesso privilegiato alla CPU.<\/p>\n<p>Quindi, in sintesi:<\/p>\n<ul>\n<li>l'host opera su Ring 0<\/li>\n<li>gli ospiti operano su Ring 0<\/li>\n<li>l'hypervisor opera su Ring -1<\/li>\n<\/ul>\n<p><\/p>\n<h2>4) QEMU-KVM<\/h2>\n<p>\nKVM fornisce accesso agli ospiti a Ring 0 e utilizza QEMU per l'emulazione I\/O (processore, dischi, rete, video, PCI, USB, porte seriali, ecc., che gli ospiti 'vedono' e con cui interagiscono).<\/p>\n<p>Da qui QEMU-KVM (o KVM-QEMU) \ud83d\ude42<\/p>\n<p><i>CREDITI<br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/www.ionos.com\">Immagine per attirare l'attenzione<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/www.researchgate.net\/profile\/Roberto_Pietro\">Immagine Protection rings<\/a><\/noindex><\/i><\/p>\n<p><i>P.S. Il testo di questo articolo \u00e8 stato originariamente pubblicato nel canale Telegram <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/ru_voip\">@RU_Voip<\/a><\/noindex> come risposta a una domanda di uno dei membri del canale.<\/p>\n<p>Scrivete nei commenti in quali punti non comprendo correttamente l'argomento o se c'\u00e8 qualcosa da aggiungere.<\/p>\n<p>Grazie!<\/i><br \/>\n<br \/>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/466549\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041c\u043e\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435: 1) KVM KVM (Kernel-based Virtual Machine) \u2013 \u0433\u0438\u043f\u0435\u0440\u0432\u0438\u0437\u043e\u0440 (VMM \u2013 Virtual Machine Manager), \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u0432 \u0432\u0438\u0434\u0435 \u043c\u043e\u0434\u0443\u043b\u044f \u043d\u0430 \u041e\u0421 Linux. \u0413\u0438\u043f\u0435\u0440\u0432\u0438\u0437\u043e\u0440 \u043d\u0443\u0436\u0435\u043d \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043d\u0435\u043a\u0438\u0439 \u0441\u043e\u0444\u0442 \u0432 \u043d\u0435\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 (\u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439) \u0441\u0440\u0435\u0434\u0435 \u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c, \u0441\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u043e\u0442 \u044d\u0442\u043e\u0433\u043e \u0441\u043e\u0444\u0442\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0435 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0436\u0435\u043b\u0435\u0437\u043e, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u044d\u0442\u043e\u0442 \u0441\u043e\u0444\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u0413\u0438\u043f\u0435\u0440\u0432\u0438\u0437\u043e\u0440 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 \u0440\u043e\u043b\u0438 \u00ab\u043f\u0440\u043e\u043a\u043b\u0430\u0434\u043a\u0438\u00bb [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":28470,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-37939","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041c\u043e\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435: 1) KVM KVM.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/obshhie-printsipy-raboty-qemu-kvm\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041e\u0431\u0449\u0438\u0435 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u044b \u0440\u0430\u0431\u043e\u0442\u044b QEMU-KVM | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041c\u043e\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435: 1) KVM KVM.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/obshhie-printsipy-raboty-qemu-kvm\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:20:41+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:20:41+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Principi generali del funzionamento di QEMU-KVM | ProHoster","description":"La mia attuale comprensione: 1) KVM KVM.","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/obshhie-printsipy-raboty-qemu-kvm","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041e\u0431\u0449\u0438\u0435 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u044b \u0440\u0430\u0431\u043e\u0442\u044b QEMU-KVM | ProHoster","og:description":"\u041c\u043e\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435: 1) KVM KVM.","og:url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/obshhie-printsipy-raboty-qemu-kvm","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:20:41+00:00","article:modified_time":"2019-10-31T19:20:41+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"37939","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-23 19:51:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:18:22","updated":"2026-01-23 19:51:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/37939","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=37939"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/37939\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/28470"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=37939"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=37939"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=37939"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}