41_커널 메모리 할당
사용자 모드에서 수행중인 프로세스가 추가적인 메모리를 요구하면 커널이 관리하는 자유 페이지 프레임의 리스트에서 페이지들이 할당된다. 페이지 교체 정책으로 인하여 물리 메모리 상에 흩어져 있는 자유 페이지들로 채워진다. 사용자 프로세스가 1바이트만 필요하더라도 프로세스가 한 페이지 프레임을 할당 받았으므로 내부 단편화가 발생 한다.
- 가상 메모리 프레임 할당 : http://sqlmvp.kr/140192392430
커널 메모리는 보통 사용자 모드 프로세스에게 할당해 주기 위한 페이지 리스트와는 별도의 자유 메모리 풀에서 할당 받는다. 이는 다양한 크기의 자료 구조를 할당 할 수 있으며 단편화에 의한 낭비를 최소화 한다. 또한 사용자 모드 프로세스에 할당되는 페이지들은 물리 메모리에서 굳이 연속된 것일 필요가 없기 때문이다.
커널 프로세스에서 할당되는 메모리를 관리하는 기법에는 [버디 시스템]과 [슬랩 할당] 이 있다.
[버디 시스템]
버디 시스템은 물리적으로 연속된 페이지들로 이루어진 고정된 크기의 세그먼트로부터 메모리를 할당 한다. 메모리는 세그먼트로부터 2^n 단위로(4KB, 8KB, 16KB..) 할당 된다.
예를 들어 메모리 세그먼트의 크기는 초기에 256KB라고 가정하고 커널이 21KB의 메모리를 요구했다고 하였을 때 세그먼트는 128KB의 두 개의 버디(buddy)로 나누어 진다. 그 중 하나는 다시 64KB의 버디로 나누어지고 21KB에 가장 가까운 크기는 32KB 이므로 64KB는 다시 32KB의 버디로 나누어 진다. 32KB의 버디 중 하나가 21KB 요구 사항을 처리하기 위해 사용 된다.
버디 시스템의 이점 중 하나는 합병(coalescing)이라는 과정을 통해 서로 인접한 버디들이 쉽게 하나의 큰 세그먼트로 합쳐질 수 있다는 것이다. 단점으로는 가장 가까운 2^n으로 올림이 할당된 세그먼트 내의 단편화를 가져온다는 것이다.
[슬랩 할당(Slab Allocation)]
슬랩(slab)은 하나 또는 그 이상의 물리적으로 연속된 페이지들로 구성 된다. 캐시(cache)는 하나 혹은 그 이상의 슬랩들로 구성된다, 각 커널 자료구조마다 하나의 캐시가 존재 한다. 각 캐시는 커널 자료 구조의 각 instantiation에 해당하는 객체들로 채워져 있다.
슬랩 할당 알고리즘은 커널 객체를 저장하기 위해 캐시를 사용한다. 캐시가 생성되면 초기에는 자유(free)라고 표시된 몇 개의 객체들이 캐시에 할당 된다. 캐시 내의 객체의 수는 해당 슬랩의 크기에 좌우 된다. 할당된 객체는 사용(used)이라고 표시 한다.
슬랩 할당기는 두 가지 주요 장점이 있다.
- 단편화에 의해 낭비되는 메모리가 없다. 커널이 메모리 할당을 요구할 때마다 슬랩 할당기는 정확히 필요한 만큼의 메모리만을 할당 한다.
- 메모리 요청이 빠르게 처리 된다. 객체들은 미리 생성되어 있고 캐시에서 쉽게 할당이 가능하다. 사용 후에는 캐시 상태로 반환되어 다음 요구 시 즉시 할당 가능하게 된다.
슬랩 할당기는 Solaris 2.4 커널에서 처음 도입 되었으며 범용적인 특성 때문에 특정한 사용자 모드 메모리 요청을 처리하는 데도 사용되고 있다. Linux도 원래 버디 시스템이었지만 2.2 버전부터 슬랩 할당기를 채택 하였다.
[참고자료]
Operating System Concepts / 홍릉과학출판사
'SW Engineering > OS Concept' 카테고리의 다른 글
43_파일 접근 방법 (Access Method) (0) | 2015.07.16 |
---|---|
42_파일 개념 (File Concept) (0) | 2015.07.16 |
40_가상 메모리 매핑 파일 (memory Mapped File) (0) | 2015.07.16 |
39_가상 메모리 쓰레싱(Thrashing) (0) | 2015.07.16 |
38_가상 메모리 프레임 할당 (Allocation of Frame) (0) | 2015.07.16 |