[Week06] malloc-3일차

ella·2023년 4월 12일
0

🌳정글 6기🌳

목록 보기
4/39

Micheal Lee님의 malloc-lab 설명

https://vimeo.com/22473433

malloc-lab을 처음 접했을 때 보면 도움되는 영상이다.
사용할만한 함수가 어떤것이 있는지, 우리가 구현해야 되는 함수가 무엇인지, 디버깅을 어떻게 하는지, 테스트 케이스는 어떻게 이루어졌는지 설명해 주신다. 점수 채점에 대한 방법도 알려주신다.

우리가 구현해야되는 함수

extern int mm_init (void);
extern void *mm_malloc (size_t size);
extern void mm_free (void *ptr);
extern void *mm_realloc(void *ptr, size_t size);

memlib에 구현되어 있는 함수

void mem_init(void);               
void mem_deinit(void);
void *mem_sbrk(int incr);
void mem_reset_brk(void); 
void *mem_heap_lo(void); //heap의 제일 낮은 address반환
void *mem_heap_hi(void); //heap의 제일 높은 address반환
size_t mem_heapsize(void);
size_t mem_pagesize(void);

malloc-lab 실행

make clean : 목적파일 삭제
make mdriver : 실행파일 생성
./mdriver : 실행파일 삭제

trace 파일 확인(test case 파일들)

cd traces
ls

출력내용:
Makefile binary-bal.rep cccp-bal.rep coalescing.rep expr.rep gen_random.pl random.rep realloc.rep short1.rep
README binary.rep cccp.rep cp-decl-bal.rep gen_binary.pl gen_realloc.pl random2-bal.rep realloc2-bal.rep short2-bal.rep
amptjp-bal.rep binary2-bal.rep checktrace.pl cp-decl.rep gen_binary2.pl gen_realloc2.pl random2.rep realloc2.rep short2.rep
amptjp.rep binary2.rep coalescing-bal.rep expr-bal.rep gen_coalescing.pl random-bal.rep realloc-bal.rep short1-bal.rep

.rep으로 쓰여있는 파일들이 test case 파일들이다.

vi realloc-bal.rep

을 사용해 realloc-bal.rep 파일을 예시로 확인해보면, 다음과 같은 테스트 케이스를 확인해 볼 수 있다.

100
4801
14401
1
a 0 512
a 1 128
r 0 640
a 2 128
f 1
r 0 768
a 3 128
f 2
r 0 896
a 4 128
f 3
r 0 1024
a 5 128
f 4

a는 할당, f는 free, r은 relloc에 대한 매개변수 테스트 내용이다. 편집기 종료는 :q 엔터

해당 테스트 케이스를 실행하려면 다음과 같은 명령어를 사용한다.

./mdriver -f traces/short1-bal.rep

결과창:

Team Name:No.7
Member 1 :Jinkyo:Explorer in jungle
Perf index = 40 (util) + 40 (thru) = 80/100

점수 확인방법

좀 더 자세한 사항을 알고 싶다면 다음과 같은 명령어를 사용하자.

./mdriver -Vf traces/short1-bal.rep

결과창:

Team Name:No.7
Member 1 :Jinkyo:Explorer in jungle
Measuring performance with gettimeofday().

Testing mm malloc
Reading tracefile: traces/short1-bal.rep
Checking mm_malloc for correctness, efficiency, and performance.

Results for mm malloc:
trace  valid  util     ops      secs  Kops
 0       yes   66%      12  0.000000 30000
Total          66%      12  0.000000 30000

Perf index = 40 (util) + 40 (thru) = 80/100

util은 공간에 대한 효율면 값, Kops(Killo operation seconds)와 thru 는 시간에 대한 효율면 값. 왜 이렇게 점수가 나오는지 알아야 한다.

모든 테스트에 대해 알고 싶으면 다음과같은 명령어를 사용한다.

./mdriver -V

gdb사용법

다음과 같은 명령어로 gdb 디버거를 실행한다.

gdb --annotate=3 mdriver
(--Type <RET> for more, q to quit, c to continue without paging-- 안내가 나오면 c)

다음과 같은 명령어로 break 포인트를 설정한다.

break mm_malloc
break mm_free
break mm_realloc

결과창:

(gdb) 
prompt
break mm_malloc

post-prompt
Breakpoint 1 at 0x2a30: file mm.c, line 73.
Breakpoint 2 at 0x2b60: mm_free. (3 locations)
Breakpoint 3 at 0x2c50: file mm.c, line 220.

다음과 같은 명령어로 테스트 파일을 실행한다.

run -f traces/short1-bal.rep

결과창:

post-prompt
Starting program: /home/jinkyo/jungle/week06/malloc-lab/mdriver -f traces/short1-bal.rep

starting
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Team Name:No.7
Member 1 :Jinkyo:Explorer in jungle

breakpoint 1

Breakpoint 1, 
frame-begin 0 0x56557a30
mm_malloc (size=2040) at mm.c:73

source /home/jinkyo/jungle/week06/malloc-lab/mm.c:73:1574:beg:0x56557a30

stopped

다음과 같은 명령어로 변수들을 확인할 수 있다.
p {변수명}
p {함수}

p size
p mem_heap_lo()

결과창:

post-prompt
$1 = 2040
(void *) 0x7ffff6be800f

다음 줄로 넘어가려면 n을 입력하면 된다.

n

이제 사용법을 알았으니, implicit free list부터 구현하러 가자.

profile
^^*

0개의 댓글