[WSL와 VM의 차이점] 하이퍼바이저를 이해하며..
주의: 최대한 근거있게 작성해봤으나 잘못된 부분이 있을 수 있습니다.
WSL과 VM의 차이점
이 질문을 왜 할까요?
아마도 "리눅스를 vmware나 virtualbox같은 VM으로 돌리는 거랑, WSL에서 리눅스를 돌리는 것의 차이점"이 궁금했을 것 같습니다. 제가 들었던 여러 강의에서도 종종 WSL과 VM의 차이점을 설명했습니다.
그리고 오늘 멘티에게 받은 질문이기도 합니다.
아마 배운 적이 있다면, 아래 그림이 좀 익숙할 것입니다.
WSL과 VM의 차이점입니다.
그런데 저는 여기서 하이퍼바이저라는 개념이 어렵게 느껴졌습니다.
도대체 왜 둘다 하이퍼바이저가 들어가있는데 VM을 돌리려면 Hyper-V를 꺼야하고, WSL이나 Docker를 돌리려면 Hyper-V를 켜야 하는지 이해가 잘 안갔습니다.
바로 그것이 오늘 하이퍼바이저를 공부하게 된 계기입니다. 결론적으로 두 하이퍼바이저는 다른 유형입니다. 하이퍼바이저에는 타입1과 타입2가 있는데, VM은 타입2 하이퍼바이저상에서 돌아갑니다. VirtualBox 자체가 타입2 하이퍼바이저입니다. 반면 WSL는 타입1 하이퍼바이저상에서 돌아가는데, MS사의 Hyper-V가 타입1입니다. 서로 다른 하이퍼바이저를 의미하는 것이었습니다.
WSL2의 구조를 볼까요?
하이퍼바이저 위에 Linux Kernel이 올라가있습니다.
이때 하이퍼바이저가 윈도우에서 설정을 켰던 그 Microsoft의 Hyper-V 가상화기술입니다.
아직 개념이 모호할 것입니다.
그래서 이제부터는
하이퍼바이저의 개념, 그리고 타입1과 타입2는 도대체 뭔지 공부해보겠습니다.
* WSL2 구조를 설명하는 도면!
이 도면을 가장 많이 봤을 것 같아서 한번 더 첨부하고 지나가겠습니다.
하이퍼바이저
하이퍼바이저는 하드웨어 위에 다른 VM을 돌아가게 해주는 프로그램입니다. 즉 하드웨어 자원을 VM에 할당/재배치 해주는 것입니다. 다시말해 물리 자원이 VM으로 잘 파티셔닝 됩니다. 이런 하이퍼바이저를 통하여 단일 컴퓨터 위에서 여러 OS를 구동할 수 있습니다.
하이퍼바이저는 두가지 타입이 있습니다.
- 타입1은 bare metal(베어메탈) 혹은 native 하이퍼바이저라고 부릅니다.
- 타입2는 Hosted 하이퍼바이저라고 부릅니다.
명명이 왜 저리 되었는지 먼저 간단히 이해해보겠습니다.
타입1인 bare metal, native 하이퍼바이저는 "하드웨어 위에서 직접 구동됩니다"
타입2인 hosted 하이퍼바이저는 "하드웨어 위의 호스트 OS위에서 구동됩니다"
와! 느낌이 오는 듯 합니다.
타입2는 직접적으로 사용했던 경험이 있을 겁니다.
예시로, 윈도우 위에서 리눅스를 virtualbox를 통해 띄운 적이 있다면 타입 2 하이퍼바이저를 사용해본 적이 있는 것입니다.
타입1은 Docker나 WSL을 사용할 때 경험해 봤을 것입니다.
WSL을 사용하기 위해 Hyper-V 기능을 켜야 했습니다. 이 Hyper-V가 Microsoft의 타입1 하이퍼바이저 기술입니다.
이 타입1 하이퍼바이저는 하드웨어 제어 기능을 할 수 있는 OS기능이 있습니다. 호스트 OS와 타입1하이퍼바이저는 유사한 성격이 있습니다. 실제로 리눅스 OS에는 타입1 하이퍼바이저를 포함합니다. Kernel based Virtual Machine이라는 KVM이라고 있는데, 밑에서 설명하죠!
참고) virtualbox를 사용하기 위해서는 Hyper-V를 꺼야 한다고 들어봤을 것입니다. 호환되지 않기 때문입니다.
(요즘은 또 안그렇다고 하던데 논외이므로 더보기에 첨부합니다!)
https://learn.microsoft.com/ko-kr/windows/wsl/faq
WSL 2 및 기타 타사 가상화 도구(예: VMware 또는 VirtualBox)를 실행할 수 있나요?
Hyper-V를 사용 중인 경우 일부 타사 애플리케이션을 작동할 수 없습니다. 즉, VMware 및 VirtualBox와 같이 WSL 2를 사용하도록 설정된 경우에는 일부 타사 애플리케이션이 실행되지 않습니다. 그러나 최근에 VirtualBox와 VMware는 모두 Hyper-V 및 WSL2를 지원하는 버전을 릴리스했습니다! VirtualBox 변경 내용 및 VMware 변경 내용에서 자세히 알아보세요. 문제 해결은 GitHub의 WSL 리포지토리에 있는 VirtualBox 문제 토론을 참조하세요.
저희는 타사의 Hyper-V 통합을 지원하기 위해 지속적으로 솔루션을 개발하고 있습니다. 예를 들어 타사 가상화 공급자가 Hyper-V와 호환되는 소프트웨어를 만드는 데 사용할 수 있는 하이퍼바이저 플랫폼이라는 API 세트를 제공합니다. 이를 통해 애플리케이션은 현재 Hyper-V와 호환되는 VirtualBox 6 이상 버전과 Google Android Emulator 같은 에뮬레이션에 Hyper-V 아키텍처를 사용할 수 있습니다.
VirtualBox 6.1의 WSL 2 문제에 대한 자세한 배경 및 논의는 WSL 문제 리포지토리를 참조하십시오.
*Windows 가상 머신을 찾는 경우, Windows 개발자 센터에서 VMWare, Hyper-V, VirtualBox 및 Parallels VM 다운로드를 사용할 수 있습니다.
+ 또 참고: https://www.clien.net/service/board/cm_app/16337912
![](https://blog.kakaocdn.net/dn/PSutC/btstkpkvbub/0lgrYbfrvYkn1dzCjfzN70/img.png)
+ 참고하기 좋습니다
https://aws.amazon.com/ko/what-is/hypervisor/
하이퍼바이저란 무엇인가요?- 하이퍼바이저 설명 - AWS
하이퍼바이저는 가상화 또는 하드웨어와 소프트웨어의 분리를 지원하는 기반 기술입니다. IT 관리자는 단일 호스트 시스템에 여러 가상 머신을 생성할 수 있습니다. 가상 머신마다 자체 운영 체
aws.amazon.com
타입2 하이퍼바이저
타입2는 흔히 윈도우 위에 리눅스를 올려서 실습할 때 사용했던 virtualbox나 vmware 프로그램들에 해당합니다. Oracle VirtualBox, VMware Workstation, VMware Player, Parallels Desktop(Mac) 등입니다. 타입 2는 "호스트된 하이퍼바이저"입니다. 호스트 OS와 게스트 OS를 분리하고 있습니다. 호스트 OS 위에서 동작하는 타입2 하이퍼바이저는 게스트 OS들에게 하드웨어 자원을 관리해줍니다. 즉 호스트 OS의 영향을 받는다는 말입니다.
다시 정리하자면, 하드웨어 위에 호스트 OS가 붙어있고, 그 위에서 하이퍼바이저(또는 VMM)을 설치해서 그 안에서 VM을 구동하는 방식입니다.
타입1 하이퍼바이저
타입1은 좀 더 근본적(?)입니다.
하이퍼바이저(또는 VMM)가 하드웨어 위에서 직접적으로 구동됩니다. 그 하이퍼바이저 위에서 여러 VM을 구현할 수 있습니다. 예를 들면 VMware ESXi, Citrix Xen, Microsoft Hyper-V가 타입1 하이퍼바이저입니다.
* recall: 타입2 하이퍼바이저는 하드웨어 위에 호스트 OS가 붙어있고, 그 호스트 OS위에서 구동되는 하이퍼바이저입니다.
* 참고: 전가상화와 반가상화라는 말을 들어봤을 텐데, 이것들은 타입1 하이퍼바이저를 구현하는 방식에 따른 말입니다.
하드웨어 위에서 직접 구동된다고 했습니다. 타입1은 하드웨어 기능을 사용한다는 말인데요, 이런 성격은 곧 호스트 OS와 유사합니다. (여기서 조심! 호스트 OS랑 독립적으로 생각해야 합니다. 따로국밥입니다.)
.
.
방금 말한 부분!
하드웨어를 제어하는 역할을 가지는 부분에서 타입1은 호스트OS과 유사하다고 했습니다.
그래서 Linux 커널에 내장된 타입1 하이퍼바이저인 KVM을 소개하겠습니다. 동시에 Linux의 타입2 하이퍼바이저인 OEMU도 같이 간단히 설명하겠습니다.
타입 1중에 커널 기반 가상 머신 (KVM)이라는 것이 있습니다. Linux OS를 타입1 하이퍼바이저로 변환하는 오픈소스 소프트웨어입니다. KVM은 버전 2.6.20 이후 모든 Linux 커널에 내장되었습니다. KVM의 이해를 돕기 위해, Linux의 QEMU도 같이 설명하겠습니다. QEMU는 긴밀하게 KVM을 사용하는 타입2 하이퍼바이저입니다. 일반적으로 사용자는 KVM을 복잡하게 직접 사용하지 않고, GUI도 제공되고 VM을 다루기 쉬운 QEMU(타입2 하이퍼바이저)를 씁니다.
* 타입2가 타입1을 사용한다? 좀 어렵네요..!
KVM은 AWS의 클라우드 컴퓨팅 서비스에서 사용됩니다. 클라우딩 컴퓨팅 기술 중 100대의 컴퓨터를 10000명이 사용하게 하는 개념이 이것에 해당합니다. KVM 모듈은 가상CPU(vCPU)를 만들 수 있는 기능이 있습니다. 이때 CPU는 vCPU를 허용하는 CPU를 사용해야 한다고 합니다.
참고: https://ko.linux-console.net/?p=9941#gsc.tab=0
QEMU와 KVM 하이퍼바이저: 차이점은 무엇입니까?
QEMU와 KVM 하이퍼바이저: 차이점은 무엇입니까? 사용자는 Linux 시스템에서 가상화와 관련하여 많은 선택을 할 수 있습니다. 호스트 시스템과 분리된 테스트 시스템을 원하든, 다른 Linux 배포를 테
ko.linux-console.net
그러나 호스트 OS와 유사하다는 설명, 그리고 리눅스 OS에 KVM이라는 타입1 하이퍼바이저가 내장되어있다는 설명 때문에 오해하면 안 되겠습니다. 타입1 하이퍼바이저는 호스트 OS를 거치지 않고 하드워어~VM 리소스를 직접 관리하고 할당합니다. 호스트 OS 위에서 작동하지 않고 직접 하드웨어 리소스를 관리하기 때문에 더 안정적인 것입니다.
Wrap up!
여기서 하이퍼바이저에 대한 설명 끝!
이제는 VM과 WSL의 차이를 누군가 물어봤을 때 이렇게 설명할 수 있지 않을까요?
* 정리해서 쓰려니 어렵네요.. 틀릴 수도 있다는 점 죄송합니다. 정확한 개념은 차차 공부해가며 보완하겠습니다. 참고 정도만 되길..!
.
.
윈도우에서 리눅스를 돌릴 때 VM과 WSL의 차이를 묻는거지?
VM은 리눅스 OS 전체를 가상 환경에서 실행하는 반면, WSL은 리눅스 커널만을 실행하고, Windows에서 리눅스 응용 프로그램을 실행하는 환경을 제공해줘. OS는 커널이랑 시스템 프로그램으로 이루어져 있는데, WSL은 커널만 실행하는 거지. 그래서 사용감이 가벼워.
그럼 리눅스의 시스템 프로그램은 어떻게 돌아가냐? 시스템 콜 관점에서 설명할 거야.
VM은 리눅스 OS 자체를 돌리기 때문에, 리눅스 시스템 콜을 직접 사용해.
WSL은 리눅스 커널만 돌려. 리눅스 커널의 기저부분은 WSL에 연결되어있어. 리눅스 커널 위에서 동작하는 응용프로그램이 발생시키는 시스템 콜은 WSL에 의해 윈도우 시스템 콜로 변환돼. 또다시 윈두우 시스템 콜 실행 결과는 WSL에 의해서 다시 변환돼서 리눅스에 전달돼. 그래서 리눅스 응용 프로그램을 실행할 수 있는 원리라고 하네. ("시스템 콜 에뮬레이션" 방식으로 동작한다!) (참고: https://www.tuwlab.com/ece/29277)
[정리]
리눅스 커널에서 응용프로그램 실행 -> 리눅스 시스템 콜
-> WSL(시스템 콜 변환)
-> 윈도우 시스템 콜
-> WSL(결과 변환)
-> 리눅스 -> 응용프로그램 실행
그러한 시스템콜 변환 기능을 해주는 WSL을 구동하려면 하이퍼바이저라는 가상화기술이 필요해.
하드웨어 자원을 가상환경에 할당해주는 기술이 하이퍼바이저야. 하이퍼바이저를 사이에 두고 윈도우-리눅스 시스템 콜이 왔다갔다 변환되는 방식으로 동작하는 거야. 이때 OS는 호스트(윈도우)를 사용하기 때문에, 리눅스 응용 프로그램 구동이 VM보다 가벼워! (앞서 WSL은 시스템 콜 애뮬레이션 방식으로 동작한다고 한 내용)
"WSL를 사용하려면 켜야한다"는 Hyper-V가 바로 그 하이퍼바이저야.
하이퍼바이저는 두가지 타입이 있어. 타입1은 하드웨어 위에서 직접 구동되는 Hyper-V가 해당돼.
반면 호스트 OS 위에서 리눅스 OS를 띄우는 VirtualBox같은 VM은 타입 2 하이퍼바이저 기술이야.
+ 아직 잘 모르겠는 건, 바로 위 그림에서 왜 Hyper-V 위에 Windows Kernel이 있어야 하는지입니다.
혹시 지나가는 선생님께서는... 댓글로 가르침 부탁드립니다... 🤣