Record
가상화란(Hypervisor)? 본문
기본적으로 하나의 pc에는 하나의 os가 돌아갈 수 있다. 윈도우 컴퓨터는 윈도우, 리눅스는 리눅스 그리고 우리는 윈도우가 친숙하기 때문에 사실 어릴적에는 os라는 개념을 잘모르고 그냥 컴퓨터 = 윈도우 이런느낌이였다.
하지만 실제로 컴퓨터 공부를 하면서 다양한 운영체제가 있다는것을 배웠고 하나의 컴퓨터에서 여러 운영체제를 쓰고 싶다는 열망?이 생기고 이는 다른 사람들도 아마 같았다고 생각한다.
컴퓨터의 자원(CPU, 메모리, 디스크 등)을 OS가 독점해서 관리하기 때문에, 다른 OS가 끼어들 틈이 없다. 하지만 VMware 같은 하이퍼바이저(Hypervisor) 기술이 등장하면서 이 판도가 바뀌게 되었다.
1. 과거: 물리적 PC (1:1 구조)
- 구조: 하드웨어(CPU/RAM) → OS(Windows 등)
- 한계: OS가 하드웨어의 모든 권한을 쥐고 있습니다. 만약 리눅스를 쓰고 싶다면 기존 윈도우를 지우거나, 하드디스크를 파티션으로 나눠서 재부팅하는 '멀티 부팅'을 해야만 했죠. 동시에 두 개를 켜는 건 불가능했습니다.
2. 현재: VMware 가상화 (1:N 구조)
- 구조: 하드웨어 → 호스트 OS(윈도우) → VMware(하이퍼바이저) → 가상 머신(Guest OS)
- 혁신: VMware가 중간에서 "교통 정리" 역할을 합니다. 윈도우 위에서 돌아가는 하나의 프로그램처럼 보이지만, 실제로는 하드웨어 자원을 쪼개서 가상 머신들에게 "이건 네 CPU야", "이건 네 메모리야"라고 속여서(?) 전달해 줍니다.

그렇다면 hypervisor라는 애는 뭐하는 애일까?
하이퍼바이저가 하드웨어 위에서 작동한다는 것은, 쉽게 말해 "하드웨어를 직접 만지는 모든 권한을 하이퍼바이저가 독점하고, OS들에게는 가짜(가상) 하드웨어를 나누어 준다"는 뜻입니다.
이를 가능하게 하는 핵심 구성 요소와 격리 원리를 정리해 드릴게요.
1. 하이퍼바이저의 3대 핵심 구성 요소
하이퍼바이저는 내부에 세 가지 주요 모듈을 가지고 '교통 정리'를 합니다.
- 디스패처 (Dispatcher): 입구 역할을 합니다. 가상 머신(VM)이 내리는 명령어를 받아서 어디로 보낼지 결정합니다.
- 할당자 (Allocator): 자원 관리자입니다. "A 가상머신에는 메모리 4GB, B에는 2GB" 식으로 실제 하드웨어 자원을 쪼개서 배분합니다.
- 인터프리터 (Interpreter/Emulator): 번역가입니다. 가상 머신이 "나 진짜 CPU에 이 명령 내릴래!"라고 하면, 하이퍼바이저가 이를 가로채서 실제 하드웨어가 이해할 수 있는 안전한 명령으로 바꿔서 전달합니다.
2. 자원을 어떻게 따로 나눠서 격리하나요? (3단계 원리)
① CPU 격리: 시간 쪼개기 (Time Slicing)
실제 CPU 코어는 하나지만, 하이퍼바이저는 이를 아주 잘게 쪼갠 시간 단위로 관리합니다.
- 0.001초는 Windows VM이 사용하고, 그다음 0.001초는 Linux VM이 사용하게 합니다.
- 격리 비결: 각 OS는 자신이 CPU를 계속 쓰고 있다고 착각하지만, 하이퍼바이저가 중간에서 '컨텍스트 스위칭'이라는 기술로 상태를 저장하고 불러오며 완벽히 분리합니다.
② 메모리 격리: 주소 속이기 (Shadow Page Tables)
가상 머신 안의 OS는 "내가 메모리 0번지부터 쓰고 있어"라고 생각합니다.
- 하지만 하이퍼바이저는 실제 메모리의 **'진짜 주소'**를 따로 관리합니다.
- 격리 비결: VM 1번의 0번지는 실제 메모리의 500번지에 매핑하고, VM 2번의 0번지는 실제 메모리의 1000번지에 매핑합니다. 서로의 메모리 영역을 절대 침범할 수 없도록 **'지도(Map)'**를 따로 그려주는 셈입니다.
③ I/O 격리: 가상 드라이버 (Virtio / VDev)
가상 머신은 실제 하드디스크나 랜카드에 직접 접근할 수 없습니다.
- 하이퍼바이저가 만든 **'가상 랜카드'**나 **'가상 디스크'**라는 소프트웨어 껍데기에 요청을 보냅니다.
- 격리 비결: 하이퍼바이저는 이 요청을 받아서 실제 하드웨어의 특정 구역(예: vmdk 파일 등)에만 데이터를 쓰도록 제한합니다.

3. 요즘 OS의 '방석' 구조 (샌드위치 구조)
말씀하신 "OS가 하이퍼바이저 위에 올라간다"는 느낌은 이 그림과 같습니다.
- 맨 밑바닥 (하드웨어): 실제 CPU, RAM
- 얇은 막 (하이퍼바이저): 자원을 쪼개는 투명한 레이어
- 그 위 (파티션): * Root Partition: 우리가 쓰는 진짜 윈도우 (관리자 권한을 가짐)
- Child Partition: 우리가 만든 가상 머신들 (격리된 공간)
이렇게 되면, 만약 가상 머신(Child)에서 바이러스가 퍼지거나 시스템이 깨져도, 하이퍼바이저가 쳐놓은 메모리 담장 때문에 원래 윈도우(Root)나 다른 가상 머신으로는 절대 넘어갈 수 없게 됩니다.
그렇다면 또 궁금증이 생긴다. 현대의 os는 아래에 hypervisor가 깔린 상태로 올라간다면... 일반사용자들 처럼 os를 하나만 쓸때는 hypervisor가 다쓰게 내비둘까? 아니면 따로 정해진 용량을 관리할까?
- 평상시: 하이퍼바이저는 투명 인간입니다. 원래 OS가 자원을 풀로 쓰도록 돕습니다.
- VM 실행 시: 내가 설정한 값만큼 자원을 떼어다가 VM에게 전달합니다.
- 효율성: 하이퍼바이저는 자원이 노는 꼴을 못 봅니다. VM이 할당받은 자원을 안 쓰고 있으면 최대한 원래 OS가 쓸 수 있게 뒤에서 조절해 줍니다.
그렇다면 어떻게 보면 hypervisor는 원래 os에서 하던일 , cpu관리 프로세스 관리를 하는 Main 관리자이고 그 다음 os한테 이 자원을 속인? 할당을해서 얘가 소유할 수 있게 해주는 느낌이다.
만약에 그러면 hypervisor가 자원을 넘어서는걸 주면 어떻게 될까?
- 동시 사용의 착각: 사실 CPU 코어 하나는 한순간에 단 하나의 명령만 처리할 수 있습니다. 하이퍼바이저가 0.0001초 단위로 윈도우와 가상 머신을 왔다 갔다 하며 일을 시키는 것이죠.
- Context Switching 비용: 윈도우 일을 하다가 가상 머신 일로 넘어갈 때, CPU는 지금까지 하던 작업 내용을 메모리에 저장하고 새 작업 내용을 불러와야 합니다. 이 "짐 싸고 짐 푸는 시간"이 바로 오버헤드입니다.
- 지연 시간(Latency): 가상 머신이 "나 지금 계산해야 해!"라고 요청해도, 하이퍼바이저가 윈도우 일을 마무리하고 넘겨줄 때까지 아주 미세하게 기다려야 합니다. 이게 우리가 느끼는 '미세한 끊김'이나 '속도 저하'의 원인입니다.
CPU는 시간을 쪼개 쓸 수 있지만, RAM(메모리)은 공간을 쪼개야만 합니다.
- CPU: "너 한 번, 나 한 번" (시간차 공격 가능)
- RAM: "이 구역은 내 땅, 저 구역은 네 땅" (공간 점유 필수)
만약 16GB RAM PC에서 가상 머신에 16GB를 똑같이 할당해버리면 어떻게 될까요?
- 윈도우도 16GB가 필요하고, 가상 머신도 16GB가 필요하면 메모리 부족(Out of Memory) 현상이 생깁니다.
- 이때 하이퍼바이저는 부족한 RAM 대신 하드디스크의 일부를 메모리처럼 쓰는 **'스와핑(Swapping)'**을 시작하는데, 하드디스크는 RAM보다 훨씬 느리기 때문에 컴퓨터가 엄청나게 버벅거리게 됩니다.
'CS > 클라우드' 카테고리의 다른 글
| [K8s] 쿠버네티스 설치 (0) | 2026.02.25 |
|---|---|
| [K8s] 쿠버네티스란 ? (0) | 2026.02.24 |
| 도커란? (2) (0) | 2026.02.12 |
| Ansible이란? (1) | 2026.02.06 |
| Hypervisor , ESXI (0) | 2026.02.04 |