크래프톤 정글(PintOS WEEK 9 ~ 14)

File-backed Page

devkty 2025. 6. 8. 00:59
728x90

File-backed Page

File-backed Page는 파일 내용을 메모리에 매핑하여 사용하는 페이지 입니다. 즉, 특정 파일의 일부가 가상 주소 공간에 직접 연결되어, 메모리처럼 접근 가능한 구조입니다.
→ 디스크의 파일 내용을 메모리에 올린 것이라고 이해하면 됩니다.

필요성

  • 프로그램 실행: 실행파일(ELF)의 코드 / 데이터를 메모리에 매핑합니다. ( exec() )
  • 공간 절약: 여러 프로세스가 같은 파일 내용을 공유 가능합니다. (공용 C 라이브러리 등)
  • 지연 로딩: 파일 내용을 미리 다 읽지 않고, 접근할 때만 페이지 폴트로 로딩합니다.
  • mmap 구현: 사용자 요청으로 파일을 메모리에 매핑합니다.

흐름

  1. exec()이 ELF 파일을 파싱합니다.
  2. load_segment()에서 각 segment를 file-backed page로 예약합니다.
  3. 실제 접근이 발생하면 다음과 같은 과정으로 진행됩니다.
    • Page Fault → file_backed_initializer() 호출 → file_read_at()으로 파일 내용을 읽어서 frame에 적재 → 페이지 테이블에 매핑 (pml4_set_page())

Pintos에서…

관련 구조체는 다음과 같습니다.

구조체 위치 설명
struct page vm/page.h 공통 페이지 정보
struct file_page vm/file.h 파일 기반 페이지의 특화 정보
struct file * filesys/file.h 백업으로 사용할 파일 핸들
- 파일 핸들: page -> file.file    
- 읽을 바이트 수, 오프셋 등: file_page 내부에 저장    

swap과의 차이점

항목 File-backed Page Anonymous Page
백업 위치 원본 파일 없음 (→ swap 사용)
eviction 시 수정 안 됐으면 discard, 됐으면 write back 항상 swap-out
재로딩 방법 다시 파일에서 읽기 swap에서 읽기
write 필요 여부 dirty일 때만 디스크에 씀 항상 쓰기 필요

수정된 페이지는 어떻게 처리하는가?

  • 페이지에 쓰기(write)가 발생하면 pml4_is_dirty()로 확인합니다.
  • 만약 쓰기 허용이라면, dirty 페이지는 swap_out()file_write_at()을 사용해 파일로 다시 기록 가능합니다.

요약

항목 설명
File-backed Page란? 특정 파일의 내용을 메모리에 매핑한 페이지
용도 ELF 실행 파일, mmap 구현, 공유 메모리
Pintos 구조 struct file_page, VM_FILE 타입으로 구분
핵심 함수 lazy_load_segment(), file_backed_initializer(), file_read_at()
swap과의 차이 파일이 백업이기 때문에 일반적으로 swap 저장 안 함
728x90

'크래프톤 정글(PintOS WEEK 9 ~ 14)' 카테고리의 다른 글

PML4 (Page Mapping Level 4)  (0) 2025.06.08
Direct Memory Access (DMA)  (2) 2025.06.08
Swap Disk  (0) 2025.06.08
Anonymous Page (익명 페이지)  (0) 2025.06.08
Lazy Loading(지연 로딩)  (0) 2025.06.08