sbrk
sbrkbrk 및 sbrk는 프로세스의 데이터 세그먼트에 할당된 메모리 양을 제어하기 위해 Unix 및 Unix 유사 운영 체제에서 사용되는 기본 메모리 관리 시스템 호출이다.[1]이러한 기능은 일반적으로 malloc와 같은 높은 수준의 메모리 관리 라이브러리 기능에서 호출된다.원래의 유닉스 시스템에서는 brk와 sbrk가 응용 프로그램이 추가 데이터 공간을 획득할 수 있는 유일한 방법이었다. 이후 버전에서는 mmap 호출을 사용하여 이 작업을 수행할 수 있도록 허용했다.[2][3]
설명
brk와 sbrk 호출은 호출 프로세스의 데이터 세그먼트에 할당된 공간의 양을 동적으로 변경한다.프로세스의 프로그램 중단을 재설정하여 변경이 이루어지며, 이는 할당할 수 있는 최대 공간을 결정한다.프로그램 중단은 데이터 영역의 현재 끝을 벗어난 첫 번째 위치의 주소다.브레이크 값이 증가함에 따라 사용 가능한 공간의 양이 증가한다.사용 가능한 공간은 지정되지 않은 방식으로 동일한 페이지를 재사용할 수 있기 때문에 휴식 시간을 낮춘 다음 증가시키지 않는 한 0의 값으로 초기화된다.브레이크 값은 메모리 관리 아키텍처에 적합한 크기로 자동 반올림할 수 있다.[4]
sbrk와 brk는 1997년 표준에서도 유산으로 간주되었다([5]단일 유닉스 규격 v2 또는 POSIX.1-1998)그것들은 POSIX.1-2001에서 제거되었다.[6]
함수 서명 및 동작
#include <유니스트드>.h> 인트로 대머리(공허하게 하다* end_data_message); 공허하게 하다 *sbrk(intptr_t 증분하다);
sbrk는 음의 크기를 추가하여 프로그램 중단 값을 조정하는 데 사용되는 반면 brk는 중단 값을 포인터 값으로 설정하는 데 사용된다.세트increment프로그램 중단의 현재 값을 가져오는 매개 변수를 0으로 설정하십시오.
성공적으로 완료되면 brk 서브루틴은 0의 값을 반환하고, sbrk 서브루틴은 프로그램 중단의 이전 값을 반환한다(사용 가능한 공간이 늘어난 경우 이 이전 값도 새로운 영역의 시작을 가리킨다).서브루틴 중 하나에 실패하면 -1의 값이 반환되고 에러노 글로벌 변수가 오류를 나타내도록 설정된다.[5]
모든 유닉스 시스템이 사용자가 데이터 세그먼트를 제어하도록 하는 개념을 즐기는 것은 아니다.sbrk의 Mac OS X 구현은 에뮬레이션이며 최대 4메가바이트의 할당량을 가진다.첫 번째 호출 시 정확히 이 크기의 영역이 시뮬레이션된 세그먼트를 보유하도록 할당된다.이 한계에 도달하면 -1이 반환되고 에러노가 ENOMEM으로 설정된다. brk 항상 오류.[7]
에러코드
다음 중 하나 이상이 참일 경우 오류 ENOMEM이 설정되고 할당된 공간은 변경되지 않은 상태로 유지됨:
- 요청된 변경은 시스템에 의해 허용된 최대 공간보다 더 많은 공간을 할당한다.
- 요청된 변경은 브레이크 값을 연결된 공유 메모리 세그먼트의 시작 주소보다 크거나 같은 값으로 설정한다.
참고 항목
참조
- ^ "Process Memory Concepts". Free Software Foundation. Retrieved 9 October 2015.
- ^ "A new malloc(3) for OpenBSD" (PDF). Retrieved 13 June 2018.
- ^ "POSIX Memory Management". blog.pr4tt.com.
- ^ X/Open CAE Specification, System Interfaces and Headers (PDF) (2 ed.). X/Open Company Ltd., U.K. September 1994. p. 64. Retrieved 9 October 2015.
- ^ a b "brk, sbrk - change space allocation (LEGACY)". The Single UNIX ® Specification, Version 2. 1997. Retrieved 30 November 2019.
- ^ Linux Programmer's Manual – System Calls –
- ^ "BRK.c".