Как размонтировать блочное устройство, содержащее исполняемый файл этого процесса? - PullRequest
0 голосов
/ 05 марта 2019

Во встроенном Linux память драгоценна.В моем случае у меня есть исполняемый файл на ram-диске tmpfs.Фактически, ram-диск содержит только один исполняемый файл.

Я хочу запустить исполняемый файл только один раз.Этот исполняемый файл выполняется очень долго.Когда он работает, я хочу размонтировать RAM-диск, чтобы освободить память.Таким образом я удалил исполняемый файл, а затем размонтировал ram-диск.Оно только что показало сообщение об ошибке «занято устройство»: не удалось выполнить umount.

Как мне этого добиться?Я не говорю о ленивое число .Я хочу по-настоящему размонтировать, чтобы освободить память!Это должно быть возможно, поскольку запущенный процесс уже загрузил свой образ в ОЗУ.Он не должен полагаться на файловую систему ram-disk.

Если это пока невозможно для обычного ядра Linux, я приветствую ответы, указывающие мне, где я могу взломать ядро, чтобы включить эту функцию.

Если возможно, ответы программным способом являются предпочтительными.Хотя ответы в виде сценария также приветствуются (в любом случае я могу преобразовать сценарии в некоторый исполняемый файл, посмотрев на исходный код сценария оболочки).

Моя версия ядра - 3.10.14

- Обновление - Еще одна мысль: моя цель - освободить часть памяти, так как мое приложение перегружает память.Кроме того, размер двоичного файла велик по сравнению с общим объемом оперативной памяти.Моя оригинальная мысль состоит в том, что у ramdisk есть копия файла, а рабочий образ - еще одна копия.Но может быть, в Linux хранится всего одна копия, а не две?Кто-нибудь знает, как исполняемые файлы elf хранятся как в файловой системе, так и в рабочем образе?В Linux хранится только одна копия или, возможно, некоторые метаданные + 1 копия, а не две копии?Если это правда, мне не нужно делать размонтирование.

1 Ответ

0 голосов
/ 05 марта 2019

Это должно быть возможно, поскольку запущенный процесс уже загрузил свой образ в ОЗУ.

Это невозможно.

Если система находится в памятидавление, неиспользуемые текстовые страницы исполняемых изображений могут быть выгружены.Вместо того, чтобы записывать эти страницы для замены, ядро ​​«обменивает» эти страницы, удаляя их из ядра, с пониманием, что они могут быть считаны с диска, если они необходимы.

Таким образом, вы не можете размонтироватьфайловая система, содержащая исполняемый код, который используется.Это не относится к исполняемым двоичным файлам;это также относится к библиотекам.

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