[WIL] Project 3 - Virtual Memory

최준영·2022년 1월 25일
0

핀토스 모든 프로젝트 중 가장 많은 기간인 2주가 부여된 프로젝트 3. 드디어 primary memory인 DRAM뿐만 아니라 seconday memory인 디스크까지 user process의 virtual memory space로 편입하는 단계에 이르렀다.
세 가지 소회를 남기고 싶다.
1. 예전 CSAPP 교과서에서 프로세스 관점에서 봤을 때 virtual memory란 DRAM과 디스크를 추상화한 개념이라고 했을 때, 전혀 와닿지 않았다. 도대체 어떤 방식으로 프로세스로 하여금 DRAM을 넘어서서 디스크까지 메모리인 것처럼 인식시키게 할 것인가 의문이었다. 이번 프로젝트 3를 통해서 virtual page와 frame이라는 새로운 memory management 방식과 swapping 방식을 통해서 disck를 백업 삼아 physical memory의 한계를 벗어날 수 있다는 것을 코드레벨로 확인할 수 있어서 계몽적인 시간이었다.
2. 이번 새롭게 배정된 팀에서 개인적으로 하던 incremental한 개발과정을 적용해봤다. 테스트를 할 수 있는 최소 개발 범위를 설정하고, 그 테스트를 통과하기 위한 최소한의 개발을 하고, 디버깅 완료 후 커밋하는 사이클을 반복했다. 지난 조에서는 2주 동안 2번 정도만 팀 내 이해도를 맞췄는데, 이 방식을 통해 이번 조에서는 거의 1~2일 사이클로 이해도를 맞추면서 개발을 해나갔다. 확실히 사이클 단위를 축소시키니 이해도가 맞춰지면서 모르는 부분을 서로 채워나가면서 이해의 폭이 혼자 했을 때보다 훨씬 깊어지는 것을 느낄 수 있었다.
3. 가설 설정 후 디버깅 방식에서 큰 쾌락을 느꼈다. 특히 stack growth 테스트 케이스에서 어떤 경우에 rsp보다 8바이트 낮은 주소에서 page fault가 뜨는지 이해가 되지 않아, CSAPP에서 x86-64 calling convention을 다시 보고 가설을 세워 디버깅을 하면서 specific한 경우를 찾아냈을 때의 즐거움은 정말 값졌다. 이론을 보고 머릿속에 형성한 지식 체계와 디버거 찍히는 값이 불일치를 낼 때의 짜증과, 다시 가설을 세우고 검증을 하면서 그 간극의 폭을 좁혀 나가는 데 성공했을 때의 보람은 앞으로도 계속 느끼고 싶은 점이다.

profile
Trying to be useful.

0개의 댓글