Память не становится доступной даже после ее освобождения - PullRequest
0 голосов
/ 14 апреля 2010

Я пишу простой диспетчер памяти для моего приложения, который освободит лишнюю память, используемую моими модулями, чтобы она снова была доступна для использования. Мои модули выделяют память, используя alloc_page & kmem_cache_alloc, и поэтому менеджер памяти использует put_page & kmem_cache_free соответственно для освобождения памяти, которая не используется.

Проблема, с которой я сталкиваюсь, заключается в том, что даже после того, как я освобождаю память с помощью put_page & kmem_cache_free, мои модули не могут получить свободную память. Я написал тестовый код, который распределяет много памяти в цикле и когда нехватка памяти спит на диспетчере памяти, чтобы освободить память. Диспетчер памяти успешно выполняет бесплатный код и запускает спящий процесс, так как память должна быть доступна сейчас. Интересно, что вызовы alloc_page / kmem_cache_alloc все еще не могут выделить память. Теперь я понятия не имею, почему это происходит, поэтому обращаюсь за помощью.

1 Ответ

0 голосов
/ 15 апреля 2010

Я выяснил проблему, это было с API, который я использовал. Если я использую __free_page вместо put_page, чтобы освободить страницы памяти, все работает абсолютно нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...