페이지 캐시 된 파일의 주소 공간에서 struct page
을 얻었습니다.구조 페이지에서 관련 데이터의 실제 주소를 얻는 방법은 무엇입니까?
이 struct page
에서 4KB 데이터의 시작 실제 주소를 어떻게 얻을 수 있습니까?
struct sk_buff
안에 data
포인터가 있어야한다고 생각하지만 찾지 못했습니다.
답변에 대한 편집
감사 매트와 llya.
답변을 살펴본 후 struct page
이 ZONE_NORMAL
또는 ZONE_HIGHMEM
에 있는지 여부를 확인하는 것이 가장 먼저 생각한 문제입니다.
파일 I/O 중에 캐시 된 페이지를 찾지 못한 경우 먼저 page_cache_alloc_cold()
을 사용하여 새 페이지를 할당합니다. page_cache_alloc_cold()
은 마침내 ZONE_HIGHMEM
(x86의 경우 PAGE_OFFSET
+ 896M에서 시작하는 커널 메모리 영역)을 사용하는 것처럼 보이는 alloc_pages()
을 호출합니다.
그래서
- 내가 매트의 대답은
- 우리는 구조체의 페이지와 관련된 4킬로바이트 데이터의 시작 물리적 주소를 찾을 수
kmap()
를 사용한다고 가정ZONE_NORMAL
에 페이지에 적합하다고 생각, 그것은 우리가해야 정확(unsigned long)(&page)-PAGE_OFFSET
을 사용하여 구조 자체를 저장하는 실제 주소를 찾으십니까?
수정하십시오. 다음과 같이
'mem_map' 배열의 항목으로'page'에 대해 생각해보십시오. –