Может ли быть несколько дескрипторов сегментов для одного сегмента? - PullRequest
0 голосов
/ 06 сентября 2018

Можно ли использовать несколько дескрипторов сегментов для одного сегмента, чтобы дать разные уровни привилегий отдельным разрешениям в этом сегменте? Например, разрешить кольцу 2 чтение или запись в сегмент данных через один дескриптор, а затем разрешить кольцу 3 доступ только для чтения к сегменту через другой?

1 Ответ

0 голосов
/ 06 сентября 2018

Вы спрашиваете, может ли основание / предел разных сегментов перекрываться. Да, конечно, они могут, как в реальном режиме. Наличие разных уровней привилегий не является препятствием для этого.

Полное перекрытие - это нормальная ситуация в 32-разрядной модели с плоской памятью, где CS - это сегмент кода, который охватывает все 0,4 ГБ, а DS = ES - другой дескриптор для сегмента, который охватывает тот же диапазон память.

Это ничем не отличается от нескольких таблиц страниц, отображающих один и тот же физический кадр страницы на разные виртуальные адреса.


x86 гарантирует отсутствие проблем с наложением кэша, если к одному физическому адресу можно получить доступ через несколько сегментов: смещения или виртуальные адреса.

Большинство микроархитектур x86 используют кэши VIPT L1 со всеми битами индекса из-за смещения страницы, поэтому они ведут себя как кэши PIPT. (И другие уровни кеша - это PIPT). Таким образом, кэширование и устранение неоднозначности в памяти основано на физическом адресе или, по крайней мере, на линейном адресе, что делает его несущественным для аппаратного обеспечения.

...