<aside> 💡 즉, SWAP OUT/IN을 위한 프레임 교체 정책을 수행할 수 있다.
</aside>
kva
와 page
구조체를 가리키는 주소 포인터로 구성frame
을 리스트화 시키기 위해 list_elem
변수 추가struct frame {
void *kva; //커널 가상 주소를 가르키는 포인터
struct page *page; //프레임과 맵핑되는 프로세스 유저의 가상주소 페이지
struct list_elem frame_elem; //추가
};
static struct frame *
vm_get_frame (void) {
struct frame *frame = (struct frame*)malloc (sizeof(struct frame));
/* USER POOL에서 커널 가상 주소 공간으로 1page 할당 */
frame -> kva = palloc_get_page(PAL_USER);
if (frame -> kva == NULL){
frame -> page = NULL;
return frame;
}
frame -> page = NULL;
ASSERT (frame != NULL);
ASSERT (frame->page == NULL);
return frame;
}