회고
매일 늦게 자서 그런가. 컨디션이 굉장히 좋지 않다. 그래도 열심히 하는 수 밖에. 이틀 동안 많은 것을 이루었다. Stack Growth와 mmap을 구현했다. 컨디션이 좋지 않았지만 팀원들과 계속 머리를 맞대고 고민하며 구현했다. 확실히 Pint OS를 수행하며 느끼는 것은 어렵지만 할 만 하다는 것이다. 처음에는 너무 방대하고 낯설게만 느껴졌지만, OS라는 하나의 거대한 프로젝트를 제 손으로 구현하며 마무리했을 때, 거대했던 하나의 과제를 클리어함으로써 스스로에게 자신감을 가질 수 있을 것이다.
Stack Growth
프로젝트 2에서 스택은 USER_STACK에서 시작하는 단일 페이지(4KB) =였으나, 프로젝트 3에서 스택은 현재 크기를 초과하면 필요에 따라 추가 페이지를 할당한다! Stack Growth 개념은 이해했으나 구현에 벅찼지만, 뛰어난 동료 덕분에 구현을 마치고 이해할 수 있었다.
스택은 아래로 증가하기 때문에, 스택 영역을 넘어서 메모리에 접근하려고 할 때 Page Fault가 발생한다. 스택이 물리 메모리에 할당된 페이지로 가득 찼을 때, 새로운 스택 프레임을 위한 페이지가 필요하게 된다! 이때, 스택 포인터가 스택 영역을 넘어가는 주소를 참조하면 Page Fault가 발생한다. 이 페이지 폴트는 운영체제에게 스택 확장이 필요하다는 신호가 되며, 운영체제는 추가적인 스택 페이지를 할당하여 스택의 크기를 늘린다.
Stack Growth를 구현하기 위해서는 vm_try_handle_fault()와 vm_stack_growth()를 구현해야 한다. 구현에 성공할 시, 약 58개의 fail이 뜬다. 추정치인 이유는 랜덤하게 1~2개의 결과가 튀기 때문이다.
mmap
파일을 메모리에 매핑하기 위해 mmap을 구현했다. mmap을 구현함으로써 프로세스는 파일이나 장치 영역을 메모리 영역으로 쉽게 접근할 수 있게 된다. 파일을 mmap으로 매핑하면 파일을 메모리로 직접 로드하지 않고도 파일에 접근할 수 있다.
mmap을 구현하기 위해서는 syscall.c에서 시스템 콜을 추가하고, file.c의 do_mmap()을 구현해야 한다. 구현에 성공할 시, 약 16개의 fail이 뜬다.
'크래프톤 정글 2기' 카테고리의 다른 글
[크래프톤 정글 2기] Day 83 (0) | 2023.06.25 |
---|---|
[크래프톤 정글 2기] Day 81 (0) | 2023.06.23 |
[크래프톤 정글 2기] Day 78 (0) | 2023.06.20 |
[크래프톤 정글 2기] Day 76 (0) | 2023.06.18 |
[크래프톤 정글 2기] Day 75 (0) | 2023.06.17 |