__get_free_pages( GFP_KERNEL, order );
어제 공부하는데 아래 문장에
"order = get_order(8192*10);" 부분이 이해가 안갑니다....
저기 8192 가 의미하는 것은 무엇인지..그리고 곱하기 10은 무엇을 의미하는지 모르겠습니다;;
buff = __get_free_pages( GFP_KERNEL, order ); 함수랑 관계가 있다고 하는데
책에는 설명이 차수를 대신 계산해서 order에 넣어준다고 나와 있거든요..
그런데 차수가 무엇을 말하는지 모르겠어요...
도대체 개념이 안서니깐;;ㅠ
아시는 분 좀 가르쳐 주세요...
아래는 원문입니다..
##################################################################################
#define MODULE
#include
#include
#include
#include
#include
void kmalloc_test( void )
{
char *buff;
printk( "kmalloc test\n" );
buff = kmalloc( 1204, GFP_KERNEL );
if( buff != NULL )
{
sprintf( buff, "Small Memory Ok\n" );
printk( buff );
kfree( buff );
}
buff = kmalloc( 32 * PAGE_SIZE, GFP_KERNEL );
if( buff != NULL )
{
printk( "Big Memory Ok\n" );
kfree( buff );
}
}
void vmalloc_test( void )
{
char *buff;
printk( "vmalloc test\n" );
buff = vmalloc( 33 * PAGE_SIZE );
if( buff != NULL )
{
sprintf( buff, "vmalloc test ok\n" );
printk( buff );
vfree( buff );
}
}
void get_free_pages_test( void )
{
char *buff;
int order;
printk( "get_free_pages test\n" );
order = get_order(8192*10);
buff = __get_free_pages( GFP_KERNEL, order );
if( buff != NULL)
{
sprintf( buff, "__get_free_pages test ok [%d]\n", order );
printk( buff );
free_pages(buff, order);
}
}
int init_module(void)
{
char *data;
printk("Module Memory Test\n" );
kmalloc_test();
vmalloc_test();
get_free_pages_test();
return 0;
}
void cleanup_module(void)
{
printk("Module Memory Test End\n");
}
#####################################################################################
__get_free_pages 이
__get_free_pages
이 펑션은 물리적으로 연속된 메모리를 가져올때 주로 사용합니다
우선 리눅스에서는 메모리를 PAGE_SIZE (4kbyte)로 관리하는건 하시는건 아시죠?
리눅스에서 사용하지 않는 물리메모리 관리는 외부 단편화를 줄이기 위해 Buddy system(버디 알고리즘)을 사용하는데
이 버디 시스템이 메모리를 관리할때 PAGE_SIZE * 2의 x자승(- -;;)으로 비어 있는 물리 메모리를 관리하게
됩니다.
위 Function의 경우 buddy system에게 메모리를 요구하기 때문에 order 즉 위에서 말하는 x값 단위로
메모리를 요구하게 됩니다.
수고하세요
댓글 달기