-
도커를 공부하다보면 마주치게 되는 가상화란, 가상화의 종류CS기초/OS,HW 2022. 12. 18. 22:34728x90반응형
가상화는 이해하기 어렵다. 그 이유는 추상적이고 눈에 보이지 않는 개념이기 때문이다. 수학을 잘하는 사람이 물리를 못하는 이유와 같다 (=나). 4차원, 5차원 공간이 나오고 중력에 대해 이야기 하는데, 나는 그것을 본적이 없어서 그저 머리로 상상해서 그려야하기 때문이다. 그래서 자료를 많이 보고, 실제로 사용해보는 수 밖에 없다. 그러니 처음 공부하는 사람들이 가상화 자료를 몇 번 읽어 봤다 해서 이해가 안 되는 것은 당연하니, 이 글이 위안이 되었으면 좋겠다 (사실 나도 아직 잘 모르겠다).
가상화는 말 그대로 하나의 물리 리소스를 여러 개인 것 처럼 나누는 것이다. 맥에서 도커를 띄우려면 Docker Desktop이라는 것을 설치해야하는데, Docker desktop 환경 설정에 보면 하드웨어 리소스를 설정하는 부분이 있다. 도커는 리눅스 기반이므로 맥에서 사용하려면 리눅스 vm을 띄워야한다. 이 역할을 docker desktop이 해주는데, (그래서 원래 컨테이너 기술 자체는 vm보다 가벼운데, 맥에서 도커 띄우면 cpu가 난리가 난다) docker desktop 환경설정해서 배분하는 그 리소스가 이 vm에 얼마만큼의 리소스를 내 컴퓨터에서 빼서 줄 것인가를 결정하는 것이다. 예를 들어, 도커에 4GB를 주면, 4GB짜리 리눅스 컴퓨터를 한 대 쓸 수 있는 것과 같다.
하지만 이 리눅스 컴퓨터는 실존하는 컴퓨터가 아니라 내 컴퓨터 안에 4GB를 도커 프로그램을 통해 분리해서 만든 "가상적인" 컴퓨터이므로 이 기술을 "가상화"라고 부르는 것이다.
가상화의 종류는 크게 OS를 가상화 하느냐 아니냐에 따라 컨테이너, Hypervisior 가상화 & Host 가상화로 구분하고, Hypervisior 가상화 내에서 하드웨어를 어디까지 가상화하느냐에 따라 전가상화, 반가상화로 나뉘며, 전가상화에서 속도를 개선한 하드웨어 (지원) 가상화까지로 볼 수 있다.
(참고: 다음 글을 이해하기 위해서는 OS와 하드웨어에 대한 이해가 일부 필요함)
컨테이너 (Container)
여러가지 플랫폼들이 있었지만 도커가 대표적으로 살아남아 사용되고 있다. OS가 아닌 소프트웨어, 즉 어플리케이션 단을 가상화해서 구분하는 기술로 프로그래밍 언어의 가상환경을 제외한다면 가장 최상단의 가상화 기술이기 때문에 가볍고 빠르다.
- 장점: 프로세스를 격리시키기 때문에 가상머신보다 빠르고 가볍다 (CPU, 메모리 오버헤드 거의 없음).
- 단점: 컨테이너끼리 커널과 하드웨어를 공유하기 때문에 가상머신보다 고립화 레벨이 낮아 보안이 약하다.
가상화 (Virtualization)
Hypervisor 가상화 (Type1)
Baremetal, Embedded, Native Hypervisor라고도 불린다. 하드웨어 리소스를 Host OS에 직접 할당하지 않고 Guest OS에 직접 할당하는 방법이다. 즉, 내 컴퓨터의 OS (맥이라고 하면 Mac OS)에 하드웨어 리소스를 주는게 아니라 hypervisor machine에다가 바로 리소스를 갖다 붙이는 방식. 따라서 OS에 독립적이다.
즉, Type 1과 Type2 (가상머신)의 차이는 다음과 같다.
전가상화 (Full virtualiztion)
하드웨어를 완전히 가상화하는 방법이다. DOM0라는 관리용 가상머신이 구동되고, 모든 가상 머신들의 하드웨어 접근이 DOM0를 통해 이루어진다.
- 장점(반가상화와 비교했을 때의 장점): 하드웨어 관리 머신인 DOM0이 실행되기 때문에 Guest OS의 수정이 필요하지 않다.
가상 머신들이 서로 간섭하지 않기 때문에 처리 오버헤드가 낮다. - 단점: 모든 Guest OS가 하나의 DOM0을 통해 Hypervisor와 소통하기 때문에 속도가 느리다.
각 Guest OS의 커널에서는 사용하는 규칙이 모두 다르기 때문에 DOM0에서 번역이 필요하다.
반가상화 (Paravirtualiztion)
전가상화의 성능 문제를 해결하기 위해 하나의 DOM0를 모든 가상머신이 사용하는 것이 아니라, Guest OS의 커널을 일부 수정하여 각 가상머신이 Hyercall을 통해 커널 명령을 Hypervisor로 전달하여 실행될 수 있게 하는 기술
1. Hypervisor가 x86에서 제공하는 보호링 중 가장 권한이 높은 링0에서 실행 커널을 일부 수정
2. 링0에서 실행되는 명령을 보다 낮은 권한인 링1에서 실행
3. 가상환경과 실제 환경과의 클럭 동기화 같은 일부 명령의 경우 Hypervisor에게 요청하는 Hypercall이 발생하도록 수정
- 장점: 각 Guest OS가 직접 Hypervisor와 소통하기 때문에 전가상화에 비해 속도가 빨라짐
- 단점: Guest OS의 커널 수정이 필요하기 때문에 오픈 소스 OS가 아니면 반가상화를 사용하기 어렵다 (윈도우에서는 Xen-tool을 설치하여 사용할 수 있다)
하드웨어 (지원) 가상화(Hardware virtualization/Hardware Assisted)
CPU를 가상화하여 전가상화의 장점과 반가상화의 장점을 모두 취한 방법이다.
- 장점: 전가상화에서 성능 하락을 일으켰던 Binary Translation을 Hypervisor가 아닌 CPU에서 대신 처리하게 됨으로써 성능, 속도 향상, 커널의 역할을 Hypervisor가 대신함
- 단점: 특정 하드웨어 종속적 - 특정 하드웨어에서만 사용 가능한 기술이다(Intel사의 VT-x, AMD사의 AMD-V).
Host 가상화 (Type2)
가상 머신으로 불리는 기술로, HostOS에 리소스를 붙이고 그 위에 Hypervisor를 띄운 후 Hypervisor위에 Guest OS를 올리는 방식이다.
- 장점: 가상화를 위해 Host 또는 Guest OS를 수정하거나 특별한 CPU 하드웨어 지원이 필요하지 않다.
- 단점: VM의 I/O 요청이 Host OS를 통해야하므로 속도가 느리고 오버헤드 발생 -> 맥에서 Docker Desktop 켜면 CPU 난리나는 이유
728x90반응형'CS기초 > OS,HW' 카테고리의 다른 글
컴퓨터에서의 뺄셈 구현 - 보수(complement)를 활용한 감산의 가산 처리 (0) 2023.03.29 운영체제 7: 코드를 통한 프로세스 작동 방식의 이해 (0) 2022.05.30 운영체제 6: 프로세스 간 커뮤니케이션 - 가상 메모리와 IPC에 대해 (0) 2021.12.30 운영체제 5: 컨텍스트 스위칭 (Context Switching) (0) 2021.12.28 운영체제 4: 프로세스 (Process)의 구조 (0) 2021.12.28