Размер памяти для работы с ядром ядра

Я заинтересован в том, как файлы Linux mmaps в основной памяти (в моем контексте это для выполнения, но я думаю, что процесс mmap одинаковый для записи и чтения), и какой размер он использует.

Поэтому я знаю, что Linux использует подкачку с обычно размером 4 КБ (где в ядре я могу найти этот размер?). Но что именно это означает для выделенной памяти: предположим, что у вас есть бинарный размер в несколько тысяч байтов, давайте просто скажем 5812B и вы его выполните. Что происходит в ядре: выделяет ли он 2 * 4kB, а затем копирует 5812B в это пространство, теряя> 3 КБ основной памяти на 2-й странице?

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

Мой второй вопрос также очень прост, я думаю: я предположил, что 5812B является файловым. Правильно ли, что этот размер просто взят из инода?

3 Solutions collect form web for “Размер памяти для работы с ядром ядра”

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

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

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

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

В Linux вы можете просматривать сопоставления памяти для исполняемого файла с cat /proc/$pid/maps . Формат документируется в man-странице proc(5) ; см. также Понимание Linux / proc / id / maps .

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

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

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

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

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

арка / x86 / включать / ASM / page_types.h:

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

#define PAGE_SHIFT 12

#define PAGE_SIZE (_AC (1, UL) << PAGE_SHIFT)

  • Режим объекта Grsecurity x
  • Та же программа, которая использует «mmap», ведет себя по-разному на разных машинах
  • mmap / dev / random
  • Могу ли я добавить / proc / self?
  • Как найти часть кода, который создает анонимную приватную память
  • proc / sys / vm / flush_mmap_pages отсутствует в ядре 3.9, как его получить?
  • Как кеш страниц отображается в ядре на 64-разрядных архитектурах x86?
  • Linux Swap Space
  • Поведение памяти mmap'd на давление памяти
  • Если я mmap файл из tmpfs, будет ли он удвоить использование памяти?
  • Pagemap на устройствах с отображением памяти не работает
  • Interesting Posts

    Что делать с циклической зависимостью между двумя пакетами в Fedora?

    Использование mv для перехода в другой каталог и сразу переименовать

    Как объединить строки с фиксированным интервалом в файле?

    mkvmerge Backward Spliting не поддерживается почему?

    Переименовать определенные файлы с частью имени родительского каталога

    GPU NVIDIA не обнаружен

    Проблемы с gpg-agent в Manjaro Linux (KDE)

    Как заставить скрипт работать как демон, ожидая изменений в 2 файлах?

    csh: перенаправление вывода из foreach

    Возможно ли иметь несколько шлюзов по умолчанию для исходящих соединений?

    Контрольное пространство на корица

    Почему большинство дистрибутивов (кроме Debian) рекомендуют / требуют полной переустановки при обновлении до новой версии?

    ActiveMQ не запускается на Ubuntu 14.04

    Linux Mint 18 продолжает загружаться в initramf даже после нескольких переустановок

    Fedora 23 зависает при перезагрузке / отключении питания

    Linux и Unix - лучшая ОС в мире.