현재까지 Stack은 단일 페이지로 구성되어 그 크기 이상의 프로그램 실행은 제한되었다. 지금부터 필요한 경우 추가 페이지를 Stack에 부여함으로써 크기를 키울 수 있도록 구현한다.

언제 페이지를 할당할까?


스택에 접근하는 경우에만 추가 페이지를 할당한다.

<aside> 🧐 Heuristic?


Stack architecture


Untitled

<aside> 🧐 8바이트 아래에서 유효성 검사를 해야하는 이유?


👉 스택 포인터보다 8바이트 아래에서 페이지 폴트가 발생한다.

</aside>

유저 프로그램의 스택 포인터를 구하는 법


<aside> 🤖 userkernel로 전환될 때, 즉


👉 intr_frame이 전달되므로 이를 통해 rsp를 구할 수 있다.

👉 그러나, 커널 모드에서 페이지 폴트가 발생한 경우에는 rsp를 알 수 없다.

</aside>

커널에서 페이지 폴트가 발생한 경우?


스레드에 rsp를 저장해놓는 필드를 추가하고, 시스템 콜이 발생했을 때 이 필드에 당시의 rsp를 저장한다.