Pintos VM: Debunking Misconceptions and Key Concepts
AI Store에서 AI코딩으로 만들어진 앱을 만나보세요!
지금 바로 방문하기

Pintos VM에 대한 오해와 외면 극뽁 😁

카테고리

프로그래밍/소프트웨어 개발

서브카테고리

DevOps

대상자

OS 프로젝트 개발자, Pintos 학습자, 시스템 프로그래밍 초보자

핵심 요약

  • Pintos VM 구조는 kernel pooluser pool을 통해 메모리 할당을 관리하며, palloc_get_page()install_page() 함수를 통해 페이지 매핑을 수행
  • demand paging을 통해 물리 메모리 낭비를 방지하고, SPT는 virtual address의 page type(파일 기반/익명)을 저장하여 lazy loading을 가능하게 함
  • MMU는 VA → PA 변환을 하드웨어 수준에서 처리하며, page fault 발생 시 OS가 vm_claim_page()를 통해 물리 메모리 할당을 수행

섹션별 세부 요약

###1. Thread 생성과 Kernel Pool

  • thread_create() 호출 시 palloc_get_page(PAL_ZERO)를 통해 kernel pool에서 4KB 메모리 할당
  • intr_frame 구조체에 레지스터 정보 저장 후 CPU 스케줄링에 의해 실행 상태로 전환
  • pml4 페이지 테이블에 할당된 VA 매핑하여 MMU가 주소 변환 수행

###2. User Pool과 Memory Mapping

  • palloc_get_page(PAL_USER)로 user pool에서 4KB 메모리 할당 후 install_page()로 pml4에 VA 매핑
  • load_segment() 호출 시 ELF 파일 로드 및 실행, user program의 stack 구성
  • KERNEL_BASE 기준으로 커널 가상 주소와 물리 주소 1:1 매핑

###3. Demand Paging과 SPT

  • Project2에서는 모든 메모리 접근 시 palloc_get_page()install_page() 명시적 호출
  • Project3에서는 demand paging을 통해 필요 시점에만 물리 메모리 할당, SPT에 page type 정보 저장
  • vm_claim_page() 호출 시 lazy_load_segment()로 파일 로드 또는 0으로 초기화

###4. MMU와 Page Fault 처리

  • MMU는 VA를 pml4로 전달하여 PA 매핑, 매핑 실패 시 page fault 예외 발생
  • OS는 page fault 시 SPT 검증 후 유효한 VA라면 vm_claim_page() 호출하여 물리 메모리 할당
  • pml4 관리 시 OS의 빠른 처리가 필요, MMU와의 협업으로 성능 향상

결론

  • Pintos VM 구현 시 demand pagingSPT 관리가 핵심이며, pml4와 MMU의 상호작용을 정확히 이해해야 성공 가능
  • Project3에서 load_segment()setup_stack() 함수 수정을 통해 VM 구조를 완성