PintOS_Project03_stack growth

전두엽힘주기·2025년 6월 5일

PintOS

목록 보기
17/20

스택이 현재크기를 초과하면 필요에 따라 추가 페이지 할당
스택에 접근할 때만 할당
스택에 접근하는 경우와 아닌 경우를 알아서 구별

스택은 스택 포인터 아래 스택에 쓸 경우 버그 발생(스택은 높은 주소에서 낮은 주소로 쌓임)

시스템 콜처리나 페이지 폴트 처리시 rsp를 어떻게 얻어야 하는가

유저프로그램의 스택 포인터 현재값을 얻어야함

  • 시스템콜 발생시: syscall_handler 의 strcut intr_frame에서 f->rsp를 얻음
  • user mode 에서 페이지 폴트 발생: page_fault의 struct intr_frame에서 f->rsp사용가능
  • kenel mode에서 페이지 폴트 발생: f-> rsp에 정확한 사용자 rsp가 없으므로 별도로 저장해야함 (로직 필요)

void vm_stack_growth (void *addr);
하나 이상의 anon page를 할당하여 스택크기를 늘림
-> addr은 폴트가 발생하는 주소에서 유효한 주소가 됨
페이지 할당 시 주소를 pgsize 기준으로 내림

스택크기 최대 1mb

0개의 댓글