백엔드 개발자

가상메모리 본문

CS/운영체제

가상메모리

임잠탱 2024. 12. 5. 19:52

가상 메모리란?

메모리 공간을 추상화해서 제공하는 것이라고 할 수 있다.
프로세스는 RAM에 올라와서 실행이 되는 것인데, 이 메모리 공간(RAM)은 보호 영역에서 운영체제가 관리한다. 그렇기 때문에 운영체제에서 이러한 메모리 영역을 추상화하여 제공하고 각 프로세스에 독립적인 메모리 주소 공간을 제공하여 메모리를 보호한다. 또한, 실제 메모리 보다 큰 메모리로 보이도록 하고, 실제보다 더 큰 메모리 사용을 가능하게 만들어주는 방법이다.

요구 페이징

가상메모리의 핵심 요소 중 하나는 필요한 메모리만 올려서 실행하여 실제보다 더 큰 메모리 사용이 가능하도록 해주는 것이다.
예를 들어 어떤 프로그램은 3G의 메모리를 사용해야 하는데 실제 메모리 크기가 2G라면 전체 데이터를 모두 올리지 못할 것이다. 또, 멀티프로그래밍 환경에서는 여러 프로세스를 메모리에 올려 실행하는데 모든 데이터를 올리지 않고, 필요한 데이터만 올려서 사용하게 된다.
(운영체제 자체도 프로세스인데, 여기서 커널은 운영체제의 핵심 요소들이 모인 것이고 항상 메모리에 올라와 있는 영역이라고 할 수 있다.)

이렇게 처음부터 모든 데이터가 메모리에 적재되어 있는 것이 아니라 CPU가 요청할 때 프로세스의 데이터를 메모리에 올리는 것을 요구 페이징이라고 하고, 각 프로세스의 가상메모리는 페이지 테이블로 관리되며, 가상 주소와 실제 물리 주소를 매핑한 정보를 가지고 있다.

페이지 테이블

페이지 테이블에서는 가상주소와, 실제 메모리 주소 정보가 매핑이 되어 있고, 이를 통해 실제 메모리 주소에 접근할 수 있다.
참조하는 가상 주소가 실제 물리 메모리에 없을 때 발생하는 예외를 페이지 폴트라고 한다. 이때 스와핑이 일어난다.

MMU (Memory Management Unit)

MMU는 메모리를 관리하는 핵심 하드웨어 장치인데, 페이지 테이블을 참조하여 가상 주소를 물리 주소로 변환해 주고, 메모리를 보호하는 기능을 수행한다.
접근 권한이 없는 페이지에 대한 접근을 금지하거나, 페이지 폴트 발생 시 OS에 알려 처리(스와핑과 페이지 교체) 하도록 함.
또, TLB는 페이지 테이블의 일부를 저장하는 캐시 메모리인데, TLB를 사용하여 자주 사용되는 주소 변환을 빠르게 처리한다.

페이징

위에서 페이지 테이블을 언급하였는데, 페이징은 메모리 관리 방식 중 하나이다.
가상 메모리와 물리 메모리 공간을 일정한 고정 크기의 작은 블록(보통 4KB)으로 나눠 관리하는데, 가상 메모리의 블록은 페이지, 물리 메모리의 블록은 프레임이라고 한다. 페이징 기법은 메모리를 물리 메모리상에서 연속적으로 저장될 필요가 없게 해주기 때문에 메모리 파편화가 발생하지 않게 해주어 외부 단편화를 해결해 준다. (페이지 크기 예를 들어 4KB보다 작은 데이터를 저장할 경우에는 남는 공간이 내부 단편화로 이어진다.)

이렇게 고정된 크기의 블록으로 나뉘는게 아닌, 의미 있는 논리적 단위로 나누는 방식을 세그멘테이션이라고 한다.
메모리를 코드, 데이터 영역으로 나누는 것처럼 논리적 단위로 나눌 필요가 있을 때 사용할 수 있는데, 현대 운영체제에서는 보통 메모리 영역을 논리적으로 나누지만, 페이지 단위로 관리한다.

페이지 교체 알고리즘

가상 주소를 참조할 때 실제 물리 메모리에 부재하면 뜨는 인터럽트를 페이지 폴트(Page Faults)라고 했다.
실제로는 페이지 폴트가 일어나면 스와핑(Swap In) 또는 페이지 교체가 일어나서 정상적으로 동작하는 것처럼 보이지만, 페이지 폴트가 자주 일어나면 성능이 많이 저하되기 때문에 적절한 페이지 교체 알고리즘을 선택할 필요가 있다.
페이지 교체 알고리즘은 메모리가 꽉 차있을 때 기존에 있던 페이지 중 어떤 것과 교체할지 선택하는 방법이다.

  • FIFO (First-In, First-Out)
    • 가장 오래된 페이지(먼저 메모리에 들어온 페이지)를 교체. 구현이 간단하지만 성능이 낮을 수 있음.
  • LRU (Least Recently Used)
    • 가장 오래 사용되지 않은 페이지를 교체. 최근 접근 데이터를 기반으로 교체 결정을 내려 성능이 우수.
    • 실제 시스템에서 가장 많이 사용된다. TLB와 같은 캐시 메모리에도 사용되는 알고리즘이다.
  • LFU (Least Frequently Used)
    • 참조 횟수가 가장 적은 페이지를 교체. 자주 사용되지 않는 페이지를 제거하여 메모리 활용 최적화.
  • Optimal (OPT)
    • 앞으로 가장 오랫동안 사용되지 않을 페이지를 교체. 이상적인 알고리즘이지만 실제 구현은 어려움. (연구목적으로 다른 알고리즘의 성능 비교 기준으로 사용됨)

'CS > 운영체제' 카테고리의 다른 글

뮤텍스, 세마포어, 데드락  (1) 2024.12.12
프로세스 & 스레드  (0) 2024.11.28
Comments