ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [OS] 커널 메모리 할당 방식(Buddy, Slab)
    운영체제 2020. 11. 27. 03:14
    728x90

    KernelMemory

    사용자 모드의 프로세스가 추가적인 메모리를 요구하면 커널 페이지 프레임을 넘겨줌

     

    커널 메모리의 특징

    • 사용자 모드 프로세스와 달리 메모리 풀에서 할당하는 정책 사용

    • 커널은 다양한 자료구조를 사용하지만 대충 필요한 메모리의 양이 정해져 있기에 이를 고려하고 적절히 할당됨

    • 일반 프로세스의 페이지는 연속적일 필요가 없으나 커널은 하드웨어와 직접 상호작용하기에 물리적으로 연속적인 페이지 프레임을 할당 받음

    Buddy System Allocator

    2의 지수승으로 커널 프로세스에 메모리를 할당하는 방식

    256 KB 는 물리적으로 연속적인 페이지임.

    요청된 메모리 크기를 수용할 수 있는 최소 크기로 메모리를 쪼개어 할당하며 그러한 메모리 조각을 buddy 라고 부름

    작업 종료 후 원본 buddy 와 합치기 좋다는 장점이 있으며, 단점으로는 buddy로 인해 internal fragmentation 이 생길 수 있다는 것 + buddy 생성 시 오버헤드가 크다는 점 (메모리를 쪼개야 하니까)

    Slab allocator

    Slab = 하나 이상의 연속된 페이지로 구성된 페이지 집합

    Cache  = 하나 이상의 Slab 으로 구성된 slab 집합

    각 커널 구조(File descriptor, File 객체, Semaphore 등)마다 Cache 가 존재함

    Slab 상태 = Full(모든 페이지가 사용 중임), Empty, Partial(일부 페이지만 사용 중임)

    캐시에서 추가적인 메모리가 필요한데 slab 을 모두 사용했다면 추가적인 slab 을 할당해줌. Partial slab 부터 할당해주고 난 뒤에 Empty slab 을 할당해줌

    이는 internal fragmentation 을 줄이기 위함임 게다가 이미 정해진 크기의 자료구조를 할당만 해주는 것이기 때문에 Buddy allocator 보다 더 빠름

     

    댓글

Designed by Tistory.