-
[OS] 커널 메모리 할당 방식(Buddy, Slab)운영체제 2020. 11. 27. 03:14728x90
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 보다 더 빠름
'운영체제' 카테고리의 다른 글
[OS] 유저스레드와 커널스레드 (0) 2020.11.27 [OS] 멀티스레드 개념 (동시성 vs 병렬성) (1) 2020.11.27 [OS] 페이지 Thrashing, Working-Set, PFF (0) 2020.11.27 [OS] 프로세스의 물리 메모리 할당 (0) 2020.11.27 [OS] Page replacement (0) 2020.11.26 -