๋์ ํ์ฌ ์ดํด:
1) KVM
KVM(Kernel-based Virtual Machine)์ Linux OS์์ ๋ชจ๋๋ก ์คํ๋๋ ํ์ดํผ๋ฐ์ด์ (VMM โ Virtual Machine Manager)์ ๋๋ค. ์กด์ฌํ์ง ์๋(๊ฐ์) ํ๊ฒฝ์์ ์ผ๋ถ ์ํํธ์จ์ด๋ฅผ ์คํํ๋ ๋์์ ์ด ์ํํธ์จ์ด๊ฐ ์คํ๋๋ ์ค์ ๋ฌผ๋ฆฌ์ ํ๋์จ์ด๋ฅผ ์ด ์ํํธ์จ์ด๋ก๋ถํฐ ์จ๊ธฐ๋ ค๋ฉด ํ์ดํผ๋ฐ์ด์ ๊ฐ ํ์ํฉ๋๋ค. ํ์ดํผ๋ฐ์ด์ ๋ ๋ฌผ๋ฆฌ์ ํ๋์จ์ด(ํธ์คํธ)์ ๊ฐ์ OS(๊ฒ์คํธ) ์ฌ์ด์์ "์คํ์ด์" ์ญํ ์ ํฉ๋๋ค.
KVM์ Linux ์ปค๋์ ํ์ค ๋ชจ๋์ด๋ฏ๋ก ์ปค๋์์ ํ์ํ ๋ชจ๋ ๊ธฐ๋ฅ(๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ, ์ค์ผ์ค๋ฌ ๋ฑ)์ ๋ฐ์ต๋๋ค. ๋ฐ๋ผ์ ๊ฒฐ๊ตญ ์ด๋ฌํ ๋ชจ๋ ์ด์ ์ ๊ฒ์คํธ์๊ฒ ๋์๊ฐ๋๋ค(๊ฒ์คํธ๋ Linux OS ์ปค๋์์ ์คํ๋๋ ํ์ดํผ๋ฐ์ด์ ์์ ์์ ํ๋ฏ๋ก).
KVM์ ๋งค์ฐ ๋น ๋ฅด์ง๋ง ๊ทธ ์์ฒด๋ง์ผ๋ก๋ ๊ฐ์ OS๋ฅผ ์คํํ๊ธฐ์ ์ถฉ๋ถํ์ง ์์ต๋๋ค. ์ด๋ฅผ ์ํด์๋ 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
๊ธฐ๋ณธ์ ์ผ๋ก Intel VT-x(Intel Virtualization Technology)/AMD SVM(AMD Secure Virtual Machine)์ ์ง์ํ์ง ์๋ ์ด์ ํ๋ก์ธ์ ๋ชจ๋ธ์ ์ฌ์ฉํ๋๋ผ๋ ๋ชจ๋ ํธ์คํธ์ QEMU์์ ๊ฐ์ ๋จธ์ ์ ์คํํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด ๊ฒฝ์ฐ ์คํ ์ค์ธ ๋ฐ์ด๋๋ฆฌ ์ฝ๋๋ฅผ TCG(TCG๋ Just-in-Time ์ปดํ์ผ๋ฌ์)๋ฅผ ์ฌ์ฉํ์ฌ ์ฆ์์์ ๋ ๋ฒ ๋ค์ ์ปดํ์ผํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋งค์ฐ ๋๋ฆฌ๊ฒ ์๋ํฉ๋๋ค.
์ ๊ฒ๋ค. QEMU ์์ฒด๋ ๋งค์ฐ ํ๋ฅญํ์ง๋ง ์๋ ์๋๊ฐ ๋งค์ฐ ๋๋ฆฝ๋๋ค.
3) ๋ณดํธ ๋ง
ํ๋ก์ธ์์ ๋ฐ์ด๋๋ฆฌ ํ๋ก๊ทธ๋จ ์ฝ๋๋ ์ด์ ๊ฐ ์์ด์ ์๋ํ์ง๋ง ๊ฐ์ฅ ํน๊ถ์ด ์๋ ๊ฒ(๋ง 0)๋ถํฐ ๊ฐ์ฅ ์ ํ์ ์ด๊ณ ๊ท์ ๋ ๊ฒ๊น์ง ๋ฐ์ดํฐ ์ก์ธ์ค ์์ค์ด ๋ค๋ฅธ ๋ค์ํ ์์ค(๋ง/๋ณดํธ ๋ง)์ ์์นํฉ๋๋ค. โ (๋ง 3 ).
์ด์ ์ฒด์ (OS ์ปค๋)๋ ๋ง 0(์ปค๋ ๋ชจ๋)์์ ์คํ๋๋ฉฐ ๋ชจ๋ ๋ฐ์ดํฐ ๋ฐ ์ฅ์น์ ๋ํด ์ํ๋ ๋ชจ๋ ์์ ์ ์ํํ ์ ์์ต๋๋ค. ์ฌ์ฉ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง 3 ์์ค(์ฌ์ฉ์ ๋ชจ๋)์์ ์๋ํ๋ฉฐ ์ํ๋ ๊ฒ์ ๋ฌด์์ด๋ ํ ์ ์์ง๋ง ๋์ ํน์ ์์ ์ ์ํํ๊ธฐ ์ํด ๋งค๋ฒ ์ก์ธ์ค๋ฅผ ์์ฒญํด์ผ ํฉ๋๋ค(๋ฐ๋ผ์ ์ฌ์ฉ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ ์ ๋ฐ์ดํฐ์๋ง ์ก์ธ์คํ ์ ์์ผ๋ฉฐ "์ป์ ์ ์์"). ๋ค๋ฅธ ์ฌ๋์ ์๋๋ฐ์ค์'). ๋ง 1๊ณผ 2๋ ์ด์ ์๊ฐ ์ฌ์ฉํ๋๋ก ๊ณ ์๋์์ต๋๋ค.
Intel VT-x/AMD SVM์ด ๋ฐ๋ช ๋๊ธฐ ์ ์๋ ํ์ดํผ๋ฐ์ด์ ๊ฐ ๋ง 0์์ ์คํ๋์๊ณ ๊ฒ์คํธ๋ ๋ง 1์์ ์คํ๋์์ต๋๋ค. ๋ง 1์๋ OS์ ์ ์์ ์ธ ์๋์ ์ํ ์ถฉ๋ถํ ๊ถํ์ด ์๊ธฐ ๋๋ฌธ์ ๊ฒ์คํธ ์์คํ ์์ ๊ฐ๊ฐ์ ๊ถํ ์๋ ํธ์ถ์ ์ฌ์ฉํ๋ฉด ํ์ดํผ๋ฐ์ด์ ๋ ์ด ํธ์ถ์ ์ฆ์ ์์ ํ๊ณ ๋ง 0์์ ์คํํด์ผ ํ์ต๋๋ค(QEMU์ ์ ์ฌ). ์ ๊ฒ๋ค. ๊ฒ์คํธ ๋ฐ์ด๋๋ฆฌ NOT ํ๋ก์ธ์์์ ์ง์ ์คํ๋์์ผ๋ฉฐ ๋งค๋ฒ ์ฆ์ ์ฌ๋ฌ ๊ฐ์ง ์ค๊ฐ ์์ ์ ๊ฑฐ์ณค์ต๋๋ค.
์ค๋ฒํค๋๊ฐ ์๋นํ๊ณ ์ด๋ ํฐ ๋ฌธ์ ์์ผ๋ฉฐ ํ๋ก์ธ์ ์ ์กฐ์ ์ฒด๋ ์๋ก ๋ ๋ฆฝ์ ์ผ๋ก ๊ฒ์คํธ OS ์ฝ๋ ์คํ์ ํ์ฉํ๋ ํ์ฅ๋ ๋ช ๋ น ์ธํธ(Intel VT-x / AMD SVM)๋ฅผ ์ถ์ํ์ต๋๋ค. ๊ณง์ฅ ํธ์คํธ ํ๋ก์ธ์์์(์ด์ ์ ๊ฒฝ์ฐ์ฒ๋ผ ๋น์ฉ์ด ๋ง์ด ๋๋ ์ค๊ฐ ๋จ๊ณ๋ฅผ ์ฐํ)
Intel VT-x / AMD SVM์ ์ถํ์ผ๋ก ํน๋ณํ ์๋ก์ด ๋ง ๋ ๋ฒจ -1(๋ง์ด๋์ค 0)์ด ์์ฑ๋์์ต๋๋ค. ์ด์ ํ์ดํผ๋ฐ์ด์ ๊ฐ ์ฌ๊ธฐ์์ ์คํ๋๊ณ ๊ฒ์คํธ๋ ๋ง XNUMX์์ ์คํ๋์ด CPU์ ๋ํ ํน๊ถ์ ์ธ ์ก์ธ์ค๋ฅผ ์ป์ต๋๋ค.
์ ๊ฒ๋ค. ๊ฒฐ๊ตญ:
- ํธ์คํธ๋ ๋ง 0์์ ์คํ๋ฉ๋๋ค.
- ์๋์ ๋ง 0์์ ์์ ํฉ๋๋ค.
- ํ์ดํผ๋ฐ์ด์ ๋ ๋ง -1์์ ์คํ๋ฉ๋๋ค.
4) QEMU-KVM
KVM์ ๊ฒ์คํธ์๊ฒ ๋ง 0์ ๋ํ ์ก์ธ์ค๋ฅผ ์ ๊ณตํ๊ณ QEMU๋ฅผ ์ฌ์ฉํ์ฌ I/O(๊ฒ์คํธ๊ฐ "๋ณด๊ณ " ์์ ํ๋ ํ๋ก์ธ์, ๋์คํฌ, ๋คํธ์ํฌ, ๋น๋์ค, PCI, USB, ์ง๋ ฌ ํฌํธ ๋ฑ)๋ฅผ ์๋ฎฌ๋ ์ดํธํฉ๋๋ค.
๋ฐ๋ผ์ QEMU-KVM(๋๋ KVM-QEMU) :)
CREDITS
์ถ์ : ์ด ๊ธฐ์ฌ์ ํ
์คํธ๋ ์๋ ํ
๋ ๊ทธ๋จ ์ฑ๋์ ๊ฒ์๋์์ต๋๋ค.
์ ๊ฐ ์ฃผ์ ๋ฅผ ์ ๋๋ก ์ดํดํ์ง ๋ชปํ ๋ถ๋ถ์ด๋ ์ถ๊ฐํ ๋ด์ฉ์ด ์์ผ๋ฉด ๋๊ธ๋ก ์ ์ด์ฃผ์ธ์.
๊ฐ์ฌํฉ๋๋ค!
์ถ์ฒ : habr.com