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

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

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

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

Некоторые размеры страниц могут быть 2 КБ, 4 КБ и т. д. Но как определяется этот размер страницы? Влияет ли на него размер архитектуры? Например, 32-битная шина будет иметь адресное пространство 4 ГБ.

решение1

Вы можете узнать размер страницы системы по умолчанию, запросив ее конфигурацию с помощью getconfкоманды:

$ getconf PAGE_SIZE
4096

или

$ getconf PAGESIZE
4096

ПРИМЕЧАНИЕ:Приведенные выше единицы измерения обычно указаны в байтах, поэтому 4096 соответствует 4096 байтам или 4 КБ.

Это жестко запрограммировано в исходном коде ядра Linux здесь:

Пример

$ more /usr/src/kernels/3.13.9-100.fc19.x86_64/include/asm-generic/page.h
...
...
/* PAGE_SHIFT determines the page size */

#define PAGE_SHIFT  12
#ifdef __ASSEMBLY__
#define PAGE_SIZE   (1 << PAGE_SHIFT)
#else
#define PAGE_SIZE   (1UL << PAGE_SHIFT)
#endif
#define PAGE_MASK   (~(PAGE_SIZE-1))

Каким образом переключение передач даёт 4096?

При сдвиге битов вы выполняете двоичное умножение на 2. Таким образом, по сути, сдвиг битов влево ( 1 << PAGE_SHIFT) выполняет умножение 2^12 = 4096.

$ echo "2^12" | bc
4096

решение2

Аппаратное обеспечение (в частности,ММУ, который является частью ЦП) определяет возможные размеры страниц. Нет никакой связи с размером регистра процессора и есть только косвенная связь с размером адресного пространства (в том смысле, что MMU определяет и то, и другое).

Почти все архитектуры поддерживают размер страницы 4kB. Некоторые архитектуры поддерживают страницы большего размера (а некоторые также поддерживают страницы меньшего размера), но 4kB — очень распространенное значение по умолчанию.

Linux поддерживает два размера страниц:

  • Страницы нормального размера, которые, как я полагаю, по умолчанию составляют 4 КБ на всех архитектурах, хотя некоторые архитектуры допускают другие значения, например 16 КБ наARM64или 8кБ, 16кБ или 64кБ наIA64. Они соответствуют самому глубокому уровню дескрипторов в MMU (то, что Linux называетПТЭ).
  • Огромные страницы, если скомпилировано в ( CONFIG_HUGETLB_PAGEнеобходимо, а CONFIG_HUGETLBFSтакже для большинства применений). Это соответствует второму по глубине уровню дескрипторов MMU (то, что Linux называет PMD) (или, по крайней мере, обычно так, я не знаю, выполняется ли это на всех архитектурах).

Размер страницы — это компромисс между использованием памяти, использованием памяти и скоростью.

  • Больший размер страницы означает больше отходов при частичном использовании страницы, поэтому система быстрее исчерпывает память.
  • Более глубокий уровень дескриптора MMU означает больше памяти ядра для таблиц страниц.
  • Более глубокий уровень дескриптора MMU означает больше времени, затрачиваемого на обход таблицы страниц.

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

Вы можете запросить (нормальный) размер страницы в вашей системе с помощьюgetconfутилита или функция Csysconf.

$ getconf PAGE_SIZE
4096

Использование огромных страництребуется монтирование hugetlbfsфайловой системы и mmapпинг файлов в ней.

решение3

Процессор определяет доступные размеры страниц. Для большинства целей аппаратно реализованный размер страницы на процессорах x86 и x86_64 составляет 4 Кб. Однако операционная система может выделять более одной страницы за раз, если захочет, и тем самым эффективно реализовывать страницы размером 8 Кб, 16 Кб или 32 Кб в программном обеспечении.

Процессоры x86 и x86_64 могут также смешивать страницы 4 МБ и 2 МБ вместе со стандартными страницами 4 Кб. Если эта возможность вообще используется, то в основном она будет использоваться для выделения пространства ядра.

решение4

Размер страницы в основном зависит от архитектуры процессора. На x86, со времен процессора 386, который ввел защищенный режим, размер страницы был 4 кБ.

В режиме x64 могут быть и огромные страницы, размером 2 МБ. Однако их использование немного затруднительно.

Более подробную информацию о размере страницы можно найти вСтатья в Википедии

Связанный контент