Home malloc lab - intro
Post
Cancel

malloc lab - intro

Malloc lab의 목적

malloc() 함수, malloc 과 관련된 라이브러리를 직접 구현하는 것이다. 즉, Dynamic memory allocator를 직접 구현하는 프로젝트이다. 자세한 문서는 CSAPP malloc lab pdf로 검색하여 확인해 볼 수 있다. 본 문서에서는 x86-64 시스템에서 동작하는 할당기를 구현할 계획이다.

Skeleton Code

1
git clone https://github.com/david61song/malloclab-start

기존의 32비트에서 컴파일되는 malloclab의 코드를 수정하여 64비트 시스템에서도 동작할 수 있게 변경하였다. Apple silicon Mac에는 기본적으로 Rosetta2가 내장되어 있기 때문에, x86_64 바이너리를 LLVM(clang)을 이용하여 생성할 수 있고, 실행할 수 있다. 관련된 Makefile은 다음과 같다.

Makefile

1
2
3
4
5
6
7
8
9
#
# Students' Makefile for the Malloc Lab
#
TEAM = "your team name"
VERSION = 1
HANDINDIR = handme
CC = clang
CFLAGS = -Wall -arch x86_64 -Wno-unused-function -Wno-unused-parameter -g

CFLAGS에 다음과 같은 설정을 주면 된다.

1
2
3
4
5
-Wall # 모든 경고 설정
-arch x86_64 # x86_64 아키텍처를 위한 바이너리 생성
-Wno-unused-function # 미사용 함수에 대한 경고 비활성화
-Wno-unused-parameter # 미사용 매개변수에 대한 경고 비활성화
-g # 디버그를 위한 기능

파일 설명

  1. mm.c 우리가 수정해야 할 유일한 파일이다. malloc 할당기의 메인 파일이다.
  2. memlib.c 메모리 시스템 (힙 메모리)를 시뮬레이팅하기 위한 파일이다. 수정할 필요는 없다.
  3. ftimer.c 타이머 관련 파일이다.
  4. fcyc.c CPU 사이클 측정을 위한 파일이다.
  5. traces/ 우리가 만든 malloc의 성능을 평가하기 위해, malloc, free, realloc을
  6. 기타 파일들은 크게 볼 필요는 없다.

유용한 디버깅 (Vscode)

CodeLLDB

  1. vscode 확장 플러그인 중, CodeLLDB를 설치한다.

image

  1. .vscode/launch.json에 다음 내용을 추가한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
    "version": "0.2.0",
    "configurations": [

        {
            "type": "lldb",
            "request": "launch",
            "name": "Debug mdriver, out malloc",
            "program": "${workspaceFolder}/mdriver",
            "args": [],
            "cwd": "${workspaceFolder}"
        }
    ]
}

우리가 생성하는 malloc 시뮬레이터의 바이너리 이름은 mdriver이기 때문에, program을 mdriver로 설정한다.

디버깅 과정

설정한 다음, Vscode에서 중단점을 추가하는 것처럼 추가해 주면 된다.

image

Make로 빌드한 뒤, 우리가 설정한 설정의 이름인 Debug mdriver, out malloc 을 확인할 수 있다.

![[스크린샷 2024-05-16 오후 12.42.30.pngcenter500]]

실행 및 디버그를 누르면, 우리가 설정한 중단점에서 디버거가 실행을 중단하는 것을 확인할 수 있다. 디버그 콘솔, 출력 등에서 lldb 명령어를 실행하여 디버깅을 진행할 수 있다.

image

이정도 까지 되면, 기본적인 설정은 완료된 것이다! 다음 포스팅에서 더욱 자세한 사항을 다루어 보겠다.

This post is written by david61song