{"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\/pt\/blog\/administrirovanie\/obshhie-printsipy-raboty-qemu-kvm","title":{"rendered":"Princ\u00edpios gerais de funcionamento do QEMU-KVM","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Princ\u00edpios gerais de funcionamento do QEMU-KVM\" src=\"\/wp-content\/uploads\/2019\/09\/6619dbfb022d3fdb87159a33d4d27466.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMinha compreens\u00e3o atual:<\/p>\n<h2>1) KVM<\/h2>\n<p>\nKVM (Kernel-based Virtual Machine) \u00e9 um hipervisor (VMM - Virtual Machine Manager) que opera como um m\u00f3dulo no sistema operacional Linux. O hipervisor \u00e9 necess\u00e1rio para executar um software em um ambiente que n\u00e3o existe (virtual) e, ao mesmo tempo, esconder o hardware f\u00edsico real em que esse software est\u00e1 funcionando. O hipervisor atua como um 'intermedi\u00e1rio' entre o hardware f\u00edsico (host) e o sistema operacional virtual (convidado).<\/p>\n<p>Como o KVM \u00e9 um m\u00f3dulo padr\u00e3o do kernel Linux, ele recebe todas as funcionalidades do kernel (gerenciamento de mem\u00f3ria, escalonador etc.). Assim, todos esses benef\u00edcios tamb\u00e9m s\u00e3o repassados aos convidados (j\u00e1 que os convidados operam em um hipervisor que funciona no\/n\u00facleo do sistema operacional Linux).<\/p>\n<p>O KVM \u00e9 muito r\u00e1pido, mas em si n\u00e3o \u00e9 suficiente para executar um sistema operacional virtual, pois para isso \u00e9 necess\u00e1ria a emula\u00e7\u00e3o de I\/O. Para I\/O (processador, discos, rede, v\u00eddeo, PCI, USB, portas seriais etc.), o KVM utiliza o QEMU.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>2) QEMU<\/h2>\n<p>\nQEMU (Quick Emulator) \u00e9 um emulador de v\u00e1rios dispositivos, que permite executar sistemas operacionais destinados a uma arquitetura em outra (por exemplo, ARM -&gt; x86). Al\u00e9m do processador, o QEMU emula v\u00e1rios dispositivos perif\u00e9ricos: placas de rede, HDD, placas de v\u00eddeo, PCI, USB etc.<\/p>\n<p>Funciona da seguinte maneira:<\/p>\n<p>Instru\u00e7\u00f5es\/c\u00f3digo bin\u00e1rio (por exemplo, ARM) s\u00e3o convertidas em c\u00f3digo intermedi\u00e1rio independente de plataforma por meio de um conversor TCG (Tiny Code Generator) e, em seguida, esse c\u00f3digo bin\u00e1rio independente de plataforma \u00e9 convertido em instru\u00e7\u00f5es\/c\u00f3digo de destino (por exemplo, x86).<\/p>\n<p>ARM -&gt; c\u00f3digo_intermedi\u00e1rio -&gt; x86<\/p>\n<p>Na verdade, voc\u00ea pode executar m\u00e1quinas virtuais no QEMU em qualquer host, mesmo em modelos antigos de processadores que n\u00e3o suportam Intel VT-x (Intel Virtualization Technology) \/ AMD SVM (AMD Secure Virtual Machine). No entanto, assim, o desempenho ser\u00e1 bastante lento, devido ao fato de o c\u00f3digo bin\u00e1rio execut\u00e1vel precisar ser recompilado em tempo real duas vezes, usando o TCG (TCG \u00e9 um compilador Just-in-Time).<\/p>\n<p>Ou seja, o QEMU por si s\u00f3 \u00e9 incr\u00edvel, mas funciona muito lentamente.<\/p>\n<h2>3) An\u00e9is de prote\u00e7\u00e3o<\/h2>\n<p>\n<img decoding=\"async\" alt=\"Princ\u00edpios gerais de funcionamento do QEMU-KVM\" src=\"\/wp-content\/uploads\/2019\/09\/01df130d94b54251f517f776c99009f6.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nO c\u00f3digo de programa bin\u00e1rio nos processadores n\u00e3o opera de forma aleat\u00f3ria, mas est\u00e1 disposto em diferentes n\u00edveis (an\u00e9is \/ Protection rings) com diferentes n\u00edveis de acesso aos dados, desde o mais privilegiado (Anel 0) at\u00e9 o mais restritivo, regulado e 'apertado' (Anel 3).<\/p>\n<p>O sistema operacional (n\u00facleo do SO) opera em Ring 0 (modo kernel) e pode fazer o que quiser com quaisquer dados e dispositivos. Aplicativos de usu\u00e1rio funcionam em Ring 3 (modo usu\u00e1rio) e n\u00e3o t\u00eam o direito de fazer o que desejarem, devendo, em vez disso, solicitar acesso para realizar determinada opera\u00e7\u00e3o (dessa forma, os aplicativos de usu\u00e1rio t\u00eam acesso apenas aos seus pr\u00f3prios dados e n\u00e3o podem \"invadir\" a \"caixa de areia\" de outrem). Rings 1 e 2 s\u00e3o destinados ao uso por drivers.<\/p>\n<p>Antes da inven\u00e7\u00e3o do Intel VT-x \/ AMD SVM, hipervisores operavam em Ring 0 e os convidados em Ring 1. Como Ring 1 n\u00e3o tem privil\u00e9gios suficientes para o funcionamento normal do SO, a cada chamada privilegiada do sistema convidado, o hipervisor precisava modificar essa chamada em tempo real e execut\u00e1-la em Ring 0 (de forma semelhante ao que faz o QEMU). Ou seja, o c\u00f3digo bin\u00e1rio convidado <b><i>N\u00c3O<\/i><\/b> era executado diretamente no processador, mas passava por v\u00e1rias modifica\u00e7\u00f5es intermedi\u00e1rias em tempo real a cada vez.<\/p>\n<p>As sobrecargas eram consider\u00e1veis e isso representava um grande problema, e ent\u00e3o os fabricantes de processadores, independentemente, lan\u00e7aram um conjunto avan\u00e7ado de instru\u00e7\u00f5es (Intel VT-x \/ AMD SVM), permitindo a execu\u00e7\u00e3o de c\u00f3digo dos sistemas operacionais convidados <b><i>DIRECTAMENTE<\/i><\/b> no processador host (pulando todas as etapas intermedi\u00e1rias custosas, como era feito anteriormente).<\/p>\n<p>Com a chegada do Intel VT-x \/ AMD SVM, um novo n\u00edvel especial Ring -1 (menos um) foi criado. E agora, neste n\u00edvel, opera o hipervisor, enquanto os convidados funcionam em Ring 0 e recebem acesso privilegiado ao CPU.<\/p>\n<p>Ou seja, no final das contas:<\/p>\n<ul>\n<li>o host opera em Ring 0<\/li>\n<li>os convidados operam em Ring 0<\/li>\n<li>o hipervisor opera em Ring -1<\/li>\n<\/ul>\n<p><\/p>\n<h2>4) QEMU-KVM<\/h2>\n<p>\nKVM fornece aos convidados acesso ao Ring 0 e utiliza o QEMU para emular I\/O (processador, discos, rede, v\u00eddeo, PCI, USB, portas seriais etc., que os convidados \"veem\" e com os quais trabalham).<\/p>\n<p>Da\u00ed QEMU-KVM (ou KVM-QEMU) \ud83d\ude42<\/p>\n<p><i>CR\u00c9DITOS<br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/www.ionos.com\">Imagem para chamar a aten\u00e7\u00e3o<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/www.researchgate.net\/profile\/Roberto_Pietro\">Imagem Protection rings<\/a><\/noindex><\/i><\/p>\n<p><i>P.S. O texto deste artigo foi originalmente publicado no canal Telegram <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/ru_voip\">@RU_Voip<\/a><\/noindex> como resposta a uma pergunta de um dos participantes do canal.<\/p>\n<p>Escreva nos coment\u00e1rios onde eu n\u00e3o compreendi corretamente o assunto ou se h\u00e1 algo a adicionar.<\/p>\n<p>Obrigado!<\/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.3 - 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\/pt\/blog\/administrirovanie\/obshhie-printsipy-raboty-qemu-kvm\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"pt_PT\" \/>\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\/pt\/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\udd47Princ\u00edpios gerais de funcionamento do QEMU-KVM | ProHoster","description":"Minha compreens\u00e3o atual: 1) KVM KVM.","canonical_url":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/obshhie-printsipy-raboty-qemu-kvm","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pt_PT","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\/pt\/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\/pt\/wp-json\/wp\/v2\/posts\/37939","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/comments?post=37939"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/37939\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media\/28470"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media?parent=37939"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/categories?post=37939"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/tags?post=37939"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}