освобождается ли когда-либо автоматически память, выделенная функцией kmalloc()?

StackOverflow https://stackoverflow.com//questions/11657387

Вопрос

Я пишу драйвер устройства, который, помимо прочего, выделяет блок памяти с помощью kmalloc.Эта память освобождается, когда пользовательская программа закрывает файл.В одном из моих экспериментов пользовательская программа вылетела, не закрыв файл.

Освободило ли бы что-нибудь эту память?

В другом эксперименте я переместил kfree() из close() функция для module_exit() функция.Когда я запускал пользовательскую программу дважды подряд, я вызывал kmalloc снова с тем же указателем, что и раньше, не освобождая его предварительно.Таким образом, я потерял указатель на эту память и не могу ее освободить.

Эта память теряется для системы до перезагрузки или она освободится при выгрузке драйвера?

Это было полезно?

Решение

Память ядра никогда не освобождается автоматически.Это включает kmalloc.

Вся память, связанная с дескриптором открытого файла, должна быть освобождена при закрытии файла.
Когда процесс завершается по какой-либо причине (включая kill -9), все открытые файловые дескрипторы закрываются и вызывается функция закрытия драйвера.Поэтому, если вы освободите его, ничто из того, что сможет сделать процесс, не заставит память остаться после того, как процесс завершится.

Другие советы

Пожалуйста, не связывайте свой опыт работы в пользовательском пространстве с программированием на ядре.

Что я имею в виду под этим?

Обычные процессы очищаются после завершения, в отличие от модулей ядра, поскольку они на самом деле не являются процессами.

Технически, когда вы загружаете модуль и затем вызываете kmalloc, вы просите ядро ​​выделить для вас некоторую память в пространстве ядра. Технически это новая память для всего ядра, поэтому даже если вы выгрузите свой модуль, это выделенная память ядра присутствует, если она не освобождена явно.

Простыми словами отвечая на ваш вопрос:Каждому kmalloc нужен kfree, иначе память останется там, пока система работает.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top