1 분 소요

가상 메모리

image

  • (멀티테스킹) 운영체제는 각 프로세스마다 독립적인 고유 공간(메모리)를 갖도록 보장한다. 이때 메모리는 가상 메모리를 의미한다.
  • 가상 메모리란 RAM(실제 메모리)과 하드디스크를 합쳐서 마치 하나의 메모리처럼 사용하도록 추상화해 놓은 것.
    • 32bit 운영체제일 경우, 운영체제가 프로세스 하나 당 4GB를 사용할 수 있다고 알려줌 (사실 4GB만큼의 공간 제공 못함. 하지만 프로세스 역시 한번에 4GB를 동시에 사용하지는 못함. 따라서 당장 실행에 필요한 부분만 메모리(RAM)에 올리고 나머지 부분은 하드디스크 스왑공간에 저장되어 있음)

가상 머신

  • 클라우드 컴퓨팅 업체들은 고성능 컴퓨터의 능력을 조금씩 분할하여 한 대의 물리적인 컴퓨터를 여러 사용자들이 공유해서 사용하게 하는데, 각 사용자 입장에서는 자신만의 독자적인 컴퓨터라 존재하는 것처럼 인식된다.
  • 이렇게 사용자가 느끼는 독자적인 컴퓨터를 가상 머신(virtual machine)이라고 부르며, 이를 지원해 주는 기술을 가상화(virtualization) 기술이라고 부른다.

VMWARE

  • 컴퓨터당 물리적인 NIC 카드는 1개 밖에 없음. 그리고 그 NIC 카드를 동작시키는 driver도 1개 존재.
  • 하지만 만약 VMware를 설치하면 Virtual NIC Driver(VMnet)라는 driver들이 여러 개 생긴다.
  • 그리고 각 VMnet 위에 guest 컴퓨터를 구현한다. (h/w ~ kernel ~ user mode)
    • 이때 guest 컴퓨터의 hw단의 NIC는 소프트웨어로 구현한 것이다. (= sw NIC)
  • 하지만 실제 물리적인 NIC 카드는 1개인데, guest 컴퓨터들은 어떻게 인터넷을 이용하는 걸까?
    • s/w NIC은 각각 Virtual NIC Driver에 연결된다.
    • 즉 s/w NIC은 Virtual NIC Driver를 마치 L2 스위치 처럼 쓴다.
  • 동작 경로
    • GuestOS가 인터넷에 접속할 때, 자신의 SW NIC → VMnet#n으로 접근하고, VMnet#n은 다시 VMnet#0으로 접근한다. 이때 VMnet#0이 공유기(NAT)처럼 동작함.
    • VMnet#0은 HostOS의 Driver를 거쳐 Host의 NIC과 통신함.
  • 결과적으로, 가상화 기술을 사용해서 컴퓨터 한대를 여러 대 처럼 사용할 수 있게 됨.

image

효율성?

  • 만약 우리가 VMware를 사용한다고 할 때, 우리가 사용하는 프로세스는 몇 개인가?

    → host에서 띠우고 있는 Process 1개, Host OS(window) 1개, guest os#1의 user process, linux os, swNIC 까지… guestOS가 2개라면 배로 늘어남 → 너무 많은 메모리 필요

  • 근데 우리는 왜 guest os를 사용하는가? 그냥 그 프로그램을 사용하려는데 window os 말고 linux os가 필요하기 때문임.
  • 하지만 guest os는 그냥 컴퓨터 자체를 소프트웨어로 구현함. 우리가 필요한 것은 그냥 프로세스를 구동할 수 있는 os 만 필요하지 컴퓨터까지 필요한 것이 아님.
  • 위 그림에서 4,5,7,8번이 꼭 필요한가? → 도커의 등장 이유

Docker

image

  • Container Runtime이 OS 역할을 해줌
    • 각 컨테이너가 kernel 및 하드웨어 자원을 필요로하면 Container Runtime에 요청
    • Container Runtime이 host OS와 통신
  • OS도 일종의 프로그램임. Container Runtime이 이 OS를 여러 번 실행한 것 처럼 각각의 컨테이너가 독립적으로 os를 활용할 수 있도록 해줌. (마치 word 파일 여러 개를 띄우고 각각 작업하듯이)