Skip to content

week 05 {swjungle} {malloc-lab}


README#

팀원들과 전략을 세웠다. CSAPP 책을 따라 읽는것이 일주일의 80%가 될 것이라고, 따라서 챕터를 다 같이 공부하되, 발표하고 싶은 챕터를 따로 더 공부하여 매일매일 발표하는 식으로 진행될 것 같다. 일단 금요일은 포괄적인 내용을 다룰 예정. 무엇무엇이 있는지, 어떤 챕터를 중점적으로 읽을 것인지, 지식을 팀원들과 싱크 맞추는 것이다.

Daily Dump#

09/07 목 ~ 09/08 금
밀린 책 부분 읽고 발표 준비 하기

09/09 토
⭐️ 9.9. Dynamic Memory Allocation 발표 @안상언

09/10 일
7. Linking {CSAPP} 발표 @최승현

09/11 월
시스템 콜 발표 @이인복

09/12 화

09/13 수

malloclab#

syscall @이인복#

user mode by programmer VERSUS previledge mode by kernel

중간에 이벤트가 발생해서 인터럽트 or 시스템 콜 발생했을 때 커널코드쪽으로 실행 흐름이 옮겨갔다가 다시 돌아옴.

CPU의 상태를 저장. 나중에 실행을 이어가야 하니까.

WHY syscall?#

부팅하면 BIOS 화면 나타나고, Power self test? 같은게 나타난다. 정상인지 확인하고 보조기억장치 (DISK, ROM)에 접근한다.

OS또한 프로그램이고 RAM에 올라가야 실행이 된다.

interface between Kernel and Programmer, actually not that directly, proxy such as shell, stdio libraries

Kind of syscalls#

Interrupt

  • hardware level (=Interrupt)
    power, io, timer,
  • program level (=Trap)
    div by 0, unauthorized memory access

Process/Threads

File IO

Socket

Device

IPC

state machine diagram#

스크린샷 2023-09-11 오후 5.21.38.png

Quiz#

5.#

다음과 같은 함수를 실행하면 어떤 문제가 생기는지 논하시오. (msg 로 전달되는 문자열의 길이가 64 이상인 경우를 가정하시오.) 이와 유사한 코드를 포함한 소프트웨어는 어떤 문제가 발생할 수 있을까? 아래 코드를 어떻게 수정하면 문제가 발생하지 않을 수 있을까?

void print_err(char *msg) {  
    char *s = (char *) malloc(10);  
    sprintf(s, "%s\n", msg);  
    fprintf(stderr, s);  
    free(s);  
};

문제의 요지
malloc을 구현해봤기 때문에 malloc이 지정해준 영역보다 넘치는 공간을 사용했을 시 어떤 영향이 가해지는지 알 수 있다.

정답
페이로드 밖의 영역에 있는 footer, 다음 블럭의 header가 깨진다. malloc 관리정보가 파괴되므로 추후 malloc/free 호출 시 엉뚱한 주소를 참조할 수 있으며, 나중에 디버깅도 어려워진다.

모범코드

char *s = (char *)malloc(strlen(msg) + 2);

extra A.#

메모리를 할당하는데 왜 블럭단위로 할당하는지 설명해 보시오 {malloc-lab}