Да, на x86 G-бит полезен только тогда, когда есть какой-то другой тип управления (например, ограничение его кольцом 0, которое использует ядро) или в незащищенной операционной системе1 .
Думайте о G-бите как об оптимизации системных вызовов: ядро отображает свои страницы как глобальные, поэтому сброс TLB не требуется. Вам по-прежнему нужны сбросы TLB при переключении контекста между процессами, но они часто на пару порядков менее распространены, чем переключатели kernel‹->usermode.
Вы можете представить сценарий, в котором G-страницы полезны для пользовательских процессов, таких как разделяемая память: переключение между двумя процессами не требует аннулирования записей TLB для разделяемой памяти если он знал об этом и использовал сопоставление G==1
для обоих процессов. Заполнение TLB на самом деле не так уж и плохо в наши дни, потому что современный x86 кэширует множество записей таблицы даже за пределами TLB, чтобы обеспечить быстрое заполнение.
Я не думаю, что установка битов G и U запрещена, но ядро не собирается настраивать их таким образом.
И последнее замечание: вы можете представить, что глобальное сопоставление только для чтения полезно для чего-то вроде механизм vdso. Все процессы будут отображать эту страницу, но не смогут ее изменить, и ядро обновит ее по мере необходимости. Конечно, я не понимаю, как на самом деле заставить это работать, так как ядру потребуется доступ для записи, и, кажется, нет способа выразить «только чтение для кольца 3, r/w для кольца 0» в таблица страниц. Возможно, ядро могло бы использовать другое сопоставление для этой страницы, но я не уверен, что это законно: наличие сопоставления, которое переопределяет сопоставление «G» (поскольку, если сопоставление G находится в TLB, ЦП может никогда не увидеть переопределяющее сопоставление ).
1 Технически это может быть полезно в однопользовательской операционной системе, где все процессы user-mode имеют одинаковые привилегии, но ядро по-прежнему защищено. из пользовательского режима, но, насколько мне известно, эта модель не существует в современных ОС.
person
BeeOnRope
schedule
01.02.2017