pintos project3에서 사용되는 페이지는 3가지가 있다.
이 중에서 헷갈리는것은 VM_INIT의 사용처와 VM_FILE / VM_ANON의 차이점이다.
lazy loading을 위한 페이지다. 당장 프레임에 데이터를 올리진 않지만, page fault가 발생하면 그때 프레임을 할당하고 데이터를 올린다.
| VM_FILE | VM_ANON | |
|---|---|---|
| 차이점 | 저장 및 복구를 위한 파일 있음 | 저장 및 복구를 위한 파일 없음 |
둘의 차이점은 저장 및 복구시 사용할 (backing store)파일 유무다.
예를 들어, 어떤 내용을 파일에 저장해야한다면 그건 VM_FILE이다. 그러나, 변경사항을 저장할 파일이 없어 swap 영역에 두어야한다면 VM_ANON이다.
VM_ANON은 힙/스택 영역에서 사용되기도 하고, 실행 파일을 읽을때도 사용된다. 힙/스택 영역 내용이 파일에 저장되지 않는다. 실행 파일 역시 읽기 전용이고, 파일에 저장되어있는 내용이라 나중에 또 불러오면 된다. 따라서 파일 자체에 저장할 필이 없다.
VM_FILE은 흔히 생각하는 메모장과 비슷하다. 변경사항이 생기고 저장하려면, 원본 파일에 변경사항을 반영해줘야한다.