운영체제(구현) - 핀토스 - Virtual memory - Stack Growth
* 관련 기술 스택이 없습니다
• 스택 성장을 식별하고 구현하는 방법에 대해 설명하고 있으며, 스택 접근을 판별하기 위해 `vm_try_handle_fault` 함수를 사용하고, 스택 크기를 증가시키기 위해 `pg_round_down`을 이용해 anonymous pages를 할당하는 과정을 설명하고 있습니다.
• 스택 접근이 유효한지 판별하기 위해 최대 스택 크기 1MB 제한을 두고, `rsp`와 접근 주소를 비교하여 조건문을 설정하는 방법을 제시하며, 이를 위해 커널 모드로 전환될 때 현재 유저 스택 포인터를 저장하는 필드를 스레드 구조체에 추가하는 작업을 설명하고 있습니다.
• 유저 스택 접근 시 스택 확장을 위해 `vm_stack_growth` 함수를 호출하며, 스택 확장은 예외 주소가 더 이상 발생하지 않도록 어나니머스 페이지를 할당하여 처리한다.
• 스택 확장 시 주소를 PGSIZE로 내림하여 처리하며, `vm_alloc_page` 함수를 통해 페이지를 할당한다.
북마크
공유하기
신고하기