kmalloc 예제

이러한 하위 수준 페이지 함수는 물리적으로 연속된 페이지의 페이지 크기 청크가 필요한 경우 특히 한 페이지 또는 두 페이지가 필요한 경우에 유용합니다. 보다 일반적인 바이트 크기 할당의 경우 커널은 kmalloc()를 제공합니다. __GFP_HIGHMEM을 __get_free_pages() 또는 kmalloc()로 지정할 수 없습니다. 이 두 가지 모두 페이지 구조가 아닌 논리 주소를 반환하기 때문에 이러한 함수는 현재 커널의 가상 주소 공간에 매핑되지 않은 메모리를 할당할 수 있으므로 논리 주소가 없을 수 있습니다. alloc_pages()만 높은 메모리를 할당할 수 있습니다. 그러나 대부분의 할당은 ZONE_NORMAL이 충분하기 때문에 영역 수정자를 지정하지 않습니다. 플래그는 작업 수정자, 영역 수정자 및 유형의 세 가지 범주로 나뉩니다. 작업 수정자는 커널이 요청된 메모리를 할당하는 방법을 지정합니다. 특정 상황에서는 메모리를 할당하기 위해 특정 메서드만 사용할 수 있습니다. 예를 들어 인터럽트 처리기는 메모리를 할당하는 과정에서 인터럽트 처리기가 일정을 변경할 수 없기 때문에 커널에 절전 모드가 되지 않도록 지시해야 합니다. 영역 수정자는 메모리를 할당할 위치를 지정합니다. 이 장의 앞에서 설명한 것처럼 커널은 실제 메모리를 여러 영역으로 나누며 각 영역은 서로 다른 용도로 사용됩니다.

영역 수정자는 이러한 영역 중 할당할 영역을 지정합니다. 형식 플래그는 특정 유형의 메모리 할당에서 필요에 따라 작업 및 영역 수정자의 조합을 지정합니다. 형식 플래그는 수많은 수정자를 지정하는 것을 단순화합니다. 대신 일반적으로 하나의 형식 플래그만 지정합니다. GFP_KERNEL은 커널 내부의 프로세스 컨텍스트에서 코드에 사용되는 형식 플래그입니다. 깃발을 살펴보겠습니다. kmalloc 및 _get_free_pages에서 사용하는 (가상) 주소 범위는 상수 PAGE_OFFSET 값으로 이동될 수 있는 실제 메모리에 대한 일대일 매핑을 특징으로 합니다. 함수는 해당 주소 범위에 대한 페이지 테이블을 수정할 필요가 없습니다. 반면 vmalloc 및 ioremap에서 사용하는 주소 범위는 완전히 합성되며 각 할당은 페이지 테이블을 적절하게 설정하여 (가상) 메모리 영역을 구축합니다.

어쨌든 kmalloc에서 할당할 수 있는 최대 크기는 128KB이며 2.0 커널로 약간 적습니다. 그러나 몇 킬로바이트 이상이 필요한 경우 다음에 설명된 대로 kmalloc보다 메모리를 얻는 더 좋은 방법이 있습니다. 사용자 공간에서 free()와 마찬가지로 이미 해제된 메모리 블록또는 kmalloc()에서 반환된 주소가 아닌 포인터에서 kfree()를 호출하는 것은 버그이며 메모리가 손상될 수 있습니다. 항상 할당의 균형과 해제를 통해 kfree()가 올바른 포인터에서 정확히 한 번 호출되도록 합니다. null에서 kfree()를 호출하는 것은 명시적으로 검사되며 반드시 합리적인 생각은 아니지만 안전합니다. lookaside 캐시 기능은 Linux 2.1.23에 도입되었으며 2.0 커널에서는 사용할 수 없었습니다. Linux 2.0으로 다시 이식해야 하는 코드는 kmalloc 및 kfree를 고수해야 합니다. 또한 kmem_destroy_cache는 2.3 개발 중에 도입되었으며 2.2.18현재 2.2로만 백포트되었습니다. 이러한 이유로 스컬은 그보다 오래된 2.2 커널로 컴파일을 거부합니다.

연속 메모리 영역을 할당하는 마지막 옵션, 그리고 아마도 가장 쉬운, 실제 메모리의 끝에 메모리 영역을 예약하는 것입니다 (bigphysarea는 실제 메모리의 시작 부분에 예약하는 반면). 이 목표를 위해 관리되는 메모리 양을 제한하려면 커널에 명령줄 옵션을 전달해야 합니다. 예를 들어 작성자 중 한 명이 mem=126M을 사용하여 실제로 128MB의 RAM이 있는 시스템에서 2메가바이트를 예약합니다.

0saves
If you enjoyed this post, please consider leaving a comment or subscribing to the RSS feed to have future articles delivered to your feed reader.

Comments are closed.