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

А страница, страница памяти, или же виртуальная страница представляет собой непрерывный блок фиксированной длины виртуальная память, описывается одной записью в таблица страниц. Это наименьшая единица данных для управления памятью в виртуальной памяти. Операционная система. Аналогично рамка страницы наименьший непрерывный блок фиксированной длины физическая память в какие страницы памяти отображаются операционной системой.[1][2][3]

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

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

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

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

Система с меньшим размером страницы использует больше страниц, требуя таблица страниц что занимает больше места. Например, если 232 виртуальное адресное пространство отображается в 4 КиБ (212 байт) страниц, количество виртуальных страниц - 220 = (232 / 212). Однако если размер страницы увеличится до 32 КБ (215 байтов), всего 217 страницы обязательны. Многоуровневый алгоритм разбиения на страницы может снизить затраты памяти на выделение большой таблицы страниц для каждого процесса за счет дальнейшего разделения таблицы страниц на более мелкие таблицы, эффективно разбивая таблицу страниц на страницы.

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

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

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

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

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

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

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

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

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

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

Unix и POSIX -системы могут использовать системную функцию sysconf (),[7][8][9][10][11] как показано в следующем примере, написанном в C язык программирования.

#включают <stdio.h>#включают  / * sysconf (3) * /int главный(пустота){	printf("Размер страницы для этой системы составляет% ld байт.",		sysconf(_SC_PAGESIZE)); / * _SC_PAGE_SIZE тоже в порядке. * /	возвращаться 0;}

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

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

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

#включают <stdio.h>#включают <windows.h>int главный(пустота){	СИСТЕМНАЯ ИНФОРМАЦИЯ си;	GetSystemInfo(&си);	printf("Размер страницы для этой системы составляет% u байт.", си.dwPageSize);	возвращаться 0;}

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

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

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

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

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

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

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

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

Рекомендации

  1. ^ Кристофер Крюгель (2012-12-03). «Операционные системы (курс CS170-08)» (PDF). cs.ucsb.edu. Архивировано из оригинал (PDF) на 2016-08-10. Получено 2016-06-13.
  2. ^ Мартин К. Ринард (22 августа 1998 г.). «Лекции по операционным системам, лекция 9. Введение в разбиение на страницы». people.csail.mit.edu. Архивировано из оригинал на 2016-06-01. Получено 2016-06-13.
  3. ^ «Виртуальная память: страницы и страничные фреймы». cs.miami.edu. 2012-10-31. Архивировано из оригинал на 2016-06-11. Получено 2016-06-13.
  4. ^ Белзер, Джек; Хольцман, Альберт Г .; Кент, Аллен, ред. (1981), «Системы виртуальной памяти», Энциклопедия информатики и технологий, 14, CRC Press, стр. 32, ISBN  0-8247-2214-0
  5. ^ «Использование размера страницы 4 КБ для виртуальной памяти устарело». IEEE. 2009-08-10. CiteSeerX  10.1.1.154.2023. Цитировать журнал требует | журнал = (помощь)
  6. ^ а б "Обзор методов проектирования TLB ", Параллелизм и вычисления: практика и опыт, 2016.
  7. ^ limits.h - Справочник по базовым определениям, Единая спецификация UNIX, Выпуск 7 из Открытая группа
  8. ^ sysconf - Справочник по системным интерфейсам, Единая спецификация UNIX, Выпуск 7 из Открытая группа
  9. ^ sysconf (3) – Linux Библиотечные функции Руководство
  10. ^ sysconf (3) – Дарвин и macOS Библиотечные функции Руководство
  11. ^ sysconf (3C) – Solaris 10 Справочник по базовым функциям библиотеки Руководство
  12. ^ getconf - Справочник по командам и утилитам, Единая спецификация UNIX, Выпуск 7 из Открытая группа
  13. ^ getconf (1) – Linux Пользовательские команды Руководство
  14. ^ getconf (1) – Дарвин и macOS Общие команды Руководство
  15. ^ "Функция GetSystemInfo". Microsoft.
  16. ^ "Структура SYSTEM_INFO". Microsoft.
  17. ^ «Hugepages - Debian Wiki». Wiki.debian.org. 2011-06-21. Получено 2014-02-06.
  18. ^ а б "Руководство разработчика программного обеспечения для архитектур Intel® 64 и IA-32, том 3 (3A, 3B, 3C и 3D): Руководство по системному программированию" (PDF). Декабрь 2016. с. 4-2.
  19. ^ а б "Документация / vm / hugetlbpage.txt". Документация ядра Linux. kernel.org. Получено 2014-02-06.
  20. ^ "Руководство разработчика программного обеспечения с архитектурой Intel Itanium, том 2: Архитектура системы" (PDF). Май 2010. с. 2:58.
  21. ^ Руководство по производительности IBM Power Systems: внедрение и оптимизация. IBM Redbooks. Февраль 2013. ISBN  9780738437668. Получено 2014-03-17.
  22. ^ «Руководство по архитектуре SPARC, версия 8». 1992. стр. 249.
  23. ^ «Архитектура UltraSPARC 2007» (PDF). 27 сентября 2010 г. п. 427.
  24. ^ "Справочное руководство по архитектуре ARM, выпуск ARMv7-A и ARMv7-R". 2014-05-20. п. B3-1324.
  25. ^ «Intel Xeon 5670: шесть улучшенных ядер». АнандТех. Получено 2012-11-03.
  26. ^ «Поддержка универсальной операционной системы для страниц разных размеров» (PDF). static.usenix.org. Получено 2012-11-02.
  27. ^ Наварро, Хуан; Айер, Ситарарн; Друщель, Питер; Кокс, Алан (декабрь 2002 г.). Практическая прозрачная поддержка суперстраниц в операционной системе (PDF). 5-й симпозиум Usenix по разработке и внедрению операционных систем.
  28. ^ "Страницы - данквики, вики Ника Блэка". Dank.qemfd.net. Получено 2012-11-03.
  29. ^ а б Корбет, Джонатан. «Прозрачные огромные страницы в 2.6.38». LWN. Получено 2011-03-02.
  30. ^ «Поддержка больших страниц». Документы Microsoft. 2018-05-08.
  31. ^ "Программа AGP может зависнуть при использовании расширения размера страницы на процессоре Athlon". Support.microsoft.com. 2007-01-27. Получено 2012-11-03.
  32. ^ «Поддержка нескольких размеров страниц в операционной системе Solaris» (PDF). Sun BluePrints онлайн. Sun Microsystems. Получено 2008-01-19.
  33. ^ «Поддержка нескольких размеров страниц в приложении к операционной системе Solaris» (PDF). Sun BluePrints онлайн. Sun Microsystems. Получено 2008-01-19.
  34. ^ а б "Примечания к выпуску FreeBSD 7.2-RELEASE". Фонд FreeBSD. Получено 2009-05-03.
  35. ^ «2.3.1 Постоянная память / 2.3.2 Программная память с произвольным доступом». Руководство по программированию на языке ассемблера MCS-4 - Руководство по программированию микрокомпьютерной системы INTELLEC 4 (PDF) (Предварительная ред.). Санта-Клара, Калифорния, США: Корпорация Intel. Декабрь 1973 г. С. 2-3–2-4. MCS-030-1273-1. В архиве (PDF) из оригинала 2020-03-01. Получено 2020-03-02. […] ПЗУ делится на страницы, каждая из которых содержит 256 байтов. Таким образом, ячейки с 0 по 255 составляют страницу 0 ПЗУ, ячейки с 256 по 511 содержат страницу 1 и так далее. […] Программная оперативная память (RAM) организована точно так же, как ROM. […]
  36. ^ а б «1. Введение: выравнивание сегментов». Утилиты семейства 8086 - Руководство пользователя систем разработки на базе 8080/8085 (PDF). Редакция E (A620 / 5821 6K DD ed.). Санта-Клара, Калифорния, США: Корпорация Intel. Май 1982 [1980, 1978]. п. 1-6. Номер заказа: 9800639-04. В архиве (PDF) из оригинала на 2020-02-29. Получено 2020-02-29.

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

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