[운영체제] 가상화
![[운영체제] 가상화](https://firebasestorage.googleapis.com/v0/b/cruz-lab.firebasestorage.app/o/images%2Fheroes%2Fhero-1766482109569.webp?alt=media&token=6a0726d4-cefa-4b4c-81a4-b546a1e15f86)
가상화란?
**가상화(Virtualization)**란, 물리적인 자원을 그대로 드러내지 않고 추상화된 인터페이스로 나눠 보여주는 방식을 말한다.
쉽게 말하면 CPU, 메모리, 저장장치 같은 실제 자원을 운영체제나 하이퍼바이저가 잘게 나눠서, 각 프로그램이나 각 실행 환경이 자기 몫의 자원을 가진 것처럼 보이게 만드는 개념이다.
이 가상화 덕분에 우리는 컴퓨터 한 대로 카카오톡을 하고, 노래도 듣고, 인터넷 창도 여러 개 띄워 놓고, 심지어 코딩까지 할 수 있는 것이다.
이 모든 프로그램들은 자기가 마치 컴퓨터의 유일한 주인인 것처럼 행동한다.
가상화가 필요한 이유
예를 들어 하나의 서버에서 웹서비스, 데이터베이스, 파일 저장소를 각각 운영한다고 해보자.
모두 같은 운영체제 위에서 실행되면 하나가 망가지면 전부 망가질 위험이 있고, 서로 리소스를 잡아먹으면서 충돌할 수 있다.
가상화의 장점
| 항목 | 설명 |
|---|---|
| 격리성 | 서로 다른 환경을 독립적으로 실행 가능 |
| 효율성 | 하나의 장비로 여러 서비스를 동시에 운영 가능 |
| 유연성 | 운영체제나 소프트웨어 버전을 독립적으로 관리 가능 |
| 비용절감 | 장비를 효율적으로 쓰면서도 유지비용은 줄일 수 있음 |
운영체제 수준에서 가장 먼저 만나는 가상화
가상화라는 말을 들으면 보통 VM이나 Docker부터 떠올리기 쉽다.
그런데 운영체제를 공부할 때 가장 먼저 마주치는 가상화는 프로세스와 가상 메모리다.
1. 프로세스
**"내가 CPU를 쓰고 있다"**라는 감각
💡 프로세스란?
프로세스는 실행 중인 프로그램 하나를 운영체제가 감싸서 관리하는 단위이다.
즉, 우리가
hello_world.c파일을 컴파일해서 나온 실행파일을 실행하면, 운영체제는 그걸 하나의 “작업 단위”, 즉 프로세스로 만들어준다.
프로세스는 CPU를 계속 점유하는 것처럼 보이지만,
실제로는 운영체제가 아주 짧은 시간 단위로 CPU를 나눠서 여러 프로세스를 번갈아 실행한다.
이 덕분에 우리는 여러 프로그램을 동시에 실행할 수 있는 거다.
2. 가상 메모리
**"이 주소 공간은 내 것이다"**라는 감각
💡 가상 메모리란?
가상 메모리는 프로세스마다 독립된 메모리 공간을 제공하는 기술이다.
이 덕분에 모든 프로세스는 마치 자기만의 메모리를 독점하고 있는 것처럼 착각하며 실행된다.
운영체제는 각 프로세스에게 가상 메모리라는 독립된 메모리 공간을 통째로 나눠준다.
덕분에 내 프로그램 A가 0x400500 번지에 데이터를 저장하더라도, 다른 프로그램 B가 사용하는 똑같은 0x400500 번지와 충돌하지 않는다.
각자 자신만의 가상 공간을 사용하고, 운영체제가 실제 물리 메모리(RAM)에 알아서 잘 배치해주기 때문이다.
이 가상 메모리 덕분에 프로그래머는 메모리 주소 충돌 걱정 없이 안전하고 편하게 프로그래밍할 수 있다.
이 개념이 서버 환경으로 확장되면
이런 추상화와 격리 개념은 서버 환경에서는 VM, 컨테이너 같은 형태로 확장된다.
1. 전통 방식: 베어메탈 운영
-
하드웨어 위에 OS 하나만 설치
-
모든 소프트웨어가 같은 OS를 공유함
-
→ 하나가 망가지면 전부 망가질 위험
[물리서버]
↓
[운영체제]
↓
[앱1] [앱2] [앱3]
2. 가상 머신(VM, Virtual Machine)
-
하드웨어 위에 하이퍼바이저 설치
-
그 위에 여러 개의 운영체제(VM) 실행
-
각각의 VM은 완전한 독립된 컴퓨터처럼 동작
[물리서버]
↓
[하이퍼바이저]
↓
[VM1] [VM2] [VM3]
각 VM ⟶ [게스트 OS + 앱]
-
장점: 완전한 격리성
-
단점: 각 VM이 게스트 OS까지 포함하므로 상대적으로 무겁다
3. 컨테이너(Container)
-
호스트 OS 커널을 공유하고, 프로세스와 파일 시스템 등을 격리
-
더 가볍고 빠르게 실행됨
-
VM보다 시작이 빠르고 자원 소모도 적음
[물리서버]
↓
[호스트 OS + Docker 엔진]
↓
[컨테이너1] [컨테이너2] [컨테이너3]
각 컨테이너 ⟶ [앱 + 라이브러리]
- 대표 기술: Docker
참고로 Kubernetes는 컨테이너 자체가 아니라, 여러 컨테이너를 배포하고 운영하는 오케스트레이션 도구에 가깝다.
결국 가상화 기술은 "같은 물리 자원을 여러 실행 단위가 안전하게 나눠 쓰게 만들려면 어떻게 해야 할까?"라는 질문에서 출발했다고 볼 수 있다.
다시 정리하면, 가상화는 한정된 물리 자원을 추상화하고 격리해서 여러 프로그램이나 실행 환경이 서로 간섭하지 않도록 만드는 방식이다.