이번주 목표
malloc 구현
https://github.com/yeooonee/Jungle-C-MallocLab
GitHub - yeooonee/Jungle-C-MallocLab: Krafton jungle week 6 Malloc Lab
Krafton jungle week 6 Malloc Lab. Contribute to yeooonee/Jungle-C-MallocLab development by creating an account on GitHub.
github.com
이번주 한 일
malloc 흐름 중 내가 구현한 것은 아래와 같다. implicit (묵시적) 으로 구현하는 것만 완료했다.
- malloc
- extend heap : 할당 부분 추가
- sbrk 호출 : 진짜 새 자리 받기
- free : 가용 블록으로 전환하기 (사용 해제하기). 합치기는 free 직후에 했고, 다른 시점에 하는 건 free 자체는 빠른데 나중에 합칠때 상대적으로 오래걸리고, free 직후에 하면 비용이 free 호출마다 분산된다.
- realloc
- malloc 할당 : malloc 으로 새 가용블록 받기
- 제자리 할당 : 앞뒤 병합으로 공간 만들어서 제자리 할당하기
- find fit
- first fit : 매번 처음부터 반복문 돌며 조회해서 처리량이 낮아진다. 앞쪽 가용 블록이 먼저 소진되기 때문에 단편화가 덜 하다.
- next fit : 가장 최근에 할당한 중단점에서 다음 공간을 찾아서 앞쪽 사용 중 블록을 건너뛰어 바로 다음 자리를 찾아 처리량이 높다. 다만, 바로 다음 자리들이 자잘하게 찰 확률이 높아서 외부 단편화가 될 확률이 높다. 나는 next fit 이 시간 점수가 만점이고, 공간 점수도 best fit 보다 최적화하기 더 좋다고 생각해서 (시간이 얼마 안 남았기 때문에) next fit 으로 마무리하는 것을 선택했다.
- best fit : 모든 가용 블록을 흝어서 가장 차이가 적은 가용 블록에 할당한다. 구현을 완벽히 마치지 못해서, 어떤 식으로 개선할지 추가적으로 해야한다. 기본 구현까지는 했는데, 점수가 first fit 보다 낮게 나왔다. best fit 은 모든 가용 블록을 흝는데, 처리량에 큰 영향을 줬을 거라 생각한다. (사실 모르겟다 pintos 로 급하게 넘어오느라 못 찾아봄)
=> 총점 91점으로 마무리 되었다 (util 51 + thru 40)
책을 저번주에 한번 읽고 왔고, 9.9 부분의 코드를 6주차 팀원들과 나눠서 하루만에 읽고 코드를 설명하였다. 이 코드를 이제 책을 그대로 복붙하며 이해하지 말고, 한번 읽어봤으니까 생각하면서 implicit 을 구현할 때 책을 안보고 코드를 작성하자고 했다. 이게 우리 모두가 생각했던 것보다 더 오래걸렸고, 생각보다도 더 어려웠다. 파트를 나눠서 남의 파트는 설명 들어도 100% 알지 못하기도 하고 .. 그런 부분을 간과했던 것 같다.
대신 장점으로는 implicit 은 좀 딥하게 이해한 것 같다. (하지만 코치님은 항상 DFS 보다는 BFS 를 강조하신다 ^^)
내가 못한 것
- explicit 방식 구현 : 선행 implicit 구현이 늦어져 시간부족으로 구현하지 못했다. 남은 시간에는 다른 함수들을 최적화 하는 것을 선택했다.
- find fit - best fit 최적화
문제와 해결 과정
우리 팀은 책을 보지않고 한번 공부한 상태로 다 구현하기로 했는데, 이러다보니 구현에 시간이 너무 많이 들었다. 문제는 최초에 책을 기준으로 기본을 빠르게 구현하고 최적화에 시간을 더 쓰는 것을 목표로 했어야 한다고 생각한다. 코치님께서 발제에서 한 말씀을 생각해서 팀 규칙을 정했어야 하는데, 이를 간과하였다.
문제 발생 → 오류 해결을 위한 가설 설정 → 검증 등의 과정을 거쳐야 하는데, 구현에 시간을 쏟다보니 이걸 할 시간이 절대적으로 부족했다.
이와 관련하여 중간에 이 방법이 맞나 월요일부터 강한 불안감이 들었는데, 내가 뚜렷한 대책없이 뭔가 이 방법은 아닌것 같다 말했을 때, 서로 어떻게 해야할지 모르겠는 상황이 두려웠던 것 같다. 추가로 시간도 얼마 안남아서 일단 구현도 너무 빡셌다. 나중에 동료 회고 때 얘기해보니 다른 팀원도 비슷하게 이 방법은 아닌 것 같다고 생각하였다고 했다.
이와 관련하여 우리가 처음에 정한 방법이 절대적으로 맞지 않으니 그걸 뒤집자 말할 용기를 가져야 할 필요성을 느꼈다.
다음 주 계획
이번주에는 (사실 WIL을 늦게 써서 이번주가 되었다) 이와 관련해 우리가 지금 하는 방법이 잘못된 것 같으면 서로 가감없이 바로바로 공유하자고 팀원들에게 먼저 말하고, 편하게 얘기하자고 공유했다. 모르는 부분이나 어려운 부분들 슬랙으로도 올려서 바로바로 공유하자고도 얘기했다. 소통이 중요한 것 같다고 공유했다.
=> 구체적으로는 지금 어디까지 했고, 어디에서 막혔고, ,... 이런 내용들을.
이에 대해 너무 딜레이되는 것을 막기 위해 데드라인 시점에 목적을 전면적으로 재점검 하는 방식을 도입해도 좋을 것 같다.
팀으로 같이 결과물을 만드는 만큼 서로 말한 내용을 기록하는게 중요하다고 생각해 회의록을 간단하게라도 작성하였다.