목표
이제까지의 pintos의 stack 단일 페이지 stack으로 되어있었다.
이러한 스택을 적절한 page fault에서 stack을 추가로 할당하는 작업을 구현하는 것이 목표이다.
Q. 적절한 stack page fault 범위 잡는 범위를 rsp에서 4KB를 설정하였는데 왜 4KB인지 잘 모르겠음
vm_try_handle_fault 수정
if (page == NULL)
{
struct thread *current_thread = thread_current();
void *stack_bottom = pg_round_down(thread_current()->user_rsp);
if (write && (addr >= pg_round_down(thread_current()->user_rsp - PGSIZE)) && (addr < USER_STACK))
{
vm_stack_growth(addr);
return true;
}
return false;
}
vm_stack_growth
static void
vm_stack_growth(void *addr)
{
void *pg_addr = pg_round_down(addr);
ASSERT((uintptr_t)USER_STACK - (uintptr_t)pg_addr <= (1 << 20));
while (vm_alloc_page(VM_ANON, pg_addr, true))
{
struct page *pg = spt_find_page(&thread_current()->spt, pg_addr);
vm_claim_page(pg_addr);
pg_addr += PGSIZE;
}
}
PintOS Project3 GIthub 주소 PintOS