티스토리 뷰

🟩 학습 목표

  • 연속 메모리 할당의 한계점인 외부 단편화 발생 원인을 분석한다.
  • 가상 메모리와 페이징 기법의 메커니즘 및 주소 변환 과정을 이해한다.
  • 페이지 테이블, TLB, 교체 알고리즘을 통한 메모리 최적화 방식을 파악한다.

🟧 1. 연속 메모리 할당과 스와핑

🟦 연속 메모리 할당 (Contiguous Memory Allocation)

프로세스를 메모리에 연속적인 주소 공간으로 배치하는 방식이다. 빈 공간 할당 전략에는 순차 검색 후 할당하는 최초 적합(First Fit), 가장 작은 공간을 찾는 최적 적합(Best Fit), 가장 큰 공간에 배치하는 **최악 적합(Worst Fit)**이 존재한다.

🟦 스와핑 (Swapping)

현재 실행되지 않는 프로세스를 보조기억장치의 스왑 영역으로 내보내고(Swap-out), 필요한 프로세스를 메모리로 들여오는(Swap-in) 기법이다. 이를 통해 실제 물리 메모리보다 큰 프로세스들을 동시에 실행하는 효과를 얻는다.

🟦 외부 단편화 (External Fragmentation)

프로세스들이 빈번하게 할당 및 해제되면서 메모리 사이에 작은 빈 공간들이 산재하는 현상이다. 총 빈 공간의 합은 충분하더라도 연속된 공간이 아니기 때문에 프로세스를 적재하지 못하는 메모리 낭비가 발생한다. 이를 해결하기 위해 메모리 압축(Compaction)을 수행할 수 있으나 시스템 중단 및 오버헤드가 크다는 단점이 있다.


🟧 2. 가상 메모리와 페이징 (Paging)

🟦 가상 메모리 (Virtual Memory)

실행에 필요한 부분만 메모리에 적재하여 실제 물리 메모리 크기보다 더 큰 프로세스를 실행할 수 있게 하는 기술이다. 프로그램 전체가 물리 메모리에 꽉 차 있을 필요가 없으므로 효율적인 메모리 운용이 가능하다.

🟦 페이징 (Paging) 기법

프로세스의 논리 주소 공간을 **페이지(Page)**로, 물리 주소 공간을 **프레임(Frame)**으로 일정하게 나누어 불연속적으로 할당하는 방식이다. 외부 단편화 문제를 근본적으로 해결한다.

🟦 내부 단편화 (Internal Fragmentation)

프로세스 크기가 페이지 크기의 배수가 아닐 경우, 마지막 조각이 페이지 크기보다 작아 할당된 프레임 내부에 사용되지 않는 빈 공간이 생기는 현상이다. 페이지 크기를 작게 설정하면 내부 단편화가 줄어들지만, 페이지 테이블의 크기가 커져 메모리 낭비(오버헤드)가 발생하는 트레이드오프가 존재한다.


🟧 3. 주소 변환과 TLB 캐시

🟦 페이지 테이블 (Page Table)

논리 주소를 물리 주소로 매핑하기 위한 자료구조다. 비록 물리 메모리에는 프로세스가 흩어져 있더라도 CPU가 바라보는 논리 주소에서는 연속적으로 배치된 것처럼 보이게 만든다. 현재 실행 중인 프로세스의 페이지 테이블 위치는 PTBR(Page Table Base Register)이 가리킨다.

🟦 TLB (Translation Lookaside Buffer)

페이지 테이블이 메모리에 위치함에 따라 발생하는 성능 저하(메모리 2회 접근)를 방지하기 위한 고속 캐시 메모리다. 참조 지역성에 따라 자주 사용하는 페이지 테이블 엔트리(PTE)를 저장한다. TLB 히트 시 물리 주소로 즉시 변환되나, TLB 미스 시에는 메모리에 있는 페이지 테이블에 직접 접근해야 한다.


🟧 4. 페이지 테이블 엔트리 (PTE)의 제어 비트

페이지 테이블 엔트리에는 주소 정보 외에도 관리를 위한 제어 정보가 포함된다.

  • 유효 비트(Valid Bit): 페이지가 메모리에 적재되어 있는지 여부를 표시한다. 0일 경우 접근 시 **페이지 폴트(Page Fault)**가 발생한다.
  • 보호 비트(Protection Bit): 해당 페이지의 읽기, 쓰기, 실행 권한을 제한하여 프로세스를 보호한다.
  • 참조 비트(Reference Bit): 적재 이후 해당 페이지에 접근한 적이 있는지 기록한다.
  • 수정 비트(Modified/Dirty Bit): 데이터 수정 여부를 알려준다. 1일 경우 스왑 아웃 시 보조기억장치에 변경된 내용을 기록해야 한다.

🟧 5. 페이지 교체 알고리즘

메모리가 가득 찼을 때 어떤 페이지를 스왑 영역으로 보낼지 결정하는 전략이다.

알고리즘 설명 특징
FIFO 가장 먼저 메모리에 적재된 페이지를 교체한다. 구현이 단순하나 자주 사용되는 페이지도 삭제될 우려가 있다.
최적(Optimal) 향후 가장 오랫동안 사용되지 않을 페이지를 교체한다. 이론상 최저 폴트율을 보장하지만 미래 예측이 불가하여 구현이 불가능하다.
LRU 과거 가장 오랫동안 사용되지 않은 페이지를 교체한다. 참조 지역성에 근거하며 현실적으로 가장 효율적인 방식으로 평가받는다.

🟧 6. 스래싱 (Thrashing)과 프레임 할당

🟦 스래싱 현상

프로세스가 실제 연산 시간보다 페이지 교체에 더 많은 시간을 소요하여 시스템 전체의 성능이 급격히 저하되는 상태다. 과도한 멀티프로그래밍으로 인해 각 프로세스에 할당된 프레임이 부족할 때 발생한다.

🟦 프레임 할당 방식

스래싱을 방지하기 위해 프로세스에 적절한 프레임을 배분해야 한다.

  • 정적 할당: 모든 프로세스에 동일한 프레임을 주는 균등 할당과 프로세스 크기에 비례하는 비례 할당이 있다.
  • 동적 할당: 참조 지역성을 활용한 작업 집합(Working Set) 모델과 페이지 폴트 빈도의 상한/하한선을 정하는 PFF(Page Fault Frequency) 모델이 존재한다.

🟧 핵심 요약

가상 메모리는 물리적 메모리의 한계를 보조기억장치로 보완하여 대규모 프로세스 실행을 가능하게 하는 핵심 기술이다. 페이징 기법은 외부 단편화를 해결하지만 내부 단편화가 발생하며, 이를 보완하기 위해 페이지 테이블과 TLB 캐시를 활용한다. 시스템의 성능 저하를 방지하기 위해서는 효율적인 페이지 교체 알고리즘과 프로세스별 적절한 프레임 할당 전략이 필수적이다.