-
[SW 정글 82일차] Project 3 - Stack Growth기타/SW 사관학교 정글 2021. 10. 24. 01:51
오늘은 project3의 3번째 과제인 stack growth를 파악하고 구현하는 시간을 가졌다.
과제를 완벽히 이해하면 코드를 이해하는 데에는 나름 괜찮은 과제 구간이였다.
memory management와 anonymous page가 너무 어려워서 상대적으로 느껴지는 건가...
1. Stack Growth
project 2에서의 스택은 USER_STACK(0x47480000)에서 시작하는 싱글 페이지였고 프로그램의 실행은 이 싱글 페이지의 크기로 제한되었다.
즉, 스택에 할당되는 메모리가 싱글 페이지 사이즈보다 큰 경우는 고려되지 않은 것이다.
project 3에서는 스택이 현재 사이즈보다 커지게 되면 필요한 만큼 추가적인 페이지를 할당해주는 것을 구현해야한다.
추가적인 페이지 요청이 스택에 접근하려고 할 때에만 할당해야한다.
유저 프로그램은 해당 프로그램이 stack pointer보다 밑에 있는 스택을 writer하려고 하면 buggy된다.
그 이유는 보통의 OS는 스택에 데이터를 변경하는 것을 signal이라고 보고 어느 때이던지 signal이 도착하면 프로세스를 인터럽트하기 때문이다.
하지만, x86-64의 PUSH 명령어는 스택포인터를 조정하기 전에 접근권한을 체크하고 스택포인터 밑 8바이트 page fault를 일으킨다.
왜 stack에 wirte하는 경우에 buggy된다고 설명하다가 PUSH명령어를 얘기하는 것일까?
PUSH에 대해 조금 더 알아봐야겠다.
https://it-eldorado.tistory.com/37
https://modoocode.com/en/inst/push
PUSH는 스택에 데이터를 쌓을 때 쓰는 명령어라고 이해했다.
생각해보니까 스택에 쌓는 것은 push이고 빼는 것은 pop인데 왜 바로 생각이 나지 않았을까..
근데 PUSH 명령어를 찾다보니 x86-64의 스택구조는 더 알아볼 필요성이 느껴졌다.
내일 시간을 내서 알아봐야겠다.
이 과제에서 구현해야 할 함수는 2가지이다.
/* 이 함수는 userprog/exception.c에 있는 page_fault 함수에서 호출됨. * stack growth를 위한 유효한 page fault인지 아닌지 체크해야함. * stack growth로 handle되는 fault이면 faulted address를 인자로 하여 vm_stack_growth함수를 호출 */ bool vm_try_handle_fault (struct intr_frame *f, void *addr, bool user, bool write, bool not_present); /* 하나 이상의 anonymous page를 할당함으로서 스택 사이즈를 늘리는 역할을 함. */ void vm_stack_growth (void *addr);
대부분의 OS에서는 스택 사이즈에 대해 절대적인 제한선을 설정한다.
몇몇의 OS는 제한선은 user-adjustable하게 만들 수 있다.
많은 GNU/Linux 시스템에서는 8MB이고 PIntos에서는 1MB를 제한선으로 설정했다.
[오늘의 나는 어땠을까?]
오늘은 기상확립 스터디를 위해 7시 20분에 눈은 떴지만 일어나서 씻지 못하고 다시 잠에 들었다.
솔직히 어제의 열등감, 자괴감이 크게 남아있어 의지가 약해졌다.
내가 많은 시간동안 책상 앞에 앉아있어도 결과물이 좋지 않는다는 자괴감..
나랑 같은 위치에서 정글 생활을 시작한 사람에 비해 떨어지는 능력에 대한 열등감..
이러한 것들이 나를 괴롭협고 결국 1시간 더 자고 9시에 강의실에 왔다.
강의실에 도착하기 전, 기강확립 스터디를 같이하는 동료와 정수기 앞에서 만나 나의 현재 고민, 심정을 토로했다.
결론은 남들의 성장을 따라가려하지말고 나의 성장에 포커스를 맞춰 흔들림없이 꾸준히 앞으로 나아가는 것이다.
항상 말은 쉽고 행도을 어려운 것이기는 하지만 최대한 나에게 포커스를 맞춰 남은 기간, 그리고 앞으로도 계속해서 이 말을 새기며 꾿꾿이 앞으로 나아가야한다.
옆에서 달리는 동료는 나에게 도움이 되는 존재이다.
너무 그들의 속도에 내가 뒤쳐진다고 생각하지말고 나는 나대로 달려나가자.
'기타 > SW 사관학교 정글' 카테고리의 다른 글
[SW 정글 84일차] Project 3 - Memory Mapped Files (0) 2021.10.26 [SW 정글 83일차] 효율적으로 보낸 일요일 (2) 2021.10.25 [SW 정글 81일차] 오늘 한 일 (0) 2021.10.23 [SW 정글 80일차] Project 3 - Anonymous Page (0) 2021.10.22 [SW 정글 79일차] Project 3 - Hash Table을 쓰네 (2) 2021.10.21