Stack Growth
문제 상황
프로젝트 2: 스택 = 1페이지(4KB) 고정
→ 스택이 4KB 넘으면? 💥 크래시!
프로젝트 3: 스택 동적 증가
→ 필요할 때마다 페이지 추가 할당
요약
- 스택 성장
사용자 프로세스가 스택의 아직 매핑되지 않은 영역(페이지)을 접근하려 할 때 페이지 폴트로 감지하고, 합법적인 경우에 한해 새 페이지를 할당 및 매핑하여 스택을 아래로 확장하는 기법
- 지연 로딩을 쓰면, 스택용 페이지도 처음에는 매핑되지 않으므로, 페이지 폴트 처리 함수에서 “이 접근이 스택 성장으로 정당화되는지” 판단하고 새 페이지를 생성해야함
주의 사항
- 스택은 아래로 자람 : USER_STACK에서 낮은 주소로
- 즉시 클레임 : 스택 페이지는 지연 로딩 없이 즉시 할당
- 익명 페이지 : 스택은 항상 VM_ANON 타입
- 페이지 정렬 : 주소를 PGSIZE로 내림 처리