가상 메모리란?

Damongsanga·2024년 3월 4일
0

이번 프로젝트에서 CI/CD를 맡다보니 가상 메모리 부분에 대해 잘 모르는 것이 많다고 생각하여 널널한 개발자님의 유튜브 강의 몇개를 보고 정리한 내용이다. 가상 메모리가 왜 필요한지, 어떻게 사용되는지 아주 쉽게 설명해주셨으니 가상 메모리를 전혀 모르는 분들이라면 가볍게 보는걸 추천드린다 :)

가상 메모리 (널널한 개발자 1 ~ 4)

https://www.youtube.com/watch?v=dPoNLIPo3_8

왜 사용하는가?

  • 예전에는 물리 메모리 안에 OS, 프로세스가 모두 같이 관리되었음

  • OS를 통하지 않고 프로세스가 생성, 소멸되다보니 프로세스가 죽으면 프로그램이 다운되어 버리는 문제가 발생

  • 그래서 OS를 기반으로 가상 메모리를 만들어서 프로세스에게 메모리를 할당, 회수 할 수 있도록 함

    • OS를 통해서 만들어야 프로세스에서 오류가 발생해도 메모리를 회수할 수 있음 (어느 메모리에 할당 되어있는지 암)

    • 사용자나 애플리케이션단 프로세스가 직접 메모리에 접근하는 것은 전체 시스템에 위협요소임

SWAP IN & SWAP OUT

  • RAM 영역이 부족해질 때, 비효율적으로 사용하고 있을 때 등에 자주 사용되는 프로세스를 RAM으로 올리고 자주 사용되지 않는 프로세스를 HDD로 넘기는 과정

  • OS가 담당한다

  • DISC I/O로 인해 HDD에 있는 프로세스는 느리지만 작동은 한다는게 핵심

  • 추상화 과정으로 사용자는 해당 프로세스가 RAM에 있는지 2차 메모리에 있는지 모름. 알 필요도 없음

해당 내용은 AWS 프리티어로 jenkins CI/CD를 테스트 해보는 과정에서 RAM이 1G만 제공되기 때문에 swap 메모리를 늘려서 사용해야 했었다. 이 과정에서 swap 메모리 개념을 잡을 수 있었다.

IPC (Inter Proccess Communication)

  • 프로세스들 사이에 서로 데이터를 주고받는 행위 또는 그에 대한 방법이나 경로를 의미

  • 생각보다 어려운 개념이 아님

  • 원래 프로세스간은 영향을 줄 수 없어야 한다

    • 철수 집에서 물건을 옮겼다고 영희 집이 무너지면 안됨
  • 그러나 때로는 프로세스간 데이터를 공유해야하는 경우가 있는데

    • 공통으로 해당되는 특별한 메모리공간을 부여해서 여러 프로세스가 맵핑되도록 하면 됨!
    • 이것이 IPC
  • 가장 흔히 쓰는게 복사 붙여넣기이다

    • 생각해보면 메모장에 있는 글을 노션에 옮기는 것도 데이터 공유다!
    • 물론 이건 OS에서 할당한 특별한 메모리 공간에서 이루어지기는 한다

내가 최근에 배운 내용중에서 Docker.sock 을 -v로 볼륨마운트 하는 것 또한 같은 과정이라고 생각한다. 호스트에서 사용하는 docker.sock과 컨테이너의 docker.sock을 공유하여 컨테이너 내에서 호스트 docker deamon을 컨트롤 할 수 있는 방식에도 해당 개념이 사용된다 (docker out of docker).

여담으로 jenkins로 빌드하는 과정에서 컨테이너 별로 파일을 영구적으로 저장해야 하거나 로그를 기록하기 위해 호스트에 특정 디렉토리를 volume mount하여 사용하기도 한다. 해당 내용에 대해서는 다음 포스트에서 더 자세히 기록하겠다!

profile
향유하는 개발자

0개의 댓글