본문 바로가기

Programming/Linux_Kernel

[linux kernel] memory zone

원문 : http://rousalome.egloos.com/10002612

 

[리눅스커널] 메모리관리: 메모리 존(Zone) 종류와 개념 소개

리눅스 메모리 시스템에서 존(Zone)은 유사한 속성의 페이지들을 집합입니다.  커널에서 페이지들을 다음과 같은 존으로 나눠서 관리합니다.  ZONE_NORMAL  ZONE_HIGH_MEM  ZOME_MOVEABLE   다음 그림은 존과 페이지과의 관계도입니다.    [그림 14.22] 존과 페이지와의 관계 위 그림에서

rousalome.egloos.com

리눅스 메모리 시스템에서 존(Zone)은 유사한 속성의 페이지들을 집합입니다.

커널에서 페이지들을 다음과 같은 존으로 나눠서 관리합니다.

ZONE_NORMAL

ZONE_HIGH_MEM

ZOME_MOVEABLE

 

다음 그림은 존과 페이지과의 관계도입니다. 

 

[그림 14.22] 존과 페이지와의 관계

 

위 그림에서 보이듯 하나의 존 내부에 여러 개 페이지들이 속해 있습니다. 이렇게 존(Zone)은 비슷한 속성의 여러 개 페이지들을 관리하기 위한 자료구조이자 메모리 계층입니다. 리눅스 커널에서 존은 시스템 관점으로 메모리 사용량을 볼 수 있는 미니맵입니다.

 

이번 절에서는 존의 개념과 자료 구조와 관련 소스 코드를 분석하겠습니다.

 

메모리 존(Zone) 종류와 개념 소개

 

리눅스 시스템에서는 비슷한 속성의 페이지들을 묶어서 존으로 관리하는데 존의 종류는 다음과 같습니다. 

ZONE_NORMAL

ZONE_HIGH_MEM

ZOME_MOVEABLE

 

먼저 ZONE_NORMAL 부터 살펴보겠습니다.

 

ZONE_NORMAL 존 

물리주소와 1:1로 매핑돼 있는 구간의 페이지입니다. 보통 커널 코드에서 메모리를 할당하면 접근하는 구역입니다. 커널에서 메모리를 할당할 때 가장 빨리 할당해 줄 수 있습니다.

 

ZONE_HIGH_MEM 존  

ZONE_NORMAL이 처리하지 못하는 나머지 메모리 영역은 ZONE_HIGHMEM으로 구성됩니다.

라즈베리파이와 같은 32bit 커널 시스템에서는 모든 커널 가상 주소를 1:1으로 매핑할 수 없습니다. ZONE_NORMAL을 초과하는 메모리가 이 영역을 사용합니다.

 

ZOME_MOVEABLE

버디 시스템으로 구현된 페이지 할당자가 메모리 파편화를 막기 위해 이 영역을 전용으로 사용합니다.

 

유저 프로세스 메모리를 할당하려 할 때 먼저 ZONE_HIGHMEN 영역의 메모리를 먼저 소모합니다. 만약 ZONE_HIGHMEN 존에 있는 메모리를 모두 쓰면 ZONE_NORMAL 영역 메모리를 씁니다.

 

 

64비트 아키텍처에서는 모든 물리 주소는 1:1로 가상 주소에 매핑됩니다. 따라서 ZONE_HIGHMEM을 쓰지 않습니다. 

 

 

"혹시 궁금한 점이 있으면 댓글로 질문 남겨주세요. 아는 한 성실히 답변 올려드리겠습니다!" 

 

Thanks,

Austin Kim(austindh.kim@gmail.com)