sbrk() 의 정확한 역할 ...

조회 수 1071 추천 수 0 2010.03.17 00:38:02

 

솔직히 sbrk가 정확히 뭘 하는 놈인지 모르겠습니다.

Memory에서 Heap 영역과 관련이 있다는 것 정도 ㅋㅋㅋ

 

general_init()에 보면, xmalloc_set_program_name()입니다.

 

 

 

void
xmalloc_set_program_name (const char *s)
{
  name = s;
#ifdef HAVE_SBRK
  /* Win32 ports other than cygwin32 don't have brk() */
  if (first_break == NULL)
    first_break = (char *) sbrk (0);
#endif /* HAVE_SBRK */
}

 

여기서 sbrk() ... 도대체 뭘까요 ?

 

   1    380  boehm-gc/os_dep.c <<sbrk>>
             #define sbrk tiny_sbrk
   2    944  /usr/include/unistd.h <<sbrk>>
             extern void *sbrk (intptr_t __delta) __THROW;

 

우선 sbrk는 인자값이 있으므로 1이 아니라고 하고, 2번을 가봤습니다.

 

/* Increase or decrease the end of accessible data space by DELTA bytes.
   If successful, returns the address the previous end of data space
   (i.e. the beginning of the new space, if DELTA > 0);
   returns (void *) -1 for errors (with errno set).  */
extern void *sbrk (intptr_t __delta) __THROW;

 

 

 

man sbrk를 해봤습니다.

 

BRK(2)                                             리눅스 프로그래머 매뉴얼                                            BRK(2)

이름
       brk, sbrk - 데이터 세그먼트 크기를 변경한다.

사용법
       #include <unistd.h>

       int brk(void *end_data_segment);

       void *sbrk(ptrdiff_t increment);

설명
       brk 은데이터 세그먼트의 끝을 end_data_segment으로지정된 값으로 설정한다. 

       end_datasegment는텍스트 세그먼트의 끝보다 커야 하며 스택의 끝보다 16kB 앞에 있어야 한다.

       sbrk는 increment 바이트만큼 프로그램의 데이터 공간을 증가시킨다. 

       sbrk는시스템 콜이 아니며, 단지 C 라 이 브 러 리   레퍼(wrapper) 함수이다.

반환값
       성 공 시,  brk 는 0을 리턴하며, sbrk는새로운 영역의 시작을 가리키는 포인터를 리턴한다. 

       에러시, -1이 리턴되며, errno는 ENOMEM 으로 설정된다.

호환
       BSD 4.3 brk와 sbrk는 C 표준에 정의되어 있지 않으며 POSIX.1 표준에서도 제외되었다. 

       (paragraphs B.1.1.1.3과 B.8.3.3  참조하라)

관련 항목
       execve(2), getrlimit(2), malloc(3)

 

 

 

여기서 데이터 세그먼트의 크기라는 것의 개념이 좀 안잡히네요 ㅡ_ㅡ;;;

누가 좀 구체적으로 설명해주실 수 있나요 ?

 

 

 



 


이상훈

2010.03.17 00:53:05
*.36.40.20

여기서 segment의 개념이 좀 와닿지 않네요 ...

Binary File의 Section에 대한 소리인가요 ?

 

object.o와 link.o 라는 2개의 object 파일이 있을때,

end_data_segment라 함은 각 object 파일에서 .data Section의 끝 부분을 의미하는건지요 ?

 

근대 생각을 해보면, brk 관련된 녀석들은 Memory 영역중 Heap과 관련되어있는데,

위의 부분이 무슨 뜻을 의미하는지 와닿지가 않습니다.

김남형

2010.03.17 15:30:36
*.176.78.91

brk/sbrk는 heap 영역의 크기를 조정하기 위한 함수입니다.

기본적으로 각 object 파일의 .data와 .bss 섹션은 링크 과정에서 데이터 세그먼트로 합쳐집니다.

그 뒤로는 heap 영역이 시작되는데 brk/sbrk를 이용하여 그 크기를 변경할 수 있습니다.

이상훈

2010.03.17 19:42:18
*.36.40.20

아하 data segment 이후에 heap이 시작되기 때문에 저런 표현을 한것이군요 ㅎㅎ

감사합니다 ^^

List of Articles
번호 제목 글쓴이 날짜 조회 수
102 Linker Script부분과 종합된 질문 [4] 이상훈 2010-03-17 1037
» sbrk() 의 정확한 역할 ... [3] 이상훈 2010-03-17 1071
100 엄청난 오개념 [4] 이상훈 2010-03-16 986
99 커널 스터디 관련 질문입니다. [1] 이준명 2010-03-16 965
98 용어적인 질문 [2] 이상훈 2010-03-16 938
97 spin_lock , zone, cgroup 에 관한질문.. [4] 강진성 2010-03-13 1087
96 환경 변수 설정관련 질문 ... [3] 이상훈 2010-03-11 967
95 네트워크 인터페이스 할당 변경에 관련하여 문의드립니다. [3] 송인재 2010-03-10 1024
94 percpu_read 와 __attribute__(__section__) [5] 이상훈 2010-03-08 1123
93 cpu_number 정의가 어디있는건가요 ? [2] 이상훈 2010-03-07 1001
92 add_preempt_count() 에 대해서 ... [3] 이상훈 2010-03-07 1043
91 기계어 질문 [7] 이상훈 2010-03-06 1072
90 스터디 시간 좀 늦춰주실 수 없나요 ? [3] 이상훈 2010-03-06 956
89 백창우님 질문입니다 [4] 이상훈 2010-03-06 1103
88 __ASSEMBLY__ 의 의미는 무엇인가요 ? [2] 이상훈 2010-03-05 1121
87 신기한 것 발견 ... [2] 이상훈 2010-03-03 1230
86 제일 궁금한부분입니다 ㅡ_ㅡ;;; [2] 이상훈 2010-03-03 998
85 질문입니다 [2] 이상훈 2010-03-02 1019
84 $(TOPDIR)/Makefile 질문 [4] 이상훈 2010-03-02 1044
83 모듈 단위로 분석하는 것의 한계점 [5] Linux 2010-02-28 1053



XE Login