QEMU-KVM-ի գործառնական ընդհանուր սկզբունքներ

QEMU-KVM-ի գործառնական ընդհանուր սկզբունքներ

Իմ ներկայիս հասկացողությունը.

1) KVM

KVM-ը (միջուկի վրա հիմնված վիրտուալ մեքենա) հիպերվիզոր է (VMM – Վիրտուալ մեքենայի կառավարիչ), որն աշխատում է որպես մոդուլ Linux OS-ում: Հիպերվիզոր է անհրաժեշտ՝ գոյություն չունեցող (վիրտուալ) միջավայրում որոշ ծրագրեր գործարկելու և միևնույն ժամանակ այս ծրագրաշարից թաքցնելու իրական ֆիզիկական սարքաշարը, որի վրա աշխատում է այս ծրագրաշարը: Հիպերվիզորը հանդես է գալիս որպես «տարածող» ֆիզիկական սարքաշարի (հյուրընկալող) և վիրտուալ ՕՀ-ի (հյուրի) միջև:

Քանի որ KVM-ն Linux միջուկի ստանդարտ մոդուլ է, այն ստանում է միջուկից բոլոր անհրաժեշտ բարիքները (հիշողության կառավարում, ժամանակացույց և այլն): Եվ համապատասխանաբար, ի վերջո, այս բոլոր առավելությունները գնում են հյուրերին (քանի որ հյուրերն աշխատում են հիպերվիզորի վրա, որն աշխատում է Linux OS միջուկում/միջուկում)։

KVM-ն շատ արագ է, բայց ինքնին բավարար չէ վիրտուալ ՕՀ գործարկելու համար, քանի որ... Սա պահանջում է I/O էմուլացիա: 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 Virtualization Technology) / AMD SVM (AMD Secure Virtual Machine): Այնուամենայնիվ, այս դեպքում այն ​​կաշխատի շատ դանդաղ, քանի որ կատարող երկուական կոդը պետք է կրկնակի վերակոմպիլացվի թռիչքի ժամանակ՝ օգտագործելով TCG (TCG-ն Just-in-Time կոմպիլյատոր է):

Նրանք. QEMU-ն ինքնին մեգա թույն է, բայց այն աշխատում է շատ դանդաղ:

3) Պաշտպանիչ օղակներ

QEMU-KVM-ի գործառնական ընդհանուր սկզբունքներ

Երկուական ծրագրի կոդը պրոցեսորների վրա աշխատում է ինչ-ինչ պատճառներով, բայց գտնվում է տարբեր մակարդակներում (օղակներ / Պաշտպանական օղակներ) տվյալների հասանելիության տարբեր մակարդակներով՝ ամենաարտոնյալից (Ring 0), մինչև ամենասահմանափակը, կարգավորվողը և «խստացված ընկույզով»: (Մատանի 3):

Օպերացիոն համակարգը (OS միջուկը) աշխատում է Ring 0-ով (միջուկի ռեժիմ) և կարող է անել այն, ինչ ուզում է ցանկացած տվյալների և սարքերի հետ: Օգտատիրոջ հավելվածները գործում են Ring 3 մակարդակում (օգտվողի ռեժիմ) և նրանց չի թույլատրվում անել այն, ինչ ուզում են, բայց փոխարենը պետք է ամեն անգամ մուտքի թույլտվություն պահանջեն որոշակի գործողություն կատարելու համար (այդպիսով, օգտվողի հավելվածները մուտք ունեն միայն իրենց սեփական տվյալներին և չեն կարող «ստանալ» մեջ» ուրիշի ավազատուփ): Ring 1-ը և 2-ը նախատեսված են վարորդների կողմից օգտագործելու համար:

Մինչ Intel VT-x / AMD SVM-ի գյուտը, հիպերվիզորներն աշխատում էին Ring 0-ով, իսկ հյուրերը աշխատում էին Ring 1-ով: Քանի որ Ring 1-ը չունի բավարար իրավունքներ ՕՀ-ի բնականոն աշխատանքի համար, հյուրերի համակարգից յուրաքանչյուր արտոնյալ զանգի դեպքում Հիպերվիզորը ստիպված էր փոփոխել այս զանգը անմիջապես և կատարել այն Ring 0-ում (ինչպես անում է QEMU-ն): Նրանք. հյուր երկուական ՉԷ իրականացվել է անմիջապես պրոցեսորի վրա և ամեն անգամ անցել է մի քանի միջանկյալ փոփոխությունների:

Գումարը զգալի էր, և սա մեծ խնդիր էր, և այնուհետև պրոցեսոր արտադրողները, միմյանցից անկախ, թողարկեցին հրահանգների ընդլայնված փաթեթ (Intel VT-x / AMD SVM), որը թույլ էր տալիս կատարել հյուրի OS կոդը: ՈՒՂԻՂ հյուրընկալող պրոցեսորի վրա (շրջանցելով ցանկացած ծախսատար միջանկյալ քայլ, ինչպես նախկինում էր):

Intel VT-x / AMD SVM-ի գալուստով ստեղծվեց հատուկ նոր Ring մակարդակ -1 (մինուս մեկ): Եվ հիմա դրա վրա աշխատում է հիպերվիզորը, իսկ հյուրերը աշխատում են Ring 0-ով և ստանում արտոնյալ մուտք դեպի պրոցեսոր:

Նրանք. ի վերջո:

  • հոսթն աշխատում է Ring 0-ով
  • հյուրերն աշխատում են Ring 0-ում
  • հիպերվիզորն աշխատում է Ring -1-ով

4) ՔԵՄՈՒ-ԿՎՄ

KVM-ը հյուրերին հնարավորություն է տալիս մուտք գործել Ring 0 և օգտագործում է QEMU՝ I/O-ն ընդօրինակելու համար (պրոցեսոր, սկավառակներ, ցանց, վիդեո, PCI, USB, սերիական պորտեր և այլն, որոնք հյուրերը «տեսնում» և աշխատում են):

Հետևաբար QEMU-KVM (կամ KVM-QEMU) :)

ՎԱՐԿԵՐ
Նկար՝ ուշադրություն գրավելու համար
Պաշտպանական օղակների նկար

Հ.Գ. Այս հոդվածի տեքստը սկզբնապես հրապարակվել է Telegram ալիքում @RU_Voip որպես ալիքի մասնակիցներից մեկի հարցի պատասխան։

Գրեք մեկնաբանություններում, որտեղ ես ճիշտ չեմ հասկանում թեման կամ ավելացնելու բան կա։

Thank you!

Source: www.habr.com

Добавить комментарий