USER_STACK
에서 시작하는 단일 페이지, 프로그램 크기 4KB로 제한→ 스택이 현재 크기를 초과하면 필요에 따라 추가 페이지를 할당하도록 해야함
<aside> 📌 1 rsp - 8이 page_fault가 일어난 주소와 같음 ⇒ push에서 stack growth 일어남
2 rsp가 먼저 움직이고, page_fault가 발생 → rsp < page_fault ⇒ stack growth 일어남
찐 페이지폴트 → userstack -1mb 의 범위를 벗어나는 경우 ⇒ process 종료
</aside>
→ syscall에 의한 경우 ⇒ syscall_handler()
/ page_fault에 의한 경우 ⇒ struct intr_frame
의 rsp
에서 알 수 있음
❗page_fault가 커널에서 발생하는 경우 처리가 필요함❗→ syscall_handler에서 rsp값 저장
Implement stack growth functionalities.
수정하는 함수 : vm_try_handle_fault
vm_try_handle_fault
은 찐 페이지폴트/보거스 폴트를 감별하는 함수, 여기서 보거스라면 stack을 확장시켜줘야함스택 확장 시, vm_stack_growth
호출하여 스택 증가
void vm_stack_growth (void *addr);
addr
= faulted주소 → 유효한 주소, 페이지를 할당할 때 주소를 PGSIZE
기준으로 내림~~(pg_round_down?)~~구현해야하는 함수 : vm_stack_growth