Re[12]: Конец интел?
От: Pavel Dvorkin Россия  
Дата: 13.09.24 15:07
Оценка:
Здравствуйте, netch80, Вы писали:

N>Поэтому это просто красивый пшик...


Ну не совсем. Да, в итоге будет 32 бита. Но limit в дескрипторе не отменен, и если он не 4Г, то нарвешься не на page fault, а на general protection fault. А так да, в итоге 4 Г, конечно

PD>>CS1 base = 0, limit = 1 MB, ring 0

PD>>CS2 base = 1MB limit = 1 MB, ring 3
PD>>CS3 base = 2MB limit = 1 MB, ring 0
PD>>CS4 base = 3MB limit = 1 MB, ring 3

N>[...]


PD>>Так что зафиксировать деление 32-битного на 2 части просто нельзя.


N>Не просто можно, а это постоянно и делали. Если у тебя все страницы со старшим битом линейного адреса равным 0 (если вообще существуют) имеют права доступа пользователя, а 1 — супервизора. Сейчас в 64 битах повторяется то же самое с поправкой на используемую длину виртуального (линейного) адреса (48 или 57 бит).


Это если со старшим. А если сегменты как я нарисовал, то так не получится.

N>А то, что ты показал считалочку с сегментами — "перемножается" на это: имеют значение в итоге минимальные права из двух источников. Если тебе дали сегмент с правом доступа юзера (ring 3) но на адрес, через страничный механизм доступный только супервизору (считаем, ring 0) — всё, доступа нет.


Насчет доступа — согласен, а в остальном все остается. Лежат себе в 32-битном пространстве 1 Мб куски с правами S и U вперемежку. Почему лежат — а так LDT настроили. И не получится никакого разделения АП на U/S части. А запретить нельзя.


N>Да, эта сегментная хрень по факту легаси и уже не использовалась никем в здравом уме и твёрдой памяти — именно поэтому AMD в long mode просто вырубило нафиг это, ничего не потеряв. Да, у дескриптора остаётся DPL, которое задаёт, с какими правами вообще это исполнять (kernel vs. user), и L (исполнять в 32 или 64 битах). Остальные бесполезны.


Конечно, не использовалась. Но не могла фирма Intel не дать возможность ее использовать. Даже если понимала, что никому не понадобится — все равно обеспечить возможность должна была дать.


N>См. выше. При правах доступа по страницах, доступных в принципе (i386 и далее) или единственно оставшихся (amd64) — это уже бесполезно или недоступно. Ну а то, что сегментация показывает внутрь того же адресного пространства, и делает её бесполезной.


Бесполезно — да. А обеспечить работу были обязаны. А ну как все же кто-то решит использовать не flat, а как я написал.

PD>>>>Другое дело, что вообще-то можно было совсем отказаться от сегментных регистров в 32 битном режиме. Кстати, где-то я читал, что при переходе к 64-битному от них хотели отказаться, но возникли какие-то проблемы с виртуальными машинами. Пруф не дам.


PD>>Увы, где-то прочитал, где- не помню, так что ссылку дать не могу.


N>Меня в этом удивило именно то, что "с виртуальными машинами".


Вот это я точно помню. Помню (не дословно) и текст. Примерно так — хотели отказаться от сегментных регистров, но разработчики виртуальных машин столкнулись с непреодолимыми трудностями.
With best regards
Pavel Dvorkin
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.