운영체제 | File-backed Page

성수당·2025년 9월 26일

운영체제

목록 보기
29/31
post-thumbnail

🥔 File-backed Page란?

운영체제에서 File-backed Page란, 메모리 페이지가 파일 시스템의 특정 파일로부터 초기화되는 페이지를 의미한다. 이는 프로세스의 실행 파일, 라이브러리, 읽기 전용 데이터 등의 메모리 매핑 영역에서 사용된다.

즉, 이 페이지는 메모리에 적재되기 전 원본이 파일에 존재하며, 필요 시 디스크에서 해당 내용을 읽어 메모리에 적재한다.

🥔 Anonymous Page와의 차이점

구분Anonymous PageFile-backed Page
원본없음 (초기화 없이 생성됨)파일 시스템 상의 파일
재사용불가능동일한 파일 매핑 시 공유 가능
스왑 처리Swap 디스크에 저장필요 시 파일로부터 다시 로드
예시힙, 스택, mmap 익명 매핑실행 코드, 읽기 전용 데이터

File-backed Page는 공유 가능, 불필요한 스왑 최소화, 효율적인 로딩이라는 장점이 있다.

🥔 동작 방식

File-backed Page는 보통 다음과 같은 흐름으로 동작한다:

  1. mmap() 등을 통해 파일을 메모리에 매핑한다.
  2. 페이지에 접근하면 Page Fault가 발생한다.
  3. 커널은 디스크에서 해당 파일 내용을 읽어와 물리 메모리에 올린다.
  4. 페이지 테이블에 매핑이 완료되며 이후 접근이 가능해진다.

이와 같은 방식은 Lazy Loading 기법과 결합되어, 실제로 접근하는 시점에만 디스크 I/O가 발생한다.

🥔 구현 요소 예시 (Pintos 기반)

Pintos 프로젝트에서는 File-backed Page를 다음과 같이 표현한다:

struct file_page {
  struct file *file;      // 매핑된 파일 객체
  off_t offset;           // 파일 내에서의 오프셋
  size_t read_bytes;      // 실제 읽어야 하는 바이트 수
  size_t zero_bytes;      // 0으로 채워야 하는 바이트 수
  bool writable;          // 쓰기 가능 여부
};

이를 통해 페이지를 다시 로딩하거나, 파일에서 읽어오는 동작을 구현할 수 있다.

🥔 Lazy Loading과의 연계

File-backed Page는 대부분 Lazy Loading 기반으로 작동한다. 초기에는 메모리를 할당하지 않고, 페이지에 실제 접근할 때 파일 내용을 읽어오는 구조를 따른다.

  • 초기 메모리 낭비가 줄어든다.
  • 불필요한 페이지 로딩을 방지한다.
  • 페이지 접근 시 처리하므로 성능 최적화에 유리하다.

🥔 Page Eviction과 File-backed Page

  • File-backed Page는 메모리에서 제거되더라도, 원본이 파일에 존재하므로 다시 로딩하면 된다.
  • 따라서 스왑 공간 사용이 최소화된다.
  • 단, 해당 페이지가 수정되었을 경우(Dirty Bit가 켜졌을 경우), write-back을 통해 수정된 내용을 파일에 반영해야 한다.

🥔 시스템 호출 예시 (Linux)

// 파일을 메모리에 매핑
void *addr = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0);

// 매핑 해제
munmap(addr, size);

Linux에서는 mmap() 시스템 콜을 통해 File-backed Page를 만들 수 있으며, 이를 통해 프로세스가 파일 내용을 직접 메모리처럼 사용할 수 있게 된다.

🥔 마무리 요약

  • File-backed Page는 파일 내용 기반으로 초기화된 메모리 페이지이다.
  • Lazy Loading과 결합하여 효율적인 메모리 관리가 가능하다.
  • 수정되지 않은 페이지는 다시 로딩하면 되므로 Swap 공간을 차지하지 않는다.
  • Linux에서는 mmap() 등을 통해 구현되며, Pintos 등의 프로젝트에서도 중요한 개념으로 등장한다.
profile
말하는 감자🥔

0개의 댓글