Страница (память компьютера)
Страница страница , памяти или виртуальная страница — это непрерывный блок виртуальной памяти фиксированной длины , описываемый одной записью в таблице страниц . Это наименьшая единица данных для управления памятью в операционной системе, использующей виртуальную память. Аналогично, страничный фрейм — это наименьший непрерывный блок физической памяти фиксированной длины , в который операционная система отображает страницы памяти. [1] [2] [3]
Передача страниц между основной памятью и вспомогательным хранилищем, например жестким диском , называется подкачкой или подкачкой. [4]
Объяснение
[ редактировать ]Память компьютера разделена на страницы, чтобы информацию можно было найти быстрее.
Концепция названа по аналогии со страницами печатной книги. Если читатель хотел найти, например, 5000-е слово в книге, он мог считать с первого слова. Это потребует много времени. Было бы намного быстрее, если бы у читателя был список слов на каждой странице. По этому списку они могли определить, на какой странице появляется 5000-е слово и сколько слов следует посчитать на этой странице. Этот список слов на странице книги аналогичен таблице страниц компьютерной файловой системы . [5]
Размер страницы
[ редактировать ]Компромисс размера страницы
[ редактировать ]Этот раздел нуждается в дополнительных цитатах для проверки . ( февраль 2015 г. ) |
Размер страницы обычно определяется архитектурой процессора. Традиционно страницы в системе имели одинаковый размер, например 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("The page size for this system is %ld bytes.\n",
sysconf(_SC_PAGESIZE)); /* _SC_PAGE_SIZE is OK too. */
return 0;
}
Во многих системах Unix утилита командной строки getconf
можно использовать. [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("The page size for this system is %u bytes.\n", si.dwPageSize);
return 0;
}
Несколько размеров страницы
[ редактировать ]Некоторые архитектуры набора команд могут поддерживать несколько размеров страниц, включая страницы, значительно превышающие стандартный размер страницы. Доступные размеры страниц зависят от архитектуры набора команд, типа процессора и режима работы (адресации). Операционная система выбирает один или несколько размеров из размеров, поддерживаемых архитектурой. Обратите внимание, что не все процессоры реализуют все определенные большие размеры страниц. Эта поддержка больших страниц (известных как «огромные страницы» в Linux , «суперстраницы» в FreeBSD и «большие страницы» в терминологии Microsoft Windows и IBM AIX ) позволяет использовать «лучшее из обоих миров», снижая нагрузку на TLB. кэша (иногда увеличивая скорость на целых 15%) для больших выделений, сохраняя при этом использование памяти на разумном уровне для небольших выделений.
Архитектура | Самый маленький размер страницы | Большие размеры страниц |
---|---|---|
IA-32 (32-разрядная версия x86 ) [18] | 4 КиБ | 4 МБ в режиме PSE , 2 МБ в режиме PAE [19] |
х86-64 [18] | 4 КиБ | 2 МиБ, 1 ГиБ (только если ЦП имеет PDPE1GB флаг)
|
ИА-64 ( Итан ) [20] | 4 КиБ | 8 КиБ, 64 КиБ, 256 КиБ, 1 МиБ, 4 МиБ, 16 МиБ, 256 МиБ [19] |
Мощность ОДИН [21] | 4 КиБ | 64 КиБ, 16 МиБ, 16 ГиБ |
SPARC v8 с эталонным MMU SPARC [22] | 4 КиБ | 256 КиБ, 16 МиБ |
УльтраСПАРК Архитектура 2007 [23] | 8 КиБ | 64 КиБ, 512 КиБ (дополнительно), 4 МиБ, 32 МиБ (дополнительно), 256 МиБ (дополнительно), 2 ГиБ (дополнительно), 16 ГиБ (дополнительно) |
ARMv7 [24] | 4 КиБ | 64 КиБ, 1 МиБ («раздел»), 16 МиБ («суперсекция») (определяется конкретной реализацией) |
AArch64 [25] | 4 КиБ | 16 КиБ, 64 КиБ, 2 МиБ, 32 МиБ, 512 МиБ, 1 ГиБ |
RISCV32 [26] | 4 КиБ | 4 МБ («мегастраница») |
RISCV64 [26] | 4 КиБ | 2 МиБ («мегастраница»), 1 ГиБ («гигастраница»), 512 ГиБ («терастраница», только для ЦП с 43-битным адресным пространством или более), 256 ТиБ («петастраница», только для ЦП с 57-битным адресным пространством). адресное пространство или больше), |
Начиная с Pentium Pro и AMD Athlon , процессоры x86 поддерживают страницы размером 4 МБ (так называемые расширения размера страницы ) (страницы размером 2 МБ при использовании PAE ) в дополнение к своим стандартным страницам размером 4 КиБ; новые процессоры x86-64 , такие как и новые процессоры AMD64 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]
См. также
[ редактировать ]- Грантовый стол
- Ошибка страницы
- Таблица страниц
- Пейджинг памяти
- Виртуальная память
- Нулевая страница — (часто размером 256 байт) [37] [38] ) область памяти в самом начале адресной комнаты процессора
- Нулевая страница (CP/M) – 256 байт. [38] структура данных в начале программы
Ссылки
[ редактировать ]- ^ Кристофер Крюгель (3 декабря 2012 г.). «Операционные системы (курс CS170-08)» (PDF) . cs.ucsb.edu . Архивировано (PDF) из оригинала 10 августа 2016 г. Проверено 13 июня 2016 г.
- ^ Мартин К. Ринар (22 августа 1998 г.). «Конспект лекций по операционным системам, лекция 9. Введение в пейджинг» . люди.csail.mit.edu . Архивировано из оригинала 1 июня 2016 г. Проверено 13 июня 2016 г.
- ^ «Виртуальная память: страницы и страничные рамки» . cs.miami.edu . 31 октября 2012 г. Архивировано из оригинала 11 июня 2016 г. Проверено 13 июня 2016 г.
- ^ Белзер, Джек; Хольцман, Альберт Г.; Кент, Аллен, ред. (1981), «Системы виртуальной памяти», Энциклопедия информатики и техники , вып. 14, CRC Press, с. 32, ISBN 0-8247-2214-0
- ^ Каземи, Дариус (11 января 2019 г.). «РФК-11» . 365 RFC .
- ^ Вайсберг, П.; Уайзман, Ю. (10 августа 2009 г.). Использование размера страницы размером 4 КБ для виртуальной памяти устарело . Международная конференция IEEE 2009 г. по повторному использованию и интеграции информации. CiteSeerX 10.1.1.154.2023 . дои : 10.1109/IRI.2009.5211562 .
- ^ Единая спецификация UNIX , версия 4 от Open Group. – Справочник базовых определений,
- ^ Единая спецификация UNIX , версия 4 от Открытой группы. – Справочник по системным интерфейсам,
- ^ Linux функциям библиотеки Руководство по –
- ^ Darwin и macOS функциям библиотеки Руководство по –
- ^ Solaris 11.4 по базовым библиотечным функциям Справочное руководство –
- ^ Единая спецификация UNIX , версия 4 от Open Group. – Справочник по оболочке и утилитам,
- ^ Linux пользователя по командам Руководство –
- ^ Darwin и macOS по общим командам Руководство –
- ^ «Функция GetSystemInfo» . Майкрософт. 2021-10-13.
- ^ «Структура SYSTEM_INFO» . Майкрософт. 23 сентября 2022 г.
- ^ «Огромные страницы — Debian Wiki» . Wiki.debian.org. 21 июня 2011 г. Проверено 6 февраля 2014 г.
- ^ Jump up to: а б «Руководство разработчика программного обеспечения для архитектур Intel® 64 и IA-32, том 3 (3A, 3B, 3C и 3D): Руководство по системному программированию» (PDF) . Декабрь 2016. с. 4-2.
- ^ Jump up to: а б «Документация/vm/hugetlbpage.txt» . Документация по ядру Linux . ядро.орг . Проверено 6 февраля 2014 г.
- ^ «Руководство разработчика программного обеспечения для архитектуры Intel Itanium, том 2: Архитектура системы» (PDF) . Май 2010. с. 2:58.
- ^ Руководство по производительности IBM Power Systems: внедрение и оптимизация . Красные книги IBM. Февраль 2013 г. ISBN. 978-0-7384-3766-8 . Проверено 17 марта 2014 г.
- ^ «Руководство по архитектуре SPARC, версия 8» . 1992. с. 249.
- ^ «Архитектура UltraSPARC 2007» (PDF) . 27 сентября 2010 г. п. 427.
- ^ «Справочное руководство по архитектуре ARM для версий ARMv7-A и ARMv7-R» . Рука . 20 мая 2014 г. п. Б3-1324.
- ^ «Переводческая гранула» . Изучите архитектуру — управление памятью AArch64 . Рука . Проверено 19 августа 2022 г.
- ^ Jump up to: а б Уотерман, Эндрю; Асанович, Крсте ; Хаузер, Джон (2021). Руководство по набору команд RISC-V, том II: Привилегированная архитектура (PDF) . стр. 79–87.
- ^ «Intel Xeon 5670: шесть улучшенных ядер» . АнандТех . Проверено 3 ноября 2012 г.
- ^ «Поддержка операционной системы общего назначения для страниц нескольких размеров» (PDF) . static.usenix.org . Проверено 2 ноября 2012 г.
- ^ Наварро, Хуан; Айер, Ситарарн; Друшель, Питер; Кокс, Алан (декабрь 2002 г.). Практичная и прозрачная поддержка суперстраниц операционной системой (PDF) . 5-й симпозиум Usenix по проектированию и внедрению операционных систем.
- ^ "Страницы - Данквики, вики Ника Блэка" . Проверено 17 июня 2023 г.
- ^ Jump up to: а б Корбет, Джонатан. «Прозрачные огромные страницы в версии 2.6.38» . ЛВН . Проверено 2 марта 2011 г.
- ^ «Поддержка больших страниц» . Документы Майкрософт . 08.05.2018.
- ^ «Программа AGP может зависать при использовании расширения размера страницы на процессоре Athlon» . Support.microsoft.com. 27 января 2007 г. Проверено 3 ноября 2012 г.
- ^ «Поддержка нескольких размеров страниц в операционной системе Solaris» (PDF) . Чертежи Sun в Интернете . Сан Микросистемс. Архивировано из оригинала (PDF) 12 марта 2006 г. Проверено 19 января 2008 г.
- ^ «Поддержка нескольких размеров страниц в приложении операционной системы Solaris» (PDF) . Чертежи Sun в Интернете . Сан Микросистемс. Архивировано из оригинала (PDF) 1 января 2007 г. Проверено 19 января 2008 г.
- ^ Jump up to: а б «Примечания к выпуску FreeBSD 7.2-RELEASE» . Фонд FreeBSD . Проверено 3 мая 2009 г.
- ^ «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 и так далее. […] Программная оперативная память (ОЗУ) организована точно так же, как ПЗУ. […]
- ^ Jump up to: а б «1. Введение: выравнивание сегментов». Утилиты семейства 8086 — Руководство пользователя для систем разработки на базе 8080/8085 (PDF) . Версия E (A620/5821 6K DD изд.). Санта-Клара, Калифорния, США: Корпорация Intel . Май 1982 г. [1980, 1978]. п. 1-6. Номер заказа: 9800639-04. Архивировано (PDF) из оригинала 29 февраля 2020 г. Проверено 29 февраля 2020 г.
Дальнейшее чтение
[ редактировать ]- Дандамуди, Шиварама П. (2003). Основы компьютерной организации и проектирования (1-е изд.). Спрингер . стр. 740–741. ISBN 0-387-95211-Х .