2013-06-20 4 views
3

저는 리눅스 커널 소스의 perf 소스를 통해 사용자 공간 탐색이 어떻게 구현되는지 알아 보려고합니다. 많은 곳에서이 문제가 발생했습니다 :zalloc에 ​​의한 메모리 할당

zalloc(sizeof(struct __event_package) * npevs); 

나는 zlib 라이브러리 (fedora 18)에 위치한다고 생각합니다. 아무도 내 zalloc이 메모리를 할당하는 데 어떻게 도움이되는지 말해 줄 수 있습니까? 당신이 link:

할당을 참조 할 수 있습니다

답변

1

사전에 덕분에 ... 다른 힙 할당과 동일합니다. 커널 공간에서 힙은 많은 여유 목록으로 나뉘며 각 여유 목록에는 연결된 목록으로 연결된 동일한 크기의 블록이 있습니다.

For eg: 
Freelist1 - 4 bytes/block x 10 blocks 
Freelist2 - 8 bytes/block x 10 blocks 
Freelist3 - 16 bytes/block x 10 blocks 
.... 
Freelist10 - 1024 bytes/block x 10 blocks 

각각의 무료 목록 석판 (slab allocator)를 나타내며, 그래서 buddy system

을 활용, 하나는 zalloc을 수행 할 때, 먼저이 요청을 이행 할 수있는 크기 가능리스트를 결정하고 그것에서 자유 블록을 찾아 .

일부 사용자 정의 커널 구현에서 heap은 커널 & 다른 서비스로 나뉩니다. 이 경우 * alloc은 요청을 수행하기 위해 액세스 할 힙을 알아야합니다.

+0

고맙습니다. –