Pintos VM에 대한 오해와 외면 극뽁 😁
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
DevOps
대상자
OS 프로젝트 개발자, Pintos 학습자, 시스템 프로그래밍 초보자
핵심 요약
- Pintos VM 구조는
kernel pool
과user 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 paging
과SPT
관리가 핵심이며,pml4
와 MMU의 상호작용을 정확히 이해해야 성공 가능 - Project3에서
load_segment()
와setup_stack()
함수 수정을 통해 VM 구조를 완성