Виртуальная область на страницы - PullRequest
2 голосов
/ 18 ноября 2008

В ядре Linux, учитывая task_struct mm, я могу получить доступ к списку процесса vm_area_struct с. Учитывая эти vm_area_struct s, как я могу получить struct page s, которые фактически соответствуют этому vma?

Я пытался искать функции в mm / memory.c и тому подобное, но я был в замешательстве.

Редактировать: идея состоит в том, чтобы найти, какие страницы в vma в данный момент находятся в памяти, а какие нет. Но я не хочу, чтобы кто-то говорил мне, как это сделать, поскольку это небольшая часть домашнего задания, которое мне нужно выяснить самостоятельно. Но я не могу понять, как найти страницы, которые соответствуют этому VMA. Если я смогу найти страницы, я полагаю, что могу проверить, есть ли у них действительный pfn или нет.

Ответы [ 2 ]

1 голос
/ 18 ноября 2008

От вашего комментария к другому ответу (редактировать: другой ответ, кажется, был удален), кажется, вы хотите прочитать из пространства пользователя. Функция для получения страниц пространства пользователя будет get_user_pages(), но это, скорее всего, не то, что вы хотите; Вы, вероятно, хотите copy_from_user / copy_to_user.

0 голосов
/ 20 мая 2009

У меня нет прямого ответа, но вам не понадобится много времени, чтобы перемещаться по структурам с помощью lxr.linux.no

Учитывая, что у вас уже есть структура, с которой вы хотите начать, взгляните на http://lxr.linux.no/linux+v2.6.29/+code=vm_area_struct. Вы можете найти определения, посмотреть, где используется одна структура, и т. Д ... Если вы уже знаете окончательную структуру имя, которое вы ищете, вы можете перейти вспять и перемещаться вверх, пока не достигнете мм.

Обратите внимание, что если ваше сетевое соединение не очень хорошее, вы можете установить локальную копию проиндексированного источника, получив пакеты lxr вашего дистрибутива и сгенерировав индекс локально. Раньше это занимало 2 часа на машине с частотой 400 МГц / 128 МБ, в настоящее время она должна работать намного быстрее.

...