2014-07-18 1 views
0

의이 코드를 생각해 보자 : 첫 번째 줄에서alloc_pages가있는 페이지를 할당해도 구조체가 할당됩니까?

struct page * str_page = alloc_pages(some flags, 4); 
str_page++; 

이 할당 될 것 16 페이지가 먼저 할당 된 페이지의 struct page에 대한 포인터가 str_page에 저장됩니다.
그런 다음이 포인터를 증가시키고이 구조의 뒤쪽을 가리 킵니다.
이제 두 번째 할당 페이지의 struct page을 가리키고 있습니까?

일반 질문은 또한 할당 된 모든 할당 된 페이지에 대한
합니까 구조체 alloc_pages() 또는 이러한 구조체는 사실에 의해 커널 이전의 할당 및 처리?

답변

1

는 두 번째 할당 페이지의 페이지를 구조체 지금 가리키고의 크기에 의해 포인터의 주소를 증가?

일반적으로 그렇습니다. 주로 alloc_pages가 인접한 페이지를 할당하기 때문에 (sparse/scattered 대 vs)이 방법으로 구현하는 것이 이치에 맞습니다.

그러나, 그렇게하는 것이 좋습니다. 특정 물리적 페이지의 구조 페이지를 얻고 싶다면 대신 pfn_to_page/phys_to_page를 사용해야합니다 (역 동작의 경우 분명히 page_to_phys/page_to_pfn). 구조체 페이지가 메모리에 어떻게 배치되는지는 아무런 보장이 없다고 생각합니다.

할당 된 모든 페이지에 대한

합니까 구조체도 alloc_pages (할당 됨) 또는 이러한 구조체는 실제로 커널에 의해 이전에 할당하고 그것에 의해 처리

?

미리 할당 된 페이지에 대한 참조 일뿐입니다. 실제 페이지는 커널에 의해 부팅시에 할당되었고 이후로 커널에 의해 관리됩니다.

0

다음은 페이지가 인접 제안하는 것 같다

http://www.makelinux.net/books/lkd2/ch11lev1sec3

str_page 포인터를 증가하는 것은, 크기 str_page하여 값을 증가 메모리에 당신에게 다음 페이지를 제공하는 것을 의미한다 그.

c에서 동작합니다. 당신이 유형에 대한 포인터를 증가 할 때 해당 유형

관련 문제