본문 바로가기
반도체 그 다음 학문/운영체제 (OS)

운영체제 Kernel Memory ( Buddy System, Slab Allocator )

by 전컴반 2022. 6. 8.
반응형
Allocating Kernel Memory

 

결국 kernel도 메모리에 존재하고 코드가 수행돼야 한다. 커널도 메모리 할당을 받아야 하기 때문에 어떻게 메모리를 할당받는지 보자.

많은 kernel에서의 코드들은 paging을 사용하지 않는다. 왜냐면 page in, page out 같은 동작을 하면 느려지기 때문이다. kernel 코드의 처리가 시스템 전체에 영향을 미치기 때문에 속도가 굉장히 중요하다.

 

그럼 어떻게 메모리 할당이 이루어질까?? 

2가지 방법이 있는데 하나는 Buddy System이고 다른 하나는 Slab Allocator이다. 

 

 

Buddy System

 

고정된 크기의 segment를 할당해준다. 고정된 크기라 함은 2의 지수성 크기를 가지고 할당해준다. 최소 4K 이상을 가진다. 

 

만약 요청된 사이즈가 3K일지라도 올림 하여 4K를 할당해준다. 그런데 만약 3K가 왔는데 128K를 가지고 있다면, 128K를 다 할당해주기엔 너무 비효율적이다. 그래서 Buddy는 2씩 메모리를 나눌 수 있데. 128K를 64K 2개로 나누고, 또 64K를 32K 2개로 나눠가며 최소의 size를 찾는다. 단 한쪽만 나눠지는 게 아니라 모두 짝을 맞춰서 나눠진다.

 

아래 그림을 보면 더 이해가 쉬울 것이다. 21K의 요청이 왔을 때 256K를 어떻게 나눠가는지 그림으로 나타냈다.

 

 

이렇게 같은 size로 짝을 지어 나눠지기 때문에 buddy라는 이름이 붙었다.

 

장점으로는 큰 size의 요청이 왔을 때, 합쳐서 size를 늘려 제공을 빠르게 해 줄 수 있다. 위와 같은 예시에서 21K를 할당하기 위해 32K 8개로 나눴을 때 64K의 요청이 왔다면, 32K 2개를 합쳐서 64K에게 할당해줄 수 있다. 

 

 

Slab Allocator

 

2가지 중요 용어를 알아야 하는데

Slab라는 용어는 물리적으로 연속된 메모리로 구성돼 있는 영역이다. 

slab Cache라는 용어는 우리가 알고 있는 물리적 cache가 아니라 slab에서 사용되는 하나의 임시 보관소 개념의 용어이다. 

 

slab은 미리 다양한 사이즈의 cache를 만들어 놓는 것이다. 즉 하나의 kernel data structure에 대한 빈 object ( structure )를 만들어 놓는다. kernel에서 자주 사용되는 structure를 미리 만들어놓으면 요청이 있을 때 바로바로 할당해주면 된다. 그리고 사용이 완료되면 회수하는 형식으로 하면 굉장히 빠르게 처리할 수 있다.

 

이렇게 되면 다양한 size를 만들어 놓을 수 있기 때문에 fragmentation을 줄일 수 있고, 메모리 요청에 대해서 빨리 처리할 수 있다.

 

 

위 그림에서 보면 kernel object에 요청이 오면 미리 만들어 놨던 slab 중에 하나를 할당해준다.

 

 

반응형

댓글