Re[7]: история персональной ВТ
От: m2l  
Дата: 20.01.22 07:54
Оценка: +1 -1
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Так, давай разберемся до конца


PD>Есть 16-битный PM и 32-битный PM. Первый появился в 80286, второй — в 80386. Сейчас, естественно, есть и 64-битный.

Согласен.

PD>16-битный PM — это LDT/GDT/TR, 4 кольца и т.д. Сегментная модель. Страниц нет как понятия.

Согласен.

PD>32-битный PM появился в 80286. Добавлены регистры CRi, страничный механизм, Page Directory, Page tables, трансляция линейного адреса.

Согласен.

PD>Для совместимости с PM-16, естественно, оставили LDT/GDT, и они теперь под 32 бита, но практически все ОС настраивают сегменты так, чтобы из база была 0, а лимит 4Г. То есть фактически "обнуляют" сегментный механизм от 80286 — он есть, но его преобразование есть тождественное преобразование.

Нет. Таблицы трансляции работают через таблицы GDT/LDT — они часть общего механизма.

Александр Фролов, Григорий Фролов. Защищенный режим процессоров Intel 80286/80386/80486. 5. Особенности процессоров I80386 и I80486. 5.1. Преобразование адресов

PD>Кстати, кое-что от PM-16 утеряли. Вместо 4 колец реально осталось 2 — User/Supervisor, там один лишь бит в PTE. Но это никого не огорчило — колец 1 и 2 никогда реально и не было. Как, впрочем, и задач в смысле 80286 с их переключением средствами самого процессора с переключением LDT. И сама идея иметь одну GDT и много LDT под каждую задачу тоже нигде не использовалась — в Windows 3.x все задачи Windows сидели в одной LDT и переключались средствами Windows, а не процессора.

Нет.
* Бит в PTE определяет кому страница принадлежит — программе или операционной системе, это немного другой механизм. Разделения на 4-ре кольца (в современных, учитывая SMM можно считать что и больше) так и осталось.
* Байка о двух режимах идет от Windows NT, которая изначально разрабатывалась ещё под процессоры DEC и Alpha — а в одном из них защищенный режим (его не Intel придумал, а сделал аналог уже существовавших решений) был ограничен как-раз двумя уровнями. Отсюда и взялась эта унификация, когда всю систему уложили в 0 и 3 кольца. И то, спроектировано ядро так, что те-же драйверы устройств, изначально можно было вынести в ring 1 или ring 2. Эти элементы микроядра небыли использованы по большей мере из-за падения производительности.
* Сама идея одной GDT и многих LDT вполне себе живёт по сей день и в Windows и в Linux. Где ядро и драйверы работают в общем для всей остальной системы адресатном пространстве, а прикладные приложения в другой его части. Для 32-разрядных систем тема с пределом в 2-гигабайта на процесс (3-и при соответствующей настройке) — много LDT именно из-за того, что оставшиеся 2-а (1-н) — общее для всей системы адресатное пространство ядра (GDT).

Насчет Windows 3.x ничего не скажу — не знаю.

PD>Более того. В какой-то момент в 2000-е годы хотели вообще LDT/GDT исключить. Но тут оказалось, что без них нельзя сделать виртуальные машины — каждой нужно свое пространство. В общем, нашлось им в конце концов применение.

На них завязано переключение задач. Я не знаю кто хотел отказаться и т.д. Но ты по ходу что-то с чем-то путаешь.


PD>Источников сколько хочешь.


PD>https://ru.wikipedia.org/wiki/%D0%97%D0%B0%D1%89%D0%B8%D1%89%D1%91%D0%BD%D0%BD%D1%8B%D0%B9_%D1%80%D0%B5%D0%B6%D0%B8%D0%BC

PD>https://ru.wikipedia.org/wiki/Intel_80386
Там нет ни слова об отказе от GDT/LDT, их использования для виртуальных машин или ещё-чем то подобном. Наоборот, описывается как они используются для трансляции адресов.

PS. ИМХО ты не совсем понимаешь всю гибкость защищенного режима. Разнесение адресации на GDT/LDT/PTE позволяет допустим отправлять в своп куски памяти с неиспользуемыми сейчас фрагментами PTE/LDT. Разнесение GDT/LDT позволяет делать общее для всех программ адресатное пространство, без дополнительных действий для его поддержания (для Windows и Linux в нём находится ядро, драйверы, DMA и всё что относится к ядру). Применение раздельных LDT позволяет делать для двух процессов общую область памяти, которая у каждого отображена в свои адреса. И таких фишек — очень много. AMD когда делала x64-86 не просто так сохранила большую часть аспектов этой работы для long mode — им просто сложно найти адекватную замену.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.