page fault 발생
-> handler 호출
-> SPT에서 page 찾음
-> vm_do_claim_page (페이지 할당)
-> page와 frame 연결
-> pml4에 VA → frame (매핑 등록)
-> swap_in (데이터 적재)
-> handler가 true 반환
같은 명령어를 다시 실행하면 이번에는 접근 성공
vm_do_claim_page
-> vm_get_frame (프레임 할당 후 반환)
-> check palloc(PAL_USER) is NULL (사용할 수 있는 프레임이 없다면)
-> if true, vm_evict_frame
-> vm_get_evict (무조건 프레임 하나 반환) with swap out
-> 페이지 테이블 매핑 정보 삭제
-> 페이지와 연결 제거
-> 수정되었다면, 페이지 종류에 따라 저장 swap out
-> 페이지와 프레임 연결
-> 페이지 테이블에 매핑 정보 추가
-> swap in (프레임에 데이터 불러들이기)
[내 생각]
핀토스는 1코어 1스레드 방식으로 동작한다. 따라서, 현재 프로세스가 사용하는 프레임 외에는 사용되고 있지 않다. 그래서 다른 프로세스의 프레임을 선택해 방출할 수 있어야, 현재 실행중인 프로세스가 잘 동작할 수 있다.
[피드백 with AI]
커널은 프레임을 프로세스의 입장이 아닌, 전체를 바라본다. 따라서 누구의 프레임보다는 전체 중에서 어떤 프레임을 비워주면 좋을지 레벨로 바라본다. 그래서 현재 프로세스뿐만 아니라 프레임 테이블을 이용해 선택하는게 맞다.