Емкость памяти для ядра mmap операция

  1. Можно сделать пустого об/мин как напоминание.
  2. Можно изучить обертывание программного обеспечения правильно в об/мин.
  3. Можно оставить копию tar файлы от установки в /usr/src/non-rpms напомнить Вам (это - то, что я обычно делаю).
9
20.03.2019, 15:11
3 ответа

Нет никакой непосредственной связи между размером исполняемого файла и размером в памяти. Вот очень быстрый обзор того, что происходит, когда двоичный файл выполняется:

  1. Ядро анализирует файл и повреждает его в раздел. Некоторые разделы непосредственно загружаются в память на отдельных страницах. Некоторые разделы не загружаются вообще (например, отладочная информация).
  2. Если исполняемый файл динамично связан, вызовы ядра динамический загрузчик, и он загружает необходимые общие библиотеки и выполняет выпуск ссылки как требуется.
  3. Программа начинает выполнять свой код, и обычно она будет запрашивать больше памяти хранить данные.

Для получения дополнительной информации о форматах исполняемых файлов, соединении и исполняемой загрузке, можно считать Компоновщиков и Загрузчики John R. Levine.

В исполняемом файле 5 КБ вероятно, что все - код или данные, которые должны быть загружены в память за исключением заголовка. Исполняемый код составит по крайней мере одну страницу, возможно, два, и затем будет по крайней мере одна страница для стека, вероятно, одна страница или для "кучи" (другие данные), плюс память, используемая общими библиотеками.

В соответствии с Linux, можно осмотреть размещения в ОЗУ для исполняемого файла с cat /proc/$pid/maps. Формат документируется в proc(5) страница справочника; см. также Понимание Linux/proc/id/maps.

6
27.01.2020, 20:07

Да: Вы в конечном счете получаете две 4k страницы. Данные загружаются по требованию, поэтому если ничто никогда не будет относиться к второй странице, то это никогда не будет загружаться в память.

include/asm-i386/param.h:#define EXEC_PAGESIZE  4096
include/asm-i386/elf.h:#define ELF_EXEC_PAGESIZE        4096

Не изменяйте эти значения и ожидайте, что что-либо будет работать.

Да, размер файла хранится в inode в ext2/3.

0
27.01.2020, 20:07

Для части определения, на 2.6.38~ish ядро для архитектуры Intel:

arch/x86/include/asm/page_types.h:

/* PAGE_SHIFT определяет размер страницы */

#define PAGE_SHIFT 12

#define PAGE_SIZE (_AC (1, УЛ.) <<PAGE_SHIFT)

0
27.01.2020, 20:07

Теги

Похожие вопросы