Очистить раздел ELF из ОЗУ после инициализации библиотеки - PullRequest
8 голосов
/ 28 мая 2010

У меня много кода в разделяемой библиотеке ELF, которая используется только во время инициализации библиотеки (она вызывается из статических инициализаторов). Если я помещу этот код в отдельный раздел (или, возможно, он может пойти в раздел .init), что я могу сделать с помощью __attribute__((section(".mysection"))), есть ли способ заставить этот раздел выгружаться после загрузки библиотеки?

Этот вопрос связан, но был сделан вывод, что ядро ​​будет выгружать неиспользуемые страницы, когда ему не хватает памяти, поэтому нет необходимости делать это явно. Однако я работаю во встроенной среде, где память стоит дорого, а стоимость подкачки кода с диска (медленная USB-флешка) высока. Поэтому я бы предпочел явно сбросить этот код, который, как я знаю, никогда не будет использоваться снова, вместо того, чтобы ядро ​​решило сбросить какой-то другой код, который в конечном итоге, возможно, потребуется перенести обратно.

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

1 Ответ

2 голосов
/ 03 июня 2010

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

...