stringtranslate.com

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

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

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

Объяснение

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

Концепция названа по аналогии со страницами печатной книги. Если читатель хотел найти, например, 5000-е слово в книге, он мог бы считать с первого слова. Это заняло бы много времени. Было бы намного быстрее, если бы у читателя был список того, сколько слов находится на каждой странице. Из этого списка он мог бы определить, на какой странице находится 5000-е слово, и сколько слов нужно посчитать на этой странице. Этот список слов на странице книги аналогичен таблице страниц в файловой системе компьютера . [5]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#include <stdio.h> #include <windows.h>  int main ( void ) { SYSTEM_INFO si ; GetSystemInfo ( & si );  printf ( "Размер страницы для этой системы составляет %u байт. \n " , si . dwPageSize ); вернуть 0 ; } 

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

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

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

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

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

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

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

Ссылки

  1. ^ Кристофер Крюгель (2012-12-03). "Операционные системы (курс CS170-08)" (PDF) . cs.ucsb.edu . Архивировано (PDF) из оригинала 2016-08-10 . Получено 2016-06-13 .
  2. ^ Мартин С. Ринард (1998-08-22). "Конспект лекций по операционным системам, лекция 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. ^ Каземи, Дариус (11 января 2019 г.). «РФК-11». 365 RFC .
  6. ^ Weisberg, P.; Wiseman, Y. (2009-08-10). Использование размера страницы 4 КБ для виртуальной памяти устарело . Международная конференция IEEE по повторному использованию и интеграции информации 2009 года. CiteSeerX 10.1.1.154.2023 . doi :10.1109/IRI.2009.5211562. 
  7. ^ limits.h  – Справочник базовых определений, Единая спецификация UNIX , версия 4 от The Open Group
  8. ^ sysconf  – Справочник по системным интерфейсам, Единая спецификация UNIX , версия 4 от The Open Group
  9. ^ sysconf(3)  –  Руководство по функциям библиотеки Linux
  10. ^ sysconf(3)  –  Руководство по функциям библиотеки Darwin и macOS
  11. ^ sysconf(3C)  –  Справочное руководство по основным библиотечным функциям Solaris 11.4
  12. ^ getconf  – Справочник по оболочкам и утилитам, Единая спецификация UNIX , версия 4 от The Open Group
  13. ^ getconf(1)  –  Руководство по командам пользователя Linux
  14. ^ getconf(1)  –  Руководство по основным командам Darwin и macOS
  15. ^ "Функция GetSystemInfo". Microsoft. 2021-10-13.
  16. ^ "Структура SYSTEM_INFO". Microsoft. 2022-09-23.
  17. ^ "Hugepages - Debian Wiki". Wiki.debian.org. 2011-06-21 . Получено 2014-02-06 .
  18. ^ ab "Руководство разработчика программного обеспечения для архитектур Intel® 64 и IA-32, том 3 (3A, 3B, 3C и 3D): Руководство по системному программированию" (PDF) . Декабрь 2016 г., стр. 4-2.
  19. ^ ab "Documentation/vm/hugetlbpage.txt". Документация ядра Linux . kernel.org . Получено 2014-02-06 .
  20. ^ «Руководство разработчика программного обеспечения для архитектуры Intel Itanium. Том 2: Архитектура системы» (PDF) . Май 2010 г., стр. 2:58.
  21. ^ IBM Power Systems Performance Guide: Внедрение и оптимизация. IBM Redbooks. Февраль 2013 г. ISBN 978-0-7384-3766-8. Получено 2014-03-17 .
  22. ^ «Руководство по архитектуре SPARC, версия 8». 1992. стр. 249.
  23. ^ "Архитектура UltraSPARC 2007" (PDF) . 2010-09-27. стр. 427.
  24. ^ "Справочное руководство по архитектуре ARM, версии ARMv7-A и ARMv7-R". Arm . 2014-05-20. стр. B3-1324.
  25. ^ "Трансляционная гранула". Изучите архитектуру - Управление памятью AArch64 . Arm . Получено 2022-08-19 .
  26. ^ ab Waterman, Andrew; Asanović, Krste ; Hauser, John (2021). Руководство по набору инструкций RISC-V, том II: Привилегированная архитектура (PDF) . стр. 79–87.
  27. ^ "Intel Xeon 5670: шесть улучшенных ядер". AnandTech . Получено 2012-11-03 .
  28. ^ "Поддержка операционных систем общего назначения для нескольких размеров страниц" (PDF) . static.usenix.org . Получено 2012-11-02 .
  29. ^ Наварро, Хуан; Айер, Ситарарн; Друшель, Питер; Кокс, Алан (декабрь 2002 г.). Практическая, прозрачная поддержка операционных систем для суперстраниц (PDF) . 5-й симпозиум Usenix по проектированию и внедрению операционных систем.
  30. ^ "Страницы - dankwiki, вики Ника Блэка" . Получено 2023-06-17 .
  31. ^ ab Corbet, Jonathan. "Прозрачные огромные страницы в 2.6.38". LWN . Получено 2011-03-02 .
  32. ^ "Поддержка больших страниц". Microsoft Docs . 2018-05-08.
  33. ^ "Программа AGP может зависнуть при использовании расширения размера страницы на процессоре Athlon". Support.microsoft.com. 2007-01-27 . Получено 2012-11-03 .
  34. ^ "Поддержка нескольких размеров страниц в операционной системе Solaris" (PDF) . Sun BluePrints Online . Sun Microsystems. Архивировано из оригинала (PDF) 2006-03-12 . Получено 2008-01-19 .
  35. ^ "Поддержка нескольких размеров страниц в приложении Solaris Operating System" (PDF) . Sun BluePrints Online . Sun Microsystems. Архивировано из оригинала (PDF) 2007-01-01 . Получено 2008-01-19 .
  36. ^ ab "FreeBSD 7.2-RELEASE Release Notes". FreeBSD Foundation . Получено 2009-05-03 .
  37. ^ "2.3.1 Постоянное запоминающее устройство / 2.3.2 Программируемое оперативное запоминающее устройство". Руководство по программированию на языке ассемблера MCS-4 - Руководство по программированию микрокомпьютерной системы INTELLEC 4 (PDF) (Предварительное издание). Санта-Клара, Калифорния, США: Корпорация Intel . Декабрь 1973 г. стр. 2-3–2-4. MCS-030-1273-1. Архивировано (PDF) из оригинала 01.03.2020 . Получено 02.03.2020 . […] ПЗУ далее делится на страницы, каждая из которых содержит 256 байтов. Таким образом, ячейки с 0 по 255 составляют страницу 0 ПЗУ, ячейки с 256 по 511 составляют страницу 1 и так далее. […] Программируемое оперативное запоминающее устройство (ОЗУ) организовано точно так же, как ПЗУ. […]
  38. ^ ab "1. Введение: Выравнивание сегментов". 8086 Family Utilities - Руководство пользователя для систем разработки на базе 8080/8085 (PDF) . Редакция E (A620/5821 6K DD ed.). Санта-Клара, Калифорния, США: Intel Corporation . Май 1982 [1980, 1978]. стр. 1-6. Номер заказа: 9800639-04. Архивировано (PDF) из оригинала 29.02.2020 . Получено 29.02.2020 .

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