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

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

т.е.

#!/bin/bash

tail -f /var/log/messages | while read line; do
  if [[ $line =~ \[(sd[a-z])\] ]];then
    for x in /dev/${BASH_REMATCH[1]}*
    do
        echo "Mounting $x"
        echo udisks --mount $x # remove the echo
    done
  fi
done

Но это лучше, делают один с gvfs или udisks API, я не знаю об этом в данный момент

44
08.05.2014, 01:30
4 ответа

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

$ getconf PAGE_SIZE
4096

или

$ getconf PAGESIZE
4096

NOTE: Вышеуказанные единицы обычно находятся в байтах, поэтому 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
57
27.01.2020, 19:34
[113373] Аппаратные средства (в частности, [113932]MMU[113933], входящий в состав процессора) определяют, какие размеры страниц возможны. Размер регистра процессора не имеет никакого отношения к размеру регистра процессора, а только косвенного отношения к размеру адресного пространства (в этом случае MMU определяет и то, и другое).
  • Почти на всех архитектурах поддерживается размер страницы 4 кБ. Некоторые архитектуры поддерживают страницы большего размера (а некоторые также поддерживают страницы меньшего размера), но по умолчанию используется 4 кБ.
  • Linux поддерживает страницы двух размеров:
  • Страницы нормального размера, которые по умолчанию на всех архитектурах имеют размер 4 кБ, хотя на некоторых архитектурах допустимы и другие значения, например, 16 кБ на [114215]ARM64[114216] или 8 кБ, 16 кБ или 64 кБ на [114217]IA64[114218]. Они соответствуют самому глубокому уровню дескрипторов на ММЮ (то, что Linux называет [114219]PTE[114220]).
  • Огромные страницы[114222], если скомпилировать их в ([114223]CONFIG_HUGETLB_PAGE[114224] необходимо, и [114225]CONFIG_HUGETLBFS[114226] также для большинства применений). Это соответствует второму по глубине уровню дескрипторов MMU (то, что Linux называет PMD) (или, по крайней мере, обычно это так, я не знаю, на всех ли это архитектурах).[12150]Размер страницы - это компромисс между использованием памяти, использованием памяти и скоростью.[12151]Больший размер страницы означает большее количество отходов при частичном использовании страницы, поэтому система быстрее заканчивает работу с памятью. [12152]Более глубокий уровень дескрипторов MMU означает больше памяти ядра для таблиц страниц.[12153]Более глубокий уровень дескрипторов MMU означает больше времени, затрачиваемого на обход таблиц страниц.[12154]Выигрыш от большего размера страниц для большинства приложений ничтожен, в то время как стоимость является существенной. Поэтому в большинстве систем используются только страницы нормального размера.[12155]Размер страницы можно запросить в системе с помощью утилиты [12156]getconf[12157]или с помощью функции C [12158]sysconf[12159].[12160]Использование огромных страниц[113949] требует установки туда файловой системы [113950]hugetlbfs[113951] и [113952]mmap[113953]ping файлов.[113390].

    17
    27.01.2020, 19:34
    [112502] Размер страницы в основном зависит от архитектуры процессора. На x86, со времен процессора 386, который ввел защищенный режим, размер страницы составлял 4 кБ.

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

    Больше информации о размере страницы можно найти в [112868]Wikipedia article

    0
    27.01.2020, 19:34

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

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

    0
    27.01.2020, 19:34

    Теги

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