반응형
목표
이제까지의 pintos의 stack 단일 페이지 stack으로 되어있었다.
이러한 스택을 적절한 page fault에서 stack을 추가로 할당하는 작업을 구현하는 것이 목표이다.
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;
}
}
반응형
'지난 글 모음' 카테고리의 다른 글
[sw 정글] pintos 3주차 - part 6: Copy on write(cow) ALL PASS (6) | 2022.06.21 |
---|---|
[sw 정글] pintos 3주차 - part 4: Memory Mapped Files (0) | 2022.06.21 |
[sw 정글] pintos 3주차 - part 2: Anonymous page & Lazy Loading (0) | 2022.06.21 |
[sw 정글] pintos 3주차 - part 1: Memory Management (0) | 2022.06.21 |
[Malloc-Lab] 기본개념과 Implicit 구현하기 (3) | 2022.05.10 |