Для чего нужны «глобальные страницы»? (процессоры Intel x86)
В Руководстве разработчика программного обеспечения Intel (Руководство разработчика программного обеспечения для архитектур Intel 64 и IA-32, редактированная версия, июнь 2023 г.), том 3A, раздел 4.10.2.4, при объяснении TLB о «глобальных страницах» говорится следующее:
Архитектуры Intel-64 и IA-32 также допускают глобальные страницы, когда флаг PGE (бит 7) равен 1 в CR4. Если флаг G (бит 8) равен 1 в записи структуры подкачки, которая отображает страницу (либо PTE, либо запись структуры подкачки, в которой флаг PS равен 1), любая запись TLB, кэшированная для линейного адреса, использующего эту подкачку. Запись -структуры считается глобальной. Поскольку флаг G используется только в записях структуры подкачки, отображающих страницу, и поскольку информация из таких записей не кэшируется в кешах структуры подкачки, функция глобальной страницы не влияет на поведение кешей структуры подкачки.
Логический процессор может использовать глобальную запись TLB для преобразования линейного адреса, даже если запись TLB связана с PCID, отличным от текущего PCID.
Я понимаю, что когда страница не является глобальной, сопоставление адресов этой страницы является локальным для конкретного PCID , и что когда страница является глобальной, сопоставление адресов сохраняется для всех PCID.
Чего я не понимаю, так это того, когда программное обеспечение когда-либо будет использовать эту функцию. Сначала я думал, что его можно использовать для групп потоков, которые имеют одно и то же значение CR3 (так что они по существу находятся в одном виртуальном адресном пространстве), или может использоваться в таких случаях, какfork
где виртуальное адресное пространство копируется при записи и в противном случае используется совместно.
Однако это не имеет смысла, поскольку кажется, что глобальные страницы на самом деле должны применяться ко всем процессам, а не только к определенным процессам. Теперь я могу предположить, что он используется для трансляции виртуальных адресов ядра, потому что (я не уверен на 100%, но) в виртуальном адресном пространстве есть некоторая фиксированная область, которая используется ядром и имеет один и тот же перевод для всех процессов. .
Следовательно, мой вопрос: правильно ли я понимаю глобальные страницы, и если да, то когда операционная система когда-либо будет использовать эту функцию?
Заранее спасибо.