Страница , страница памяти или виртуальная страница является фиксированной длиной непрерывного блок виртуальной памяти , описывается одной записью в таблице страниц . Это наименьшая единица данных для управления памятью в операционной системе с виртуальной памятью . Точно так же страничный фрейм - это наименьший непрерывный блок физической памяти фиксированной длины, в который операционная система отображает страницы памяти. [1] [2] [3]
Передача страниц между основной памятью и вспомогательной памятью, такой как жесткий диск , называется подкачкой или подкачкой. [4]
Компромисс размера страницы
Размер страницы обычно определяется архитектурой процессора. Традиционно страницы в системе имели одинаковый размер, например 4096 байт . Однако конструкция процессора часто допускает два или более, иногда одновременных размера страниц из-за его преимуществ. Есть несколько моментов, которые могут повлиять на выбор наилучшего размера страницы. [5]
Размер таблицы страниц
Система с меньшим размером страницы использует больше страниц, поэтому таблица страниц занимает больше места. Например, если 2 32 виртуальное адресное пространство отображается на 4 Кбайт (2 12 байт) страниц, число виртуальных страниц составляет 2 20 = (2 32 /2 12 ). Однако, если размер страницы увеличивается до 32 КБ ( 215 байт), потребуется только 217 страниц. Многоуровневый алгоритм разбиения на страницы может снизить затраты памяти на выделение большой таблицы страниц для каждого процесса за счет дальнейшего разделения таблицы страниц на более мелкие таблицы, эффективно разбивая таблицу страниц на страницы.
Использование TLB
Поскольку каждый доступ к памяти должен быть отображен с виртуального на физический адрес, чтение таблицы страниц каждый раз может быть довольно дорогостоящим. Поэтому часто используется очень быстрый вид кэша, буфер резервной трансляции (TLB). TLB имеет ограниченный размер, и когда он не может удовлетворить данный запрос ( промах TLB ), таблицы страниц необходимо искать вручную (аппаратно или программно, в зависимости от архитектуры) для правильного отображения. Большие размеры страниц означают, что кэш TLB того же размера может отслеживать большие объемы памяти, что позволяет избежать дорогостоящих промахов TLB.
Внутренняя фрагментация
Редко процессы требуют использования точного количества страниц. В результате последняя страница, скорее всего, будет заполнена только частично, что приведет к потере некоторого количества памяти. Большие размеры страницы приводят к большому объему бесполезной памяти, поскольку больше потенциально неиспользуемых частей памяти загружаются в основную память. Меньшие размеры страниц обеспечивают более точное соответствие фактическому объему памяти, необходимому для выделения.
В качестве примера предположим, что размер страницы составляет 1024 КБ. Если процесс выделяет 1025 КБ, необходимо использовать две страницы, в результате чего остается 1023 КБ неиспользуемого пространства (где одна страница полностью занимает 1024 КБ, а другая - только 1 КБ).
Доступ к диску
При передаче с вращающегося диска большая часть задержки вызвана временем поиска, т.е. временем, необходимым для правильного размещения головок чтения / записи над пластинами диска. Из-за этого большие последовательные переводы более эффективны, чем несколько меньших переводов. Перенос того же объема данных с диска в память часто требует меньше времени с большими страницами, чем с меньшими страницами.
Программное получение размера страницы
Большинство операционных систем позволяют программам определять размер страницы во время выполнения . Это позволяет программам более эффективно использовать память за счет выравнивания выделений по этому размеру и уменьшения общей внутренней фрагментации страниц.
Операционные системы на базе Unix и POSIX
Unix и POSIX - системы на основе могут использовать системную функцию sysconf()
, [6] [7] [8] [9] [10] , как показано в следующем примере , написанном в C языке программирования.
#include #include / * sysconf (3) * /int main ( void ) { printf ( "Размер страницы для этой системы составляет% ld байт. \ n " , sysconf ( _SC_PAGESIZE )); / * _SC_PAGE_SIZE тоже в порядке. * /возврат 0 ; }
Во многих системах Unix getconf
можно использовать утилиту командной строки . [11] [12] [13] Например, getconf PAGESIZE
вернет размер страницы в байтах.
Операционные системы на базе Windows
Операционные системы на основе Win32 , такие как семейства Windows 9x и Windows NT , могут использовать системные функции GetSystemInfo()
[14] [15] из kernel32.dll
.
#include #include int main ( недействительно ) { SYSTEM_INFO si ; GetSystemInfo ( & si );printf ( "Размер страницы для этой системы% u байт. \ n " , si . dwPageSize );возврат 0 ; }
Несколько размеров страницы
Некоторые архитектуры набора инструкций могут поддерживать несколько размеров страниц, включая страницы, значительно превышающие стандартный размер страницы. Доступные размеры страниц зависят от архитектуры набора команд, типа процессора и режима работы (адресации). Операционная система выбирает один или несколько размеров из размеров, поддерживаемых архитектурой. Обратите внимание, что не все процессоры реализуют все определенные большие размеры страниц. Эта поддержка больших страниц (известных как «огромные страницы» в Linux , «суперстраницы» во FreeBSD и «большие страницы» в терминологии Microsoft Windows и IBM AIX ) позволяет использовать «лучшее из обоих миров», снижая нагрузку на TLB. кэш (иногда увеличивая скорость на целых 15%) для больших распределений, сохраняя при этом использование памяти на разумном уровне для небольших распределений.
Архитектура | Наименьший размер страницы | Большие размеры страницы |
---|---|---|
32-битный x86 [17] | 4 КБ | 4 МБ в режиме PSE , 2 МБ в режиме PAE [18] |
x86-64 [17] | 4 КБ | 2 МБ, 1 ГБ (только если у ЦП установлен PDPE1GB флаг) |
IA-64 ( Itanium ) [19] | 4 КБ | 8 КБ, 64 КБ, 256 КБ, 1 МБ, 4 МБ, 16 МБ, 256 МБ [18] |
Power ISA [20] | 4 КБ | 64 КБ, 16 МБ, 16 ГБ |
SPARC v8 с SPARC Reference MMU [21] | 4 КБ | 256 КБ, 16 МБ |
Архитектура UltraSPARC 2007 [22] | 8 КБ | 64 КБ, 512 КБ (необязательно), 4 МБ, 32 МБ (необязательно), 256 МБ (необязательно), 2 ГБ (необязательно), 16 ГБ (необязательно) |
ARMv7 [23] | 4 КБ | 64 КБ, 1 МБ («раздел»), 16 МБ («надстройка») (определяется конкретной реализацией) |
Начиная с Pentium Pro и AMD Athlon , процессоры x86 поддерживают страницы размером 4 МБ (называемые расширением размера страницы ) (страницы 2 МБ при использовании PAE ) в дополнение к своим стандартным страницам размером 4 КБ; новые x86-64 процессоры, такие как AMD «новых процессоров AMD64 s и Intel » s Westmere [24] , а затем Xeon процессоры могут использовать 1 ГБ страниц в длительном режиме . IA-64 поддерживает до восьми различных размеров страниц, от 4 КБ до 256 МБ, и некоторые другие архитектуры имеют аналогичные функции. [ указать ]
Страницы большего размера, несмотря на то, что они доступны в процессорах, используемых в большинстве современных персональных компьютеров , широко не используются, за исключением крупномасштабных приложений, приложений, которые обычно находятся на больших серверах и в вычислительных кластерах , а также в самой операционной системе. Обычно для их использования требуются повышенные привилегии, сотрудничество со стороны приложения, выполняющего большое распределение (обычно установка флага, запрашивающего у операционной системы огромные страницы), или ручная настройка администратора; операционные системы обычно не могут выгружать их на диск, иногда по своей конструкции.
Однако SGI IRIX имеет универсальную поддержку для страниц разных размеров. Каждый отдельный процесс может предоставлять подсказки, и операционная система автоматически будет использовать максимально возможный размер страницы для данной области адресного пространства. [25] В более поздних работах предлагалась прозрачная поддержка операционной системы для использования различных размеров страниц для немодифицированных приложений посредством вытесняемых резервирований, гибких продвижений, спекулятивных понижений и контроля фрагментации. [26]
Linux поддерживает огромные страницы на нескольких архитектурах, начиная с серии 2.6 через hugetlbfs
файловую систему [27] и без hugetlbfs
нее, начиная с 2.6.38. [28] Windows Server 2003 (SP1 и новее), Windows Vista и Windows Server 2008 поддерживают огромные страницы под именем больших страниц. [29] Windows 2000 и Windows XP внутренне поддерживают большие страницы, но не открывают их приложениям. [30] Начиная с версии 9, Solaris поддерживает большие страницы на SPARC и x86. [31] [32] В FreeBSD 7.2-RELEASE есть суперстраницы. [33] Обратите внимание, что до недавнего времени в Linux приложения нужно было модифицировать, чтобы использовать огромные страницы. В ядре 2.6.38 появилась поддержка прозрачного использования огромных страниц. [28] В ядрах Linux, поддерживающих прозрачные огромные страницы, а также в FreeBSD и Solaris приложения используют преимущества огромных страниц автоматически, без необходимости модификации. [33]
Смотрите также
- Ошибка страницы
- Таблица страниц
- Пейджинг
- Виртуальная память
- Нулевая страница (свойство процессора) - область памяти (часто размером 256 байт [34] [35] ) в самом начале адресной комнаты процессора.
- Нулевая страница (CP / M) - 256-байтовая [35] структура данных в начале программы.
Рекомендации
- ^ Кристофер Крюгель (2012-12-03). «Операционные системы (курс CS170-08)» (PDF) . cs.ucsb.edu . Архивировано из оригинального (PDF) 10 августа 2016 года . Проверено 13 июня 2016 .
- ^ Мартин К. Ринард (22 августа 1998 г.). «Конспект по операционным системам, лекция 9. Введение в разбиение на страницы» . people.csail.mit.edu . Архивировано из оригинала на 2016-06-01 . Проверено 13 июня 2016 .
- ^ «Виртуальная память: страницы и страничные фреймы» . cs.miami.edu . 2012-10-31. Архивировано из оригинала на 2016-06-11 . Проверено 13 июня 2016 .
- ^ Белзер, Джек; Хольцман, Альберт Г .; Кент, Аллен, ред. (1981), "Системы виртуальной памяти", Энциклопедия информатики и технологий , 14 , CRC Press, стр. 32, ISBN 0-8247-2214-0
- ^ «Использование размера страницы 4 КБ для виртуальной памяти устарело». IEEE. 2009-08-10. CiteSeerX 10.1.1.154.2023 . Цитировать журнал требует
|journal=
( помощь ) - ^ - Справочник по базовым определениям, Единая спецификация UNIX , выпуск 7 от Open Group
- ^ - Справочник по системным интерфейсам, Единая спецификация UNIX , выпуск 7 от The Open Group
- ^ - Руководство по функциям библиотеки Linux
- ^ - Руководство по функциям библиотеки Darwin и macOS
- ^ - Справочное руководство по базовым функциям библиотеки Solaris 10
- ^ - Справочник по командам и утилитам, спецификация Single UNIX , выпуск 7 от The Open Group
- ^ - Руководство по командам пользователя Linux
- ^ - Дарвин и руководство по основным командам macOS
- ^ «Функция GetSystemInfo» . Microsoft.
- ^ «Структура SYSTEM_INFO» . Microsoft.
- ^ «Hugepages - Debian Wiki» . Wiki.debian.org. 2011-06-21 . Проверено 6 февраля 2014 .
- ^ а б «Руководство разработчика программного обеспечения для архитектур Intel® 64 и IA-32, том 3 (3A, 3B, 3C и 3D): Руководство по системному программированию» (PDF) . Декабрь 2016. с. 4-2.
- ^ а б «Документация / vm / hugetlbpage.txt» . Документация ядра Linux . kernel.org . Проверено 6 февраля 2014 .
- ^ «Руководство разработчика программного обеспечения с архитектурой Intel Itanium, том 2: Архитектура системы» (PDF) . Май 2010. с. 2:58.
- ^ Руководство по производительности IBM Power Systems: внедрение и оптимизация . IBM Redbooks. Февраль 2013. ISBN. 9780738437668. Проверено 17 марта 2014 .
- ^ «Руководство по архитектуре SPARC, версия 8» . 1992. стр. 249.
- ^ «Архитектура UltraSPARC 2007» (PDF) . 27 сентября 2010 г. п. 427.
- ^ «Справочное руководство по архитектуре ARM, выпуск ARMv7-A и ARMv7-R» . 2014-05-20. п. B3-1324.
- ^ «Intel Xeon 5670: шесть улучшенных ядер» . AnandTech . Проверено 3 ноября 2012 .
- ^ «Поддержка универсальной операционной системы для страниц разных размеров» (PDF) . static.usenix.org . Проверено 2 ноября 2012 .
- ^ Наварро, Хуан; Айер, Ситарарн; Друщель, Питер; Кокс, Алан (декабрь 2002 г.). Практическая прозрачная поддержка суперстраниц в операционной системе (PDF) . 5-й симпозиум Usenix по разработке и внедрению операционных систем.
- ^ «Страницы - данквики, вики Ника Блэка» . Dank.qemfd.net . Проверено 3 ноября 2012 .
- ^ а б Корбет, Джонатан. «Прозрачные огромные страницы в 2.6.38» . LWN . Проверено 2 марта 2011 .
- ^ «Поддержка больших страниц» . Документы Microsoft . 2018-05-08.
- ^ «Программа AGP может зависнуть при использовании расширения размера страницы на процессоре Athlon» . Support.microsoft.com. 2007-01-27 . Проверено 3 ноября 2012 .
- ^ «Поддержка нескольких размеров страниц в операционной системе Solaris» (PDF) . Sun BluePrints Online . Sun Microsystems . Проверено 19 января 2008 .
- ^ «Поддержка нескольких размеров страниц в приложении к операционной системе Solaris» (PDF) . Sun BluePrints Online . Sun Microsystems . Проверено 19 января 2008 .
- ^ а б «Примечания к выпуску FreeBSD 7.2-RELEASE» . Фонд FreeBSD . Проверено 3 мая 2009 .
- ^ «2.3.1 Постоянная память / 2.3.2 Программная память с произвольным доступом». Руководство по программированию на языке ассемблера MCS-4 - Руководство по программированию микрокомпьютерной системы INTELLEC 4 (PDF) (предварительная редакция). Санта-Клара, Калифорния, США: Intel Corporation . Декабрь 1973 г. С. 2-3–2-4. MCS-030-1273-1. Архивировано (PDF) из оригинала 2020-03-01 . Проверено 2 марта 2020 .
[…] ПЗУ делится на страницы, каждая из которых содержит 256 байт. Таким образом, ячейки с 0 по 255 составляют страницу 0 ПЗУ, ячейки с 256 по 511 содержат страницу 1 и так далее. […] Программная оперативная память (RAM) организована точно так же, как ROM. […]
- ^ а б «1. Введение: Выравнивание сегментов». Утилиты семейства 8086 - Руководство пользователя систем разработки на базе 8080/8085 (PDF) . Редакция E (A620 / 5821 6K DD ed.). Санта-Клара, Калифорния, США: Intel Corporation . Май 1982 [1980, 1978]. п. 1-6. Номер заказа: 9800639-04. Архивировано (PDF) из оригинала 29 февраля 2020 года . Проверено 29 февраля 2020 .
дальнейшее чтение
- Дандамуди, Шиварама П. (2003). Основы компьютерной организации и дизайна (1-е изд.). Springer . С. 740–741. ISBN 0-387-95211-X.