시간이 꽤 지나서.. 구체적인 내용은 기억이 잘 나지 않지만.. 오랜만에 여유가 생겨서 밀린 방학숙제 하듯이 회고해보려고 한다 헤헤

6주차에는 팀원들과 함께 malloc lab 프로젝트를 진행했다.

레포: https://github.com/krafton-jungle-github/WEEK-06_Malloc

 

GitHub - krafton-jungle-github/WEEK-06_Malloc: 6주차 malloc 구현

6주차 malloc 구현. Contribute to krafton-jungle-github/WEEK-06_Malloc development by creating an account on GitHub.

github.com

 

기억 나는대로 끄적여보자면.. 일단 이 프로젝트를 수행하기 전에 배경지식을 갖추기 위해 CSAPP을 먼저 봐야 했다. 사실 이 과제와 직접적으로 관련있는 단원은 9.n장이라서 그 단원만 보면 되긴 했지만, 내 기준에 과제는 서브고 CS 지식에 대해 학습하는 게 메인이라고 생각돼서.. 메모리 관련 과제 하는 김에 6장(메모리 계층구조)과 9장(가상 메모리)의 나머지 단원들(가비지 컬렉션 빼고!)도 1회독 했다. 그래도 팀원들과 함께 과제를 늦지 않게 진행해야 했으므로 민폐 끼치지 않기 위해 최대한 빨리 읽으려고 노력했다.

 

코드를 작성하는 것 외에 이론 학습에서도 동료학습을 진행하도록 가이드가 주어져 있어서 좋았다.

우리팀 같은 경우는 이렇게 나눠져 있는 주제를 각자 1~2개씩 담당해서 개별학습한 뒤, 약속한 날짜에 서로 설명해주는 식으로 동료학습을 진행했는데 학습 효과가 꽤 좋았다. 일단 본인이 담당한 파트는 까이지 않기 위해 책임감을 갖고 열심히 공부할 수 밖에 없었고, 남이 담당한 파트는 까기 위해서 어차피 코드 구현하기 위해 이해해야만 하는 개념들이라 열심히 공부했다! 혼자 했으면 귀찮아서 열심히 안했을 것 같은데, 묵묵히 공부하는 동료들이 옆에 있으니 저절로 열심히 할 수 밖에 없었다. 동료학습은 이런 식으로 칠판에 그림을 그려가면서 진행했다.

 

 

지금와서 보면(=핀토스에서 허우적대다가 겨우 빠져나온 시점) 저런 개념들이 막 누구누구처럼(핀토스?ㅋ) 복잡하거나 어려웠던 건 아닌 것 같은데.. 이따금씩 헷갈릴 때가 있었다. 어떤 느낌이었냐면.. 잘 이해되는 것처럼 쭈욱 보다가 갑자기 읭?하면서 게슈탈트 붕괴현상처럼 갑자기 개념들이 머리 속에서 꼬여서 혼란스러워 하다가 팀원들하고 얘기하면서 다시 정신 차리는.. 그런 느낌이었다.; 어설프게나마 저런 식으로 그림으로 그리고 수시로 그림을 쳐다보니까 덜 헷갈렸다.

 

그리고 저 칠판에 적힌 edge 어쩌고는 CSAPP의 9.9.12에 나와있는 edge condition의 의미에 대해 사람들과 고민하다가 원서에서 다음 문장들 보고 깨달아버렸을 때 적어놓았던 것이다.:

The prologue and epilogue blocks are tricks that eliminate the edge conditions during coalescing.
Without these special blocks, the code would be messier, more error prone, and slower because we would have to check for these rare edge conditions on each and every free request.

새로운 개념이 아니라 말 그대로 edge case를 의미한 것이었고, 언뜻 보기에는 의미없어 보이는 프롤로그 블록과 에필로그 블록을 추가해주면 희소한 예외 케이스를 위한 예외 처리를 굳이 해주지 않아도 된다는 아주 자연스러운 내용인데, 번역본에는 가장자리 조건..?이라는 다소 생소한 단어로 표현되어 있어서 많이들 혼란스러워 했던 것으로 기억한다.

 

그 밖에 메모리 할당 정책 공부하고 직접 구현해보면서 내부 단편화, 외부 단편화 개념도 기억에 잘 남게 된 것 같다. 그리고 이때 6장, 9장 안 읽었으면 시간 내서 읽기 어려웠을 것 같아서.. 이때 좀 더 시간 들여서 개념 학습 하길 잘했던 것 같다.

 

 

복사했습니다!