꺼내먹는지식 준

WSL 개념 정리 본문

카테고리 없음

WSL 개념 정리

알 수 없는 사용자 2023. 3. 31. 17:24

Linux, Window 

 

Linux와 Window 는 다양한 차이가 있지만, 결정적으로 몇가지 구조적 차이가 있고, 그 중 kernel에 대해 정리해보자. 

 

kernel 이란?

간단하게 예를 들어보자.

MS word 에서 프린트 icon을 클릭하면 프린터기에서 인쇄가 된다. 

사실, 프린터기는 프린트를 위한 특별한 언어도 있고, 컴퓨터와 소통하기 위한 protocol이 존재하나 우리는 그런걸 몰라도 된다. 

이는 kernel 이 하드웨어와 os 간에 추상적인 layer를 놓아 소통할 수 있도록 하기 때문이다.

즉, kernel은 os의 brain 이다. 

 

Window kernel 

Window의 kernel은 hybrid형이다. 즉, 두가지 다른 kernel architectures을 결합해서 만들었다

  • Monolithic kernel 

모든 코드와 드라이버를 하나의 큰 kernel 공간에 배치한다. 이에 따라 높은 퍼포먼스와 효율을 제공하는 크고 통합된 프로그램이라는 장점이 있다. 

  • Micro kernel

마이크로 kernel은 코드와 드라이브를 여러 독립 공간에 분산한다. 이에 따라 쉽게 더하거나 빼는 것이 가능하다보니 더 유연하고 커스터마이징 가능하다는 장점이 있지만 추가적인 com,munication layer가 필요하다보니 덜 효율적이다. 

 

window의 kernel은 둘다 차용해서 어느정도의 수정 가능성을 남겨 놓아 유연함과 커스텀 기능을 확보했다. 

 

Linux kernel

반면, Linux는 monolithic kernel로 속도가 빠르고 효율이 좋다. 하지만 더 복잡하고 수정하기 힘들다. 

 

 

 

Why Linux? 

 

  • Linux는 오픈소스이기에 소스코드가 공개되어있다. 즉 os를 커스텀하거나 수정이 쉽다. 이로 인해 오픈 소스 프로젝트에 기여하고 싶은 개발자에게 최적의 platform 이다. 
  • Linux는 window 보다 더 강력한 CLI를 제공한다. 즉, 파일 깔거나 정리하거나. 디버깅 등등에서 훨씬 유용하다. 
  • 여러 개발 툴, 컴파일러, 디버거, 에디터가 리눅스에서는 무료다. 
  • 더 안전하다. 소스 코드가 공개되었기에 많은 사람들에게 취약점들이 검증 되었다.  privilege가 root user 와 regular users 들 사이에 차이가 있어 시스템의 중요 파일에는 접근 못하게 할 수 있다.
  • 다양한 환경에 설치 가능하다. 디폴트로 사용하니 docker 같은 개념이 등장할 수 있었다고 생각한다. 

 

Linux on Window 

 

리눅스를 Window에서 사용하는 방법은 크게 두가지가 있다. 

 

  • Virtual Machine 사용 

Virtual Machine 은 분리된 virual 환경을 만들고, physical computer의 하드웨어와 소프트 웨어를 emulate 한다. VM은 CPU, memory, storage를 할당 받기 때문에 resource intensive 하다. Mac 에서 윈도우를 쓰기 위해 부트캠프를 깔았을 때 생각해보면 쉽다. 

 

  • WSL 사용

WSL은 VM 필요없이 Window의 kernel 위에서 Ubuntu 가 돌아간다. 즉 Linux binaries와 tool 들을 윈도우 시스템에서 바로 쓸 수 있기 때문에 performance overhead나 하드웨어 요구사항이 없다. WSL 은 Linux 와 Window의 workflow를 seamless 하게 통합하여 두 OS간의 파일 공유, 리소스 공유가 자유롭다. 

 

WSL 을 부연설명 해보자면, WSL 설치 순간 Ubuntu distribution의 subset에 기반한 가벼운 리눅스 환경이 생성된다. 이 환경은 기본적으로 제한적인 기능을 갖는다. 

WSL은 Windows NT Kernel Proxy 라는 기술을 통해 Ubuntu 환경에서 생성하는 Linux 시스템의 calls 을 interpret하여 Window system에 던져준다. 이를 통해 Linux application과 tools들이 file system, network interface, hardware devices와 같은 Window resource에 접근 가능해진다. 

 

WSL distribution (linux distribution)를 생성하면 VM 처럼 system resource가 사용되긴 한다. distribution의 종류, distribution 위에서 쓰이는 application, worload 등등에 따라 정도는 차이가 있다. WSL의 리소스 사용량은 Window Task Manager 에서 볼 수 있다.  

 

How does the resource consumption of WSL differ from that of VMs?

 

  • WSL 은 VM 과 다르게 full os 를 필요로 하지 않는다. 즉, CPU, memory 등을 적게 쓸 수 밖에 없다. 또한 추가적인 full kernel 이 필요하지 않은 것도 이에 해당한다. (WSL도 kernel 이 필요하긴 하다. 그러나 window에서 필수적으로 동작하기 위한 가벼운 kernel 이다.)
  • WSL은 host Windows 와 resources 를 share 한다. VM이 통상적으로 생성 시기에 자원을 배분해줘야하는 것과 대조적이다. 
  • WSL 은 여러 distributions 을 최소한의 overhead 로 운용 가능하다. VM 으로 하려면 .. 상상하기 싫다.  
  • 그렇지만 WSL 는 window 와 소통하기 위한 기본적 layer + linux distribution 이 설치되다보니 약간의 overhead가 존재하긴 하다. 그래도 워낙 장점이 많아서 좋다.

 

 

용어 정리 

 

Linux binaries: executable 파일들, WSL은 Windows 환경에서 linux binaries 가 동작하도록 한다.

 

Layer in WSL: container 같은 추상화 개념. filesystem 과 system resource 를 관리한다. 우분투와 데비안 같은 복잡한 리눅스 환경을 WSL distribution을 통해 제공하기 위한 필수적인 foundation이 바로  layers이다. 이 위에 지어진다. linux distribution이 window operating system위에서 돌아가기 위해 필수적인 기능과 인터페이스를 제공한다. 

 

Linux distribution: 다양한 버전의 linux

 

Hyper-V: Hyper-V 는 말하자면 큰 박스고, 작은 박스(VM)을 그 안에 넣을 수 있다. 각각의 작은 박스는 컴퓨터처럼 OS와 개별 application 을 가지고 있다. Hyper-V 덕분에 여러개의 VM 을 같은 physical machine에서 운용 가능하다. 

Hyper-V 는 WSL2 아키텍쳐의 중추역할을 한다. WLS2는 가벼운 Linux kernel을 운용하기 위해 가벼운 Hyper-V VM 을 만든다. 해당 Linux kernel은 windows 10 에서 linux application 이 돌아가도록 하는 layer이다. 

 

WSL2는 virtualized linux 환경을 windows 10 위에서 돌리지만, full-blown VM 의 overhead는 피한다. Hyper-V는 virtualized 환경을 생성하고 관리하는 필수적인 리소스를 제공한다. 

 

WSL1 vs WSL2 

WSL1은 translation layer를 사용하여 Linux system의 call을 Window 에 맞게 변환시켰고 Linux user-mode code를 Windows kernel에 바로 올렸다. 이 접근법은 linux를 window 위에서 가볍게 돌릴 수 있도록 했으나, 몇가지 한계가 존재했다. 

 

WLS2 의 가장 큰 강점이 WLS1 의 한계를 해결했다고 보면 된다. 

WLS2는 VMware와 공존하여 Docker를 사용하려면 Docker legacy를 써야했던 과거에서 벗어나, WLS2가 있으면 MS store 에서 설치한 OS를 캐치하여 docker, docker compose, warm, kubernetes를 사용할 수 있다. 

 

Comments