-
SW 정글 11 ~ 12주차 회고카테고리 없음 2021. 10. 28. 10:11
[11 ~ 12주차 회고]
2021년 10월 28일 목요일, 12주차가 마무리 되는 날이고 11주차부터 12주차까지는 전체적으로 어땠는지 이 글을 쓰면서 돌아보려고 한다.
11주차와 12주차에는 project 2(9 ~ 10주차 진행)와는 다른 점은 기존에는 프로세스가 필요로 하는 메모리영역을 한 번에 올리는 것이였으나 project 3에서는 가상메모리 개념을 도입하여 paging기법으로 고정된 크기의 page를 필요한 부분을 메모리에 올리는 것이다.
이를 구현하기 위해서는 엄청나게 신경쓸 일이 많았다.
일단은 virtual page를 관리하기 위해 어떻게 해야할지
초기에 할당된 stack영역의 크기를 넘어서 stack영역에 page를 할당받고자 할 때 어떻게 해야할지
page의 type 3가지(uninit, anonymous, file_backed)의 차이는 무엇이고 각 type의 page를 initialize할 때와 destroy, lazy load할 때 어떻게 해야할지physical frame이 모두 할당 되었을 때 어떠한 frame을 victim으로 지정할지와 그 정책은 어떠한 것을 쓸지
그리고 vicim의 swap out과정, 새로운 page의 swap in 과정
write가 일어난 frame은 언제 disk에 반영해줄지
추가적인 과제로 주어진 copy on write(시간이 안되어 보지 못했지만 오늘 발제가 끝나면 볼 예정이다.)
깃북에 어느정도 어떠한 정책을 쓰고 어떻게 구현하라는 가이드라인은 주어였지만 해당 가이드라인에 대한 개념만 공부하려고 하지 않았다.
대표적인 예를 정리하면 page replacement algorithm(swap out을 해야할 때 어떠한 page를 victim으로 정하는 정책)으로 pintos에서는 clock algorithm을 쓰고 있지만 이외에도 기본적으로 알아야할 매커니즘인 FIFO, LRU, LFU 등이 있었고 clock algorithm 이외에 정책들이 존재한다.
그리고 각 프로세스에게 얼마만큼의 페이지를 줄 것인가?에 대한 strategy에서 pintos에서는 실행 중인 process에게 고정적으로 page의 수를 할당하는 fixed allocation을 사용하지만 실행 중인 process마다 가변적으로 page 수를 정하여 할당하는 variation allocation이 있다.variation allocation을 채택했을 때에도 새로운 page를 어떠한 page와 교체할지에 대한 교체 기법도 fixed allocation일 때와 완전히 다른 정책들이 존재한다.
(VMIN, WS, PFF 등)
이러한 대표적인 예이외에도 내가 pintos에서 구현한 정책 이외에 다양한 virtual management를 위한 매커니즘과 정책이 존재한다.
이번 project3를 하면서 단순히 이론으로만 배웠던 가상 메모리에 대해 커널관점에서 어떻게 이루어는지를 알 수 있는 좋은 기회였다.
남은 것은 file system이다.
이전 project 2, project 3를 하면서 file system에 대한 개념이 필요하여 얇게 찾아봤지만 어렵다..
오늘부터 진행할 project 4를 하는 기간동안 만족할만한 지식을 쌓는 것이 목표이다.
만족이라는 것은 추상적인 개념이지만 더 구체적으로 말하면 지금 내가 누군가에게 file system을 설명하라고 하면 못하는 상태이지만 project 4기간이 끝나면 그래도 질문에 대한 답변을 뇌피셜이 아닌 팩트를 기반으로 한 답변을 할 수 있는 것이다.