. [PintOS, Project 3] Stack Growth
본문 바로가기
Pintos Project/Project 3

[PintOS, Project 3] Stack Growth

by 불냥이_ 2021. 2. 23.

Stack Growth 

- 스택에 접근하려고 할 때, 추가 페이지를 할당한다. 
- 스택포인터를 조정하기 전에 접근 허가를 체크할 것이고, 이는 현 스택 포인터 8byte 아래에 페이지 폴트를 야기할 것이다.

- 현 유저 프로그램의 스택 포인터의 현재 값을 획득해야한다.
- 유저 프로그램이 페이지 폴트를 발생시키거나, 시스템콜을 호출할 때, if에서 rsp를 획득해서 시스콜이나 페이지폴트에 전달할 수 있다.
- 페이지 폴트시에 invalid memory access 를 탐지하고 싶다면, page fault가 kernel에서 일어나고 있는지도 체크해야한다. 
- 프로세서는 exception이 user mode에서 kernenl mode로 바꿀 때만 스택 포인터를 저장하고 있기 때문에, if밖에서 rsp를 읽어 pag fault로 넘기는 것은 비정상적인 결과를 낳는다.
- 처음 user mode에서 kernel mode 로 바뀔 때, rsp를 thread에 저장하는 방법 등을 사용해라.

- stack_growth를 identify하기위해 try_handle_fault를 수정해야한다.
- vm_stack_growth 를 수정하라. 



vm_try_handle_fault ()
- page fault가 stack growth하기 위해 적합한지 아닌지 판단하라 -> kernel인지 조사?
- 적합하면 vm_stack_growth()실행


vm_stack_grouwth()
 - addr이 page_fault를 발생시키지 않을 때까지 stack size를 늘린다. addr를 round down하라
- 최대 스택 사이즈는 1MB가 되어야한다.

'Pintos Project > Project 3' 카테고리의 다른 글

[PintOS, Project3] Memory Mapped Files  (0) 2021.02.25
[PintOS, Project 3] Anonymous Page  (2) 2021.02.23
[PintOS, Project 3] Hash Table  (0) 2021.02.19

댓글