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 МБ (так называемые расширения размера страницы ) (страницы размером 2 МБ при использовании PAE ) в дополнение к своим стандартным страницам размером 4 КиБ; новые процессоры x86-64 , такие как новые процессоры AMD64 от AMD и процессоры Intel Westmere [27] и более поздние версии 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] Начиная с версии 9, Solaris поддерживает большие страницы на SPARC и x86. [34] [35] В FreeBSD 7.2-RELEASE есть суперстраницы. [36] Обратите внимание, что до недавнего времени в Linux приложения приходилось модифицировать, чтобы использовать огромные страницы. В ядре версии 2.6.38 появилась поддержка прозрачного использования огромных страниц. [31] В ядрах Linux, поддерживающих прозрачные огромные страницы, а также в FreeBSD и Solaris , приложения автоматически используют огромные страницы без необходимости их модификации. [36]

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

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

  1. ^ Кристофер Крюгель (3 декабря 2012 г.). «Операционные системы (курс CS170-08)» (PDF) . cs.ucsb.edu . Архивировано (PDF) из оригинала 10 августа 2016 г. Проверено 13 июня 2016 г.
  2. ^ Мартин К. Ринар (22 августа 1998 г.). «Конспект лекций по операционным системам, лекция 9. Введение в пейджинг». люди.csail.mit.edu . Архивировано из оригинала 1 июня 2016 г. Проверено 13 июня 2016 г.
  3. ^ «Виртуальная память: страницы и страничные рамки» . cs.miami.edu . 31 октября 2012 г. Архивировано из оригинала 11 июня 2016 г. Проверено 13 июня 2016 г.
  4. ^ Белзер, Джек; Хольцман, Альберт Г.; Кент, Аллен, ред. (1981), «Системы виртуальной памяти», Энциклопедия информатики и техники, вып. 14, CRC Press, с. 32, ISBN 0-8247-2214-0
  5. ^ Каземи, Дариус (11 января 2019 г.). «РФК-11». 365 RFC .
  6. ^ Вайсберг, П.; Уайзман, Ю. (10 августа 2009 г.). Использование размера страницы размером 4 КБ для виртуальной памяти устарело . Международная конференция IEEE 2009 г. по повторному использованию и интеграции информации. CiteSeerX 10.1.1.154.2023 . дои : 10.1109/IRI.2009.5211562. 
  7. ^ limits.h  - Справочник базовых определений, Единая спецификация UNIX , версия 4 от Open Group.
  8. ^ sysconf  - Справочник по системным интерфейсам, Единая спецификация UNIX , версия 4 от Открытой группы.
  9. ^ sysconf(3)  -  Руководство по функциям библиотеки Linux.
  10. ^ sysconf(3)  -  Руководство по функциям библиотеки Darwin и macOS .
  11. ^ sysconf(3C)  -  Справочное руководство по основным библиотечным функциям Solaris 11.4.
  12. ^ getconf  - Справочник по оболочке и утилитам, Единая спецификация UNIX , версия 4 от Open Group.
  13. ^ getconf(1)  -  Руководство пользователя по командам Linux
  14. ^ getconf(1)  -  Руководство по общим командам Darwin и macOS
  15. ^ «Функция GetSystemInfo». Майкрософт. 2021-10-13.
  16. ^ "Структура SYSTEM_INFO" . Майкрософт. 23 сентября 2022 г.
  17. ^ "Огромные страницы — Debian Wiki" . Wiki.debian.org. 21 июня 2011 г. Проверено 6 февраля 2014 г.
  18. ^ ab «Руководство разработчика программного обеспечения для архитектур Intel® 64 и IA-32, том 3 (3A, 3B, 3C и 3D): Руководство по системному программированию» (PDF) . Декабрь 2016. с. 4-2.
  19. ^ ab "Документация/vm/hugetlbpage.txt". Документация по ядру Linux . ядро.орг . Проверено 6 февраля 2014 г.
  20. ^ «Руководство разработчика программного обеспечения для архитектуры Intel Itanium, том 2: Архитектура системы» (PDF) . Май 2010. с. 2:58.
  21. ^ Руководство по производительности IBM Power Systems: внедрение и оптимизация. Красные книги IBM. Февраль 2013 г. ISBN. 978-0-7384-3766-8. Проверено 17 марта 2014 г.
  22. ^ «Руководство по архитектуре SPARC, версия 8» . 1992. с. 249.
  23. ^ «Архитектура UltraSPARC 2007» (PDF) . 27 сентября 2010 г. п. 427.
  24. ^ «Справочное руководство по архитектуре ARM для версий ARMv7-A и ARMv7-R» . Рука . 20 мая 2014 г. п. Б3-1324.
  25. ^ «Гранула перевода». Изучите архитектуру — управление памятью AArch64 . Рука . Проверено 19 августа 2022 г.
  26. ^ аб Уотерман, Эндрю; Асанович, Крсте; Хаузер, Джон (2021). Руководство по набору команд RISC-V, том II: Привилегированная архитектура (PDF) . стр. 79–87.
  27. ^ «Intel Xeon 5670: шесть улучшенных ядер». АнандТех . Проверено 3 ноября 2012 г.
  28. ^ «Поддержка операционной системы общего назначения для страниц нескольких размеров» (PDF) . static.usenix.org . Проверено 2 ноября 2012 г.
  29. ^ Наварро, Хуан; Айер, Ситарарн; Друшель, Питер; Кокс, Алан (декабрь 2002 г.). Практичная и прозрачная поддержка суперстраниц операционной системой (PDF) . 5-й симпозиум Usenix по проектированию и внедрению операционных систем.
  30. ^ "Страницы - данквики, вики Ника Блэка" . Проверено 17 июня 2023 г.
  31. ^ аб Корбет, Джонатан. «Прозрачные огромные страницы в 2.6.38». ЛВН . Проверено 2 марта 2011 г.
  32. ^ «Поддержка больших страниц» . Документы Майкрософт . 08.05.2018.
  33. ^ «Программа AGP может зависать при использовании расширения размера страницы на процессоре Athlon» . Поддержка.microsoft.com. 27 января 2007 г. Проверено 3 ноября 2012 г.
  34. ^ «Поддержка нескольких размеров страниц в операционной системе Solaris» (PDF) . Чертежи Sun в Интернете . Сан Микросистемс. Архивировано из оригинала (PDF) 12 марта 2006 г. Проверено 19 января 2008 г.
  35. ^ «Поддержка нескольких размеров страниц в приложении операционной системы Solaris» (PDF) . Чертежи Sun в Интернете . Сан Микросистемс. Архивировано из оригинала (PDF) 1 января 2007 г. Проверено 19 января 2008 г.
  36. ^ ab «Примечания к выпуску FreeBSD 7.2-RELEASE» . Фонд FreeBSD . Проверено 3 мая 2009 г.
  37. ^ «2.3.1 Постоянное запоминающее устройство / 2.3.2 Оперативное запоминающее устройство программы» . Руководство по программированию на языке ассемблера MCS-4 — Руководство по программированию микрокомпьютерной системы INTELLEC 4 (PDF) (предварительное издание). Санта-Клара, Калифорния, США: Корпорация Intel . Декабрь 1973 г., стр. 2-3–2-4. MCS-030-1273-1. Архивировано (PDF) из оригинала 01 марта 2020 г. Проверено 02 марта 2020 г. […] ПЗУ далее разделено на страницы, каждая из которых содержит 256 байт. Таким образом, ячейки с 0 по 255 содержат страницу 0 ПЗУ, ячейки с 256 по 511 содержат страницу 1 и так далее. […] Программная оперативная память (ОЗУ) организована точно так же, как ПЗУ. […]
  38. ^ ab «1. Введение: выравнивание сегментов». Утилиты семейства 8086 — Руководство пользователя для систем разработки на базе 8080/8085 (PDF) . Версия E (A620/5821 6K DD изд.). Санта-Клара, Калифорния, США: Корпорация Intel . Май 1982 г. [1980, 1978]. п. 1-6. Номер заказа: 9800639-04. Архивировано (PDF) из оригинала 29 февраля 2020 г. Проверено 29 февраля 2020 г.

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