[OS] Slab Allocation

dandb3·2023년 3월 29일
0

Operating system

목록 보기
27/31
post-custom-banner

slab : 하나 이상의 physically contiguous pages로 구성됨

cache : 하나 이상의 slab으로 구성됨

  • unique kernel data structure마다 cache가 존재
  • cache가 나타내는 자료구조의 instance로 구성되어 있다.
  • 할당 원리
    • cache가 만들어짐 -> free 상태인 객체들이 cache에 할당됨. (cache는 slab로 구성되므로 slab의 크기에 맞는 수의 객체가 생성됨.)
    • new object for a kernel data structure가 필요해짐 -> cache에 있는 free object가 할당됨 -> used로 상태가 바뀐다.

slab의 상태?

  1. Full
    • slab의 모든 object가 used 상태
  2. Empty
    • slab의 모든 object가 free 상태
  3. Partial
    • slab은 free, used상태를 모두 포함하고 있음.
  • 할당 순서
    • Partial -> partial이 없다? -> Empty -> Empty도 없다? -> 새로운 slab이 contiguous physical pages에서 할당되서 cache에 assign되고, 이 empty slab에서 할당된다.

Slab allocator의 장점

  1. fragmentation에 의한 메모리 낭비가 없다.
    • 애초에 각 자료구조에 맞춰서 설계를 했기 때문에 딱 요청된 자료구조의 사이즈 만큼이 할당된다.
  2. 메모리 요청이 빠르게 이루어진다.
    • 자주 할당/할당 해제가 이루어질 때 굉장히 효과적이다. (특히 커널에서는 이런 상황이 자주 발생함.)
    • 요청을 할 때 마다 메모리를 할당하고 할당 해제하는 것이 아닌, 미리 cache에 할당을 해 놓았다가 필요시에 제공만 해주고, 마찬가지로 메모리를 할당 해제하는 것이 아니라 다시 cache에 돌려놓기만 하면 되기 때문.

실제 예시

  • 최신 리눅스의 경우 SLAB이 아니라 SLOB, SLUB allocator도 포함한다.
    • SLOB : Simple List Of Blocks
      • 주로 임베디드 시스템에 사용됨.
    • SLUB : 대충 SLAB 상위호환.

참고 자료

  • Abraham Silberschatz, Operating System Concepts, 10th edition
profile
공부 내용 저장소
post-custom-banner

0개의 댓글