လက်ရှိနားလည်မှု
1) KVM
KVM (Kernel-based Virtual Machine) သည် Linux OS တွင် module တစ်ခုအနေဖြင့် လုပ်ဆောင်နေသည့် hypervisor (VMM – Virtual Machine Manager) ဖြစ်သည်။ နဂိုမူလ (virtual) ပတ်ဝန်းကျင်တွင် ဆော့ဖ်ဝဲလ်အချို့ကို run ရန်အတွက် hypervisor တစ်ခု လိုအပ်ပြီး တစ်ချိန်တည်းမှာပင် ဤဆော့ဖ်ဝဲလ်တွင် အလုပ်လုပ်သည့် တကယ့်ရုပ်ပိုင်းဆိုင်ရာ ဟာ့ဒ်ဝဲကို ဝှက်ထားရန် လိုအပ်ပါသည်။ hypervisor သည် ရုပ်ပိုင်းဆိုင်ရာ ဟာ့ဒ်ဝဲ (host) နှင့် virtual OS (ဧည့်သည်) အကြား "spacer" အဖြစ် လုပ်ဆောင်သည်။
KVM သည် Linux kernel ၏ စံ module တစ်ခုဖြစ်သောကြောင့်၊ ၎င်းသည် kernel မှ လိုအပ်သော အကျိုးကျေးဇူးများအားလုံးကို လက်ခံရရှိသည် (မှတ်ဉာဏ်စီမံခန့်ခွဲမှု၊ အချိန်ဇယားဆွဲခြင်း စသည်)။ ထို့ကြောင့်၊ အဆုံးတွင်၊ ဤအကျိုးခံစားခွင့်များအားလုံးသည် ဧည့်သည်များထံ ရောက်သွားသည် (ဧည့်သည်များသည် Linux OS kernel ကိုဖွင့်ထားသော hypervisor တစ်ခုတွင် အလုပ်လုပ်သောကြောင့်)။
KVM သည် အလွန်မြန်သော်လည်း သူ့ဘာသာသူ virtual OS ကို run ရန် မလုံလောက်သောကြောင့်... ၎င်းသည် I/O emulation လိုအပ်သည်။ I/O (CPU၊ ဒစ်များ၊ ကွန်ရက်၊ ဗီဒီယို၊ PCI၊ USB၊ အမှတ်စဉ် အပေါက်များ စသည်ဖြင့်) KVM အတွက် QEMU ကို အသုံးပြုသည်။
2) QEMU
QEMU (Quick Emulator) သည် သင့်အား ဗိသုကာတစ်ခုအတွက် ဒီဇိုင်းထုတ်ထားသည့် လည်ပတ်မှုစနစ်များ (ဥပမာ၊ ARM -> x86) ကို အသုံးပြုခွင့်ပေးသည့် အမျိုးမျိုးသော စက်များအတွက် emulator တစ်ခုဖြစ်သည်။ ပရိုဆက်ဆာအပြင်၊ QEMU သည် ကွန်ရက်ကတ်များ၊ HDD၊ ဗီဒီယိုကတ်များ၊ PCI၊ USB စသည်တို့ကို အမျိုးမျိုးသော အရံကိရိယာများကို အတုယူသည်။
၎င်းသည် ဤကဲ့သို့ လုပ်ဆောင်သည်-
ညွှန်ကြားချက်များ/ဒွိကုဒ် (ဥပမာ၊ ARM) အား TCG (Tiny Code Generator) converter ကို အသုံးပြု၍ အလယ်အလတ် ပလပ်ဖောင်း-အမှီအခိုကင်းသော ကုဒ်အဖြစ်သို့ ပြောင်းလဲပြီးနောက် ဤပလပ်ဖောင်း-လွတ်လပ်သော ဒွိကုဒ်ကို ပစ်မှတ်ညွှန်ကြားချက်/ကုဒ် (ဥပမာ၊ x86) အဖြစ်သို့ ပြောင်းလဲပါသည်။
ARM –> intermediate_code –> x86
အခြေခံအားဖြင့်၊ သင်သည် Intel VT-x (Intel Virtualization Technology) / AMD SVM (AMD Secure Virtual Machine) ကိုမပံ့ပိုးသော ပရိုဆက်ဆာမော်ဒယ်ဟောင်းများနှင့်ပင် QEMU ပေါ်တွင် virtual machines များကို သင် run နိုင်ပါသည်။ သို့သော်၊ ဤကိစ္စတွင်၊ TCG (TCG သည် Just-in-Time compiler) ကိုအသုံးပြု၍ လုပ်ဆောင်နေသော binary ကုဒ်ကို နှစ်ကြိမ်တိတိ ပြန်လည်ပေါင်းစည်းရန် လိုအပ်သောကြောင့် ၎င်းသည် အလွန်နှေးကွေးစွာ အလုပ်လုပ်ပါသည်။
အဲဒါတွေ။ QEMU ကိုယ်တိုင်က အလွန်အေးမြသော်လည်း ၎င်းသည် အလွန်နှေးကွေးစွာ အလုပ်လုပ်ပါသည်။
3) အကာအကွယ်ကွင်းများ
ပရိုဆက်ဆာများပေါ်ရှိ ဒွိပရိုဂရမ်ကုဒ်သည် အကြောင်းပြချက်တစ်ခုအနေနှင့် အလုပ်လုပ်သော်လည်း၊ အခွင့်ထူးအရှိဆုံး (Ring 0) မှ အများဆုံးကန့်သတ်၊ ထိန်းညှိထားပြီး “အခွံမာသီးတင်းကျပ်မှုများဖြင့် ဒေတာဝင်ရောက်မှုအဆင့်အမျိုးမျိုး (ကွင်းများ/အကာအကွယ်ကွင်းများ) တွင် တည်ရှိသည် ” (၃)။
လည်ပတ်မှုစနစ် (OS kernel) သည် Ring 0 (kernel mode) တွင် အလုပ်လုပ်ပြီး မည်သည့်ဒေတာနှင့် စက်ကိရိယာများဖြင့်မဆို အလိုရှိတိုင်း လုပ်ဆောင်နိုင်သည်။ အသုံးပြုသူအပလီကေးရှင်းများသည် Ring 3 အဆင့် (အသုံးပြုသူမုဒ်) တွင် လုပ်ဆောင်နေပြီး ၎င်းတို့အလိုရှိသမျှကို လုပ်ဆောင်ရန် ခွင့်မပြုသော်လည်း သီးခြားလုပ်ဆောင်ချက်တစ်ခုလုပ်ဆောင်ရန် အကြိမ်တိုင်းဝင်ရောက်ခွင့်ကို တောင်းဆိုရမည် (ထို့ကြောင့် သုံးစွဲသူအပလီကေးရှင်းများသည် ၎င်းတို့၏ကိုယ်ပိုင်ဒေတာကိုသာ ဝင်ရောက်သုံးစွဲနိုင်ပြီး “မရနိုင်ပါ။ အခြားသူ၏သဲပုံးထဲသို့)။ Ring 1 နှင့် 2 ကို ယာဉ်မောင်းများ အသုံးပြုရန် ရည်ရွယ်ပါသည်။
Intel VT-x / AMD SVM ကို မတီထွင်မီ၊ hypervisors များသည် Ring 0 တွင် လည်ပတ်ပြီး ဧည့်သည်များသည် Ring 1 တွင် လည်ပတ်ကြသည်။ Ring 1 သည် OS ၏ ပုံမှန်လည်ပတ်မှုအတွက် လုံလောက်သောအခွင့်အရေးများ မရှိသောကြောင့်၊ ဧည့်သည်စနစ်မှ အခွင့်ထူးခံခေါ်ဆိုမှုတစ်ခုစီတိုင်း၊ hypervisor သည် ဤခေါ်ဆိုမှုကို ပျံသန်းမှုတွင် မွမ်းမံပြင်ဆင်ပြီး Ring 0 (QEMU ကဲ့သို့ပင်) တွင် လုပ်ဆောင်ရမည်ဖြစ်သည်။ အဲဒါတွေ။ ဧည့်သည် binary မ ပရိုဆက်ဆာပေါ်တွင် တိုက်ရိုက်လုပ်ဆောင်ခဲ့သည်၊ အကြိမ်တိုင်းသည် အလယ်အလတ်မွမ်းမံမှုများ အများအပြားကို ပျံသန်းသွားခဲ့သည်။
အပေါ်စီးက သိသာထင်ရှားပြီး ဒါက ပြဿနာကြီးတစ်ခုဖြစ်ပြီး၊ နောက်တော့ ပရိုဆက်ဆာထုတ်လုပ်သူတွေဟာ ဧည့်သည် OS ကုဒ်ကို လုပ်ဆောင်ခွင့်ပြုတဲ့ တိုးချဲ့ညွှန်ကြားချက် (Intel VT-x / AMD SVM) ကို ထုတ်ပြန်ခဲ့ပါတယ်။ တိုက်ရိုက် လက်ခံပရိုဆက်ဆာပေါ်တွင် (ယခင်ကကဲ့သို့ပင် ငွေကုန်ကြေးကျများသော အလယ်အလတ်အဆင့်များကို ကျော်ဖြတ်ခြင်း)။
Intel VT-x / AMD SVM ထွန်းကားလာသောအခါ အထူး Ring အဆင့်-1 (အနှုတ်တစ်ခု) အသစ်ကို ဖန်တီးခဲ့သည်။ ယခုမူ hypervisor သည် ၎င်းကိုလုပ်ဆောင်နေပြီး ဧည့်သည်များသည် Ring 0 တွင်လည်ပတ်ပြီး CPU သို့ဝင်ရောက်ခွင့်ကိုရရှိမည်ဖြစ်သည်။
အဲဒါတွေ။ နောက်ဆုံးတွင်-
- host သည် Ring 0 တွင်အလုပ်လုပ်သည်။
- ဧည့်၀တ်ကွင်းတွင် အလုပ်လုပ်သည်။
- hypervisor သည် Ring -1 တွင်အလုပ်လုပ်သည်။
4) QEMU-KVM
KVM သည် ဧည့်သည်များအား Ring 0 သို့ ဝင်ရောက်ခွင့်ပေးပြီး ဧည့်သည်များ "မြင်သည်" နှင့် အလုပ်လုပ်သော I/O (ပရိုဆက်ဆာ၊ ဒစ်များ၊ ကွန်ရက်၊ ဗီဒီယို၊ PCI၊ USB၊ အမှတ်စဉ် ပေါက်များ စသည်ဖြင့်) ကို အတုယူရန် QEMU ကို အသုံးပြုသည်။
ထို့ကြောင့် QEMU-KVM (သို့မဟုတ် KVM-QEMU) :)
CREDITS
PS ဤဆောင်းပါး၏စာသားကို Telegram ချန်နယ်တွင် မူလထုတ်ဝေခဲ့သည်။
အကြောင်းအရာကို မှန်ကန်စွာ နားမလည်သော သို့မဟုတ် ထည့်စရာများရှိပါက မှတ်ချက်တွင် ရေးပါ။
Thank you!
source: www.habr.com