Իմ ներկայիս հասկացողությունը.
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) Պաշտպանիչ օղակներ
Երկուական ծրագրի կոդը պրոցեսորների վրա աշխատում է ինչ-ինչ պատճառներով, բայց գտնվում է տարբեր մակարդակներում (օղակներ / Պաշտպանական օղակներ) տվյալների հասանելիության տարբեր մակարդակներով՝ ամենաարտոնյալից (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 ալիքում
Գրեք մեկնաբանություններում, որտեղ ես ճիշտ չեմ հասկանում թեման կամ ավելացնելու բան կա։
Thank you!
Source: www.habr.com