LINUX.ORG.RU

Сообщения procopus

 

Выделение памяти в модуле ядра

Задача такая: модуль выделяет память и руализует вызов mmap для отображения этой памяти в пространство пользователя. Модуль писался в соответствии с примерами Рубини. Работает он следующим образом: 1. Памяти выделяется в init_module с помощью <адрес> = __get_free_pages(GFP_KERNEL, 4); 2. Память освобождается в cleanup_module с помощью free_pages(<адрес>); 3. В реализации nopage в конце вызывается get_page(<page>);

При этом происходят не понятные вещи: 1. При выделении нескольких страниц счетчик использования равен 1 только для первой страницы, для оствльеых - 0. Посмотрел реализацию процедуры выделения - действительно, только для первой страницы. Почему? 2. При выгрузке модуля выделенная память назаж не возвращается - проверял с помощью утилиты free 3. После обращения пользователя к выделенным страницам, выгрузке модуля и повторной загрузке система палает намертво. При этом, если при выдалении принудительно сделать get_page на все страницы, кроме первой - этого не происходит.

Кто может, объясните, pliz, почему так происходит и в чем я не прав?

procopus
()

RSS подписка на новые темы