본문으로 바로가기

[Kernel] Linux kernel (13) - Slab object

category Kernel & Browser/Kernel 2020. 12. 27. 21:02

Kernel Slab 할당자와 메모리 관리

Slab 이론

커널에서는 kmalloc() 함수를 호출해 동적 메모리를 할당 받습니다.

일반적으로 userland glibc에서 이루어지는 ptmalloc과는 큰 차이점이 있습니다. ptmalloc의 기본적인 아이디어는 여러 메모리 구역을 여러개의 청크(chunk)로 나누어 메모리를 할당하고, 해제할 때 청크를 구분하고 회수하는 작업 등을 하는 것 입니다.

이와 다르게 kernel에서는 Slab 메모리 할당자로 메모리를 관리합니다. 슬랩의 주요 특징은 아래와 같습니다.

  1. 자주쓰는 메모리 패턴을 정의한 후, 미리 할당해 놓자.

  2. (1)에 대한 메모리 할당 요청이 있으면, 바로 메모리를 할당해준다.

  3. 해당 패턴으로 메모리를 해제하면, 메모리를 초기화 하지 않고, 다음 요청을 기다린다. 또 다시 해당 메모리를 할당 할 가능성이 있기 때문이다.

특히, Slab cache라는 개념이 있는데, 커널에서 자주 쓰는 구조체 패턴에 따라서 미리 할당 한 후 이미 할당한 메모리 주소를 알려주는 기법입니다.


Slab을 이루는 주요 개념

  • 메모리 할당 속도

  • 메모리 fragmentation 최적화


Slab 메모리 할당 예시

https://ptr-yudai.hatenablog.com/entry/2020/03/16/165628

task_struct 등


Slab object Off-by-one