SNU-ARC / 2024_spring_sysprog_Lab3

8 stars 0 forks source link

구현 세부사항 관련하여 질문 드립니다. #4

Open minseo25 opened 2 months ago

minseo25 commented 2 months ago
  1. 새롭게 free한 chunk와 인접 free chunk 병합할 때, free_list에서의 기존 free chunk의 위치를 보전해야하는지 안해도 상관없는지 궁금합니다

  2. implicit free list에 대한 상대적인 퍼포먼스로 explicit free list를 판단하신다고 했는데, 요구되는 최소한의 성능 향상 폭이 있을까요? ls.dmas 테케의 경우만 퍼포먼스 차이가 거의 없게 나타나는데 제가 잘못 구현한건지 헷갈립니다ㅠ

  3. SHRINKTHLD 전역변수의 의미가 궁금합니다. heap shrink 여부를 결정하는 기준이라 해석하고 구현했는데 맞을까요?

감사합니당

kwonsw055 commented 2 months ago
  1. Explicit list의 경우, Coalescing 후에는 LIFO policy에 따라 새 free block이 free list의 가장 앞에 추가되어야 합니다.

  2. 100K.dmas 테스트케이스와 같이 성능 차이가 확연한 테스트 케이스에서만 확인할 예정입니다.

  3. heap에서 마지막 free block의 사이즈가 SHRINKTHLD를 넘으면 heap을 shrink하고자 하는 의도로 있는 전역변수입니다만, 구현에 따라서는 사용하셔도, 사용안하셔도 됩니다.

minseo25 commented 2 months ago

답변 감사합니다-!!

minseo25 commented 2 months ago

강의 보다가 추가 질문이 생겨 문의드립니다!!

  1. Lec9 25p에 따르면 split 결과 새로운 free chunk가 생겼을 때, (split 되기 전) 기존 free chunk의 free_list에서의 위치를 유지하는 것 같은데, 이 경우도 그냥 LIFO로 구현해도 상관없을까요?

  2. double free error 말고도 free된 chunk를 realloc 하는 등의 상황에 대한 에러처리에서 프로그램을 종료할 필요가 있는지 궁금합니다. (저희가 구현하는 부분에서 PANIC()을 쓸 필요가 없는지 궁금합니다)

kwonsw055 commented 2 months ago
  1. mm_free로 인해 발생한 free block에 대해서만 LIFO를 따라주시면 됩니다. split으로 인해 발생하는 free block의 경우에는 LIFO를 사용하셔도 되고, 강의 슬라이드와 같이 자리를 유지하셔도 됩니다. (reference의 경우에는 split시에도 LIFO를 사용하도록 구현되어있긴 합니다.)

  2. mm_realloc을 유효하지 않은 블록에 대해 호출할 때는 어떤 방법으로 처리하셔도 무방합니다. PANIC을 사용하셔도 되고, error만 출력하고 프로그램을 유지하셔도 됩니다.

minseo25 commented 2 months ago

넵 감사합니다~