링크: https://casys-kaist.github.io/pintos-kaist/project3/vm_management.html

어떤 메모리 영역이 무슨 목적으로 누구에 의해 사용되고 있는지를 추적해야 함!

⇒ supplement page table & physical frame 구현

Step 1: Supplemental Page Table 구현

Step 2: Physical Frames 구현

Page Structure and Operations

Struct page

page (defined in include/vm/vm.h )

struct page {
  const struct page_operations *operations;
  void *va;              /* Address in terms of user space */
  struct frame *frame;   /* Back reference for frame */

  union {
    struct uninit_page uninit;
    struct anon_page anon;
    struct file_page file;
#ifdef EFILESYS
    struct page_cache page_cache;
#endif
  };
};

Page Operations

페이지는 초기화되지 않은 페이지(VM_UNINIT), 익명 페이지(VM_ANON), file에 매핑된 페이지(VM_FILE) 중 하나가 될 수 있다.