운영체제 | Anonymous Page

성수당·2025년 9월 26일

운영체제

목록 보기
27/31
post-thumbnail

🥔 Anonymous Page란?

Anonymous Page는 파일 시스템과 연결되지 않은 사용자 공간 페이지를 의미한다. 즉, 디스크에 매핑된 backing file이 없는 메모리 페이지로, 사용자의 동적 메모리 할당(malloc, brk, mmap with MAP_ANONYMOUS) 등에 의해 생성된다.

이 페이지는 초기 내용이 0으로 채워진다(= demand-zero) 는 특징이 있으며, 파일로부터 로드된 페이지와는 달리 스왑 공간에만 백업된다.

🥔 어디서 Anonymous Page가 쓰일까?

✅ Heap 메모리 영역 (malloc, sbrk)

  • 사용자 프로그램이 동적으로 메모리를 요청할 때 힙이 확장되며 anonymous page가 할당됨

✅ Stack 영역

  • 함수 호출 시 지역 변수 저장 등에 사용되는 영역도 anonymous page로 확장됨

mmap with MAP_ANONYMOUS

  • 특정 파일이 아닌 메모리 자체를 매핑하는 경우에도 anonymous page가 생성됨

✅ 공유 메모리 (shm_open, mmap)

  • 여러 프로세스가 공유하는 메모리 공간도 일반적으로 backing file이 없는 anonymous 영역

🥔 Anonymous Page의 특징

항목내용
초기값Demand-zero: 최초 접근 시 0으로 채워짐
백업 위치스왑 공간 (swap disk)
파일 매핑없음
예시malloc, stack, MAP_ANONYMOUS
파일 재로딩불가능 (파일이 없으므로)
Dirty 관리수정 여부와 무관하게 교체 시 swap-out

🥔 Anonymous Page vs File-backed Page

항목Anonymous PageFile-backed Page
초기 로딩0으로 초기화파일에서 로딩
백업 저장소Swap (스왑 공간)원본 파일 + Swap
재로딩불가능파일에서 재로딩 가능
예시malloc, stack 등mmap("file.txt")

🥔 구현 관점 (Pintos 등에서)

Pintos Project 3 이상에서는 vm_entry 또는 page 구조체에서 anonymous page와 file-backed page를 구분하여 처리한다.

구조체 예시:

enum vm_type {
  VM_ANON,   // Anonymous page
  VM_FILE,   // File-backed page
  ...
};

struct page {
  enum vm_type type;
  struct frame *frame;
  ...
};

처리 흐름:

  1. malloc → anonymous page 생성 → vm_alloc_page(VM_ANON)
  2. 접근 시 page fault 발생 → demand-zero → 프레임 할당 + 0 초기화
  3. 스왑 아웃 → swap space에 쓰기
  4. 스왑 인 → swap space에서 복구

🥔 왜 Anonymous Page가 중요할까?

  • 현대 운영체제에서 대부분의 사용자 메모리는 anonymous page로 구성된다.
  • Stack, Heap, Shared Memory 등은 모두 anonymous이며, 프로그램 실행 중 동적으로 변화한다.
  • 페이지 교체 정책과 스왑 시스템은 대부분 anonymous page 관리에 집중됨
  • 파일과 연결되지 않아, 교체 시 무조건 스왑 공간 사용

🥔 마무리 요약

  • Anonymous Page는 파일 없이 생성되는 사용자 메모리 페이지이며, 초기에는 0으로 채워진다.
  • 스왑 공간에만 백업되며, malloc, stack, MAP_ANONYMOUS 등의 사용 시 생성된다.
  • 가상 메모리 관리에서 매우 중요한 역할을 하며, 파일 페이지와 구분되어 다뤄진다.
profile
말하는 감자🥔

0개의 댓글