PromleeBlog
sitemap
aboutMe

posting thumbnail
가상 메모리의 (페이징과 페이지 교체 알고리즘)
Virtual Memory (Paging and Page Replacement)

📅

🚀

들어가기 전에 🔗

지난 시간에는 프로그램이 실행되는 공간인 메모리의 스택과 힙에 대해 알아보았습니다.
오늘은 그보다 더 근본적인, 운영체제가 메모리를 어떻게 관리하고 착각하게 만드는지에 대한 이야기, 바로
가상 메모리(Virtual Memory)
에 대해 알아보겠습니다.

가상 메모리는 현대 운영체제의 핵심 중의 핵심입니다.
이 기술 덕분에 우리는 실제 물리 메모리(RAM)의 크기보다 더 큰 프로그램을 실행할 수 있고, 여러 프로그램이 서로의 메모리를 침범하지 않고 안전하게 동작할 수 있습니다.

🚀

문제의 시작: 물리 메모리의 한계 🔗

과거의 컴퓨터는 프로그램을 실행할 때, 프로그램 전체를 물리 메모리(RAM)에 한 번에 올려야 했습니다.
이 방식은 두 가지 큰 문제를 가집니다.
  1. 메모리 크기의 한계
    만약 램이 4GB인데 8GB짜리 프로그램을 실행하려면, 아예 실행조차 할 수 없었습니다.
  2. 보안 및 안정성 문제
    여러 프로그램을 동시에 실행할 때, 한 프로그램이 다른 프로그램의 메모리 영역을 실수로 침범하여 데이터를 손상시키거나 전체 시스템을 멈추게 할 수 있었습니다.

이 문제를 해결하기 위해, 운영체제는 개발자와 프로그램에게
거대한 가짜 메모리
를 제공하기로 합니다.
이것이 바로
가상 메모리
입니다.

🚀

가상 메모리 🔗

가상 메모리는 각 프로세스에게
실제 물리 메모리와는 독립적인, 매우 크고 연속적인 자신만의 메모리 공간
이 있는 것처럼
보여주는
기술입니다.

이처럼, 가상 메모리 기술은 프로그램의 모든 부분을 메모리에 올리는 대신,
지금 당장 실행에 필요한 부분만 물리 메모리에 올리고, 나머지는 하드디스크와 같은 보조기억장치에 보관
합니다.
그리고 이 둘 사이의 주소를 서로 바꿔 줍니다.

이 덕분에, 각 프로세스는 다른 프로세스와 완전히 분리된
독립적인
메모리 공간을 갖는 것처럼 느끼게 되어 안정성이 크게 향상됩니다.

🚀

페이징 (Paging) 🔗

운영체제는 이것을 어떻게 구현할까요?
바로
페이징
이라는 기법을 사용합니다.

  1. 페이지(Page)와 프레임(Frame)
    운영체제는
    가상 주소 공간
    페이지(Page)
    라는 고정된 크기의 작은 조각으로 나눕니다.
    그리고
    물리 메모리
    또한 페이지와 똑같은 크기의
    프레임(Frame)
    이라는 조각으로 나눕니다.
  2. 페이지 테이블(Page Table)
    운영체제는 각 프로세스마다 페이지 테이블이라는 지도책을 가지고 있습니다.
    이 지도책에는
    어떤 페이지가 어떤 프레임에 저장되어 있는지
    에 대한 정보가 기록되어 있습니다.
  3. 주소 변환
    CPU가 특정 가상 주소에 접근하려고 하면, 하드웨어 장치인
    MMU(Memory Management Unit)
    가 페이지 테이블을 참조하여 실제 물리 주소로 순식간에 변환해 줍니다.
Paging
Paging

🚀

페이지 교체 알고리즘 🔗

책상(물리 메모리)이 가득 찼는데, 도서관(디스크)에서 새로운 책(페이지)을 가져와야 한다면 어떻게 해야 할까요?
당연히, 책상 위에 있는 책 중 하나를 치우고 그 자리에 새 책을 놓아야 합니다.

이처럼, 물리 메모리의 프레임이 모두 사용 중일 때 새로운 페이지를 가져와야 하는 상황을
페이지 폴트(Page Fault)
라고 합니다.
페이지 폴트가 발생하면, 운영체제는 물리 메모리에 있는 기존 페이지 중 하나를 디스크로 내보내고(Swap-out), 새로운 페이지를 그 자리에 가져와야(Swap-in) 합니다.

이때,
어떤 페이지를 내보낼 것인가
를 결정하는 규칙이 바로
페이지 교체 알고리즘
입니다.
가장 좋은 알고리즘은
앞으로 가장 오랫동안 사용되지 않을
페이지를 예측하여 내보내는 것입니다.

LRU (Least Recently Used) 🔗

LRU
가장 오랫동안 사용되지 않은 페이지를 교체
하는, 가장 유명하고 직관적인 알고리즘입니다.
최근에 사용된 페이지는 앞으로도 다시 사용될 가능성이 높다는
시간 지역성(Temporal Locality)
원리에 기반합니다.

이 외에도 가장 먼저 들어온 페이지를 교체하는 FIFO(First-In, First-Out) 등 여러 알고리즘이 있지만, LRU가 가장 널리 알려지고 효과적인 방식 중 하나입니다.

🚀

주요 면접 예상 질문 🔗

가상 메모리는 운영체제 지식의 핵심이므로, 그 원리를 깊이 있게 묻는 질문이 반드시 나옵니다.

1. 가상 메모리가 왜 필요한가요? 그 장점을 설명해주세요. 🔗

가상 메모리가 해결하는 근본적인 문제들을 설명해야 합니다.
가상 메모리는
물리 메모리의 크기 제약을 극복
하고,
프로세스를 안전하게 격리
하기 위해 필요합니다.
첫째, 프로그램의 일부만 물리 메모리에 올려놓고 나머지는 디스크에 두어, 실제 램 크기보다
더 큰
프로그램을 실행할 수 있게 해줍니다.
둘째, 각 프로세스에게 독립적인 가상 주소 공간을 제공하여, 다른 프로세스의 메모리 영역을 침범할 수 없도록 만들어 시스템 전체의
안정성
을 크게 높여줍니다.

2. 페이징 시스템에서 페이지 폴트(Page Fault)란 무엇이며, 어떤 과정으로 처리되나요? 🔗

내부 동작 원리를 순서대로 설명하는 것이 중요합니다.
페이지 폴트는 CPU가 접근하려는 페이지가 현재 물리 메모리에 없는 경우 발생하는
일종의 인터럽트
입니다.
처리 과정은 다음과 같습니다.
  1. CPU는 MMU를 통해 주소 변환을 시도하지만, 페이지 테이블에 해당 페이지가 없음을 확인하고 운영체제에 트랩(Trap)을 겁니다.
  2. 운영체제는 해당 페이지가 디스크 어디에 있는지 찾습니다.
  3. 물리 메모리에 빈 프레임이 없다면, 페이지 교체 알고리즘(예:
    LRU
    )에 따라 기존 페이지 하나를 디스크로 내보냅니다.
  4. 비워진 프레임에 디스크에서 가져온 새 페이지를 로드하고, 페이지 테이블을 최신 정보로 업데이트합니다.
  5. 마지막으로, 중단되었던 명령을 다시 실행합니다.

3. 페이징과 세그멘테이션 기법을 비교 설명해주세요. 🔗

두 기법의 핵심적인 차이를 여러 관점에서 설명하는 것이 중요합니다.
페이징과 세그멘테이션은 가상 메모리를 관리하는 두 가지 대표적인 기법입니다.
가장 큰 차이는
메모리를 나누는 단위
에 있습니다.
세그멘테이션
은 코드, 데이터, 스택처럼
의미 있는 논리적 단위
로,
서로 다른 크기
의 세그먼트로 나눕니다.
이는 보호와 공유에 유리하지만,
외부 단편화
문제가 발생할 수 있습니다.
반면,
페이징
은 논리적 의미와 상관없이
모두 동일한 고정 크기
의 페이지로 나눕니다.
이는 메모리 관리가 용이하고 외부 단편화가 없다는 장점이 있지만,
내부 단편화
가 발생할 수 있습니다.
현대 운영체제는 보통 이 두 가지를 결합한
페이지드 세그멘테이션
방식을 사용합니다.

🚀

결론 🔗

오늘은 가상 메모리에 대해 알아보았습니다.

참고 🔗