Страница (память компьютера) - Page (computer memory)

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

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

Компромисс размера страницы

Размер страницы обычно определяется архитектурой процессора. Традиционно страницы в системе имели одинаковый размер, например 4096 байт . Однако конструкция процессора часто допускает два или более, иногда одновременных размера страниц из-за его преимуществ. Есть несколько моментов, которые могут повлиять на выбор наилучшего размера страницы.

Размер таблицы страниц

В системе с меньшим размером страницы используется больше страниц, поэтому таблица страниц занимает больше места. Например, если 2 32 виртуальное адресное пространство отображается на 4  KiB (2 12 байт) страниц, число виртуальных страниц составляет 2 20  = (2 32  /2 12 ). Однако, если размер страницы увеличивается до 32 KiB (2 15 байт), только 2 17 страницы требуется. Многоуровневый алгоритм разбиения на страницы может снизить затраты памяти на выделение большой таблицы страниц для каждого процесса за счет дальнейшего разделения таблицы страниц на более мелкие таблицы, эффективно разбивая таблицу страниц на страницы.

Использование TLB

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

Внутренняя фрагментация

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

В качестве примера предположим, что размер страницы составляет 1024 КБ. Если процесс выделяет 1025 КиБ, необходимо использовать две страницы, в результате чего остается 1023 КиБ неиспользуемого пространства (где одна страница полностью занимает 1024 КиБ, а другая - только 1 КиБ).

Доступ к диску

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

Программное получение размера страницы

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

Операционные системы на базе Unix и POSIX

Системы на основе Unix и POSIX могут использовать системную функцию sysconf(), как показано в следующем примере, написанном на языке программирования C.

#include <stdio.h>
#include <unistd.h> /* sysconf(3) */

int main(void)
{
	printf("The page size for this system is %ld bytes.\n",
		sysconf(_SC_PAGESIZE)); /* _SC_PAGE_SIZE is OK too. */

	return 0;
}

Во многих системах Unix getconfможно использовать утилиту командной строки . Например, getconf PAGESIZEвернет размер страницы в байтах.

Операционные системы на базе Windows

Операционные системы на основе Win32 , такие как семейства Windows 9x и Windows NT , могут использовать системные функции GetSystemInfo()из kernel32.dll.

#include <stdio.h>
#include <windows.h>

int main(void)
{
	SYSTEM_INFO si;
	GetSystemInfo(&si);

	printf("The page size for this system is %u bytes.\n", si.dwPageSize);

	return 0;
}

Несколько размеров страницы

Некоторые архитектуры набора инструкций могут поддерживать несколько размеров страниц, включая страницы, значительно превышающие стандартный размер страницы. Доступные размеры страниц зависят от архитектуры набора команд, типа процессора и режима работы (адресации). Операционная система выбирает один или несколько размеров из размеров, поддерживаемых архитектурой. Обратите внимание, что не все процессоры реализуют все определенные большие размеры страниц. Эта поддержка больших страниц (известных как «огромные страницы» в Linux , «суперстраницы» во FreeBSD и «большие страницы» в терминологии Microsoft Windows и IBM AIX ) позволяет использовать «лучшее из обоих миров», снижая нагрузку на TLB. кэш (иногда увеличивая скорость на целых 15%) для больших распределений, сохраняя при этом использование памяти на разумном уровне для небольших распределений.

Размеры страниц среди архитектур
Архитектура Наименьший размер страницы Большие размеры страницы
32-битный x86 4 КБ МБ в режиме PSE , 2 МБ в режиме PAE
x86-64 4 КБ 2 МиБ, 1  ГиБ (только если у ЦП есть PDPE1GBфлаг)
IA-64 ( Itanium ) 4 КБ 8 КиБ, 64 КиБ, 256 КиБ, 1 МБ, 4 МБ, 16 МБ, 256 МБ
Питание ISA 4 КБ 64 КиБ, 16 МиБ, 16 ГиБ
SPARC v8 с SPARC Reference MMU 4 КБ 256 КБайт, 16 МБ
Архитектура UltraSPARC 2007 8 КБ 64 КиБ, 512 КиБ (опционально), 4 МиБ, 32 МиБ (опционально), 256 МиБ (опционально), 2 ГиБ (опционально), 16 ГиБ (опционально)
ARMv7 4 КБ 64 КиБ, 1 МБ («раздел»), 16 МБ («надсекция») (определяется конкретной реализацией)

Начиная с Pentium Pro и AMD Athlon , процессоры x86 поддерживают 4 страницы МиБ (называемые расширением размера страницы ) (страницы 2 МиБ при использовании PAE ) в дополнение к своим стандартным страницам 4 КиБ; новые x86-64 процессоры, такие как AMD «новых процессоров AMD64 s и Intel » s Westmere , а затем Xeon процессоров может использовать 1 контрклин страницы в длительном режиме . IA-64 поддерживает до восьми различных размеров страниц, от 4 КиБ до 256 МБ, и некоторые другие архитектуры имеют аналогичные функции.

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

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

Linux поддерживает огромные страницы на нескольких архитектурах, начиная с серии 2.6 через hugetlbfsфайловую систему и без hugetlbfsнее, начиная с 2.6.38. Windows Server 2003 (SP1 и новее), Windows Vista и Windows Server 2008 поддерживают огромные страницы под именем больших страниц. Windows 2000 и Windows XP внутренне поддерживают большие страницы, но не открывают их приложениям. Начиная с версии 9, Solaris поддерживает большие страницы на SPARC и x86. В FreeBSD 7.2-RELEASE есть суперстраницы. Обратите внимание, что до недавнего времени в Linux приложения нужно было модифицировать, чтобы использовать огромные страницы. В ядре 2.6.38 появилась поддержка прозрачного использования огромных страниц. В ядрах Linux, поддерживающих прозрачные огромные страницы, а также в FreeBSD и Solaris приложения используют преимущества огромных страниц автоматически, без необходимости модификации.

Смотрите также

использованная литература

дальнейшее чтение

  • Дандамуди, Шиварама П. (2003). Основы компьютерной организации и дизайна (1-е изд.). Springer . С. 740–741. ISBN 0-387-95211-X.