2017-12-17 3 views
2

리눅스 커널의 버디 시스템 할당 자와 관련하여 의심의 여지가 있습니다. 리눅스 커널의 버디 시스템 할당 자

enter image description here

버디 시스템은 할당 된 1백28킬로바이트의 RAM이 있다고 가정 :

이 예를 생각해 보자. kmalloc을 사용하여 32KB를 할당 한 경우, 내 이해는

128KB는 1 단계에서 두 개의 64KB로 분할되고 첫 번째 64KB는 두 개의 32KB로 분할됩니다. 그러면 처음 32KB가 할당됩니다.

확실히 96KB의 연속 메모리를 사용할 수 있습니다.

지금이 단계에서 90KB를 할당하면 어떻게됩니까? kmalloc 실패 또는 버디 (또는 심지어 슬랩) 할당자가이 문제를 처리하고 요청 된 메모리를 성공적으로 할당합니까?

답변

0

처음 32KB가 지나면 64KB를 초과하여 할당 할 수 없습니다. kmalloc()nullptr을 반환합니다.

이것은 버디 할당 자에게 해당됩니다. 슬랩 할당자는 다르게 작동하지만 주제는 없습니다.