Digamos que tenemos un struct page
del espacio de direcciones de un archivo de la página en caché.¿Cómo obtener la dirección física de los datos asociados desde una página de estructura?
¿Cómo podríamos obtener la dirección física inicial de los datos de 4KB de este struct page
?
Supongo que debería haber algo como el puntero data
dentro de struct sk_buff
, pero no lo encontré.
EDITAR
Gracias Mat y llya por las respuestas.
Después de mirar las respuestas, creo que el primer problema es identificar si el struct page
se encuentra en ZONE_NORMAL
o ZONE_HIGHMEM
.
Durante un archivo de E/S, cuando no encontramos la página en caché, al principio asignaremos una nueva página usando page_cache_alloc_cold()
. page_cache_alloc_cold()
finalmente llama a alloc_pages()
que parece que usará el ZONE_HIGHMEM
(que en x86, es el área de memoria del kernel que comienza en PAGE_OFFSET
+ 896M) para su trabajo.
Así
- creo que la respuesta de Mat es adecuado para las páginas en
ZONE_NORMAL
- Supongamos que utilizamos
kmap()
para encontrar la dirección física a partir de los datos de 4 KB asociada a la página de estructuras, ¿es correcto que debemos use(unsigned long)(&page)-PAGE_OFFSET
para encontrar la dirección física donde almacena la estructura en sí misma?
Corrija.
Piensa en 'page' como un elemento en la matriz' mem_map'. –