Re[6]: история персональной ВТ
От: m2l  
Дата: 20.01.22 06:46
Оценка:
Здравствуйте, Michael7, Вы писали:

M>Есть небольшая путаница, хотя в документации от Intel — это protected mode (защищенный режим) и у 286-х и у 386-х, в терминологии Microsoft на 80286 — это был "стандартный" режим (работы Windows). Защищенный — уже в 386-м.


Если что, я под защищенным режимом подразумевают работу механизмов трансляции адресов (виртуальную память), переключение задач (сегмент TSS) и кольца защиты (проверку прав доступа к странице памяти) — это всё появилось в 286-м.
Re[6]: история персональной ВТ
От: Pavel Dvorkin Россия  
Дата: 20.01.22 06:47
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

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


ЕМ>А если не уловил? Тогда еще ничто не было определено. Вполне могло выглядеть, как "попробуем это, а не получится — займемся чем-нибудь другим". На стыке 80-90-х многие эксперты ни разу не сомневались, что у OS/2 блестящее будущее, и где она?


Все могло быть, но он победил, и, значит, был прав.
With best regards
Pavel Dvorkin
Re[4]: история персональной ВТ
От: Pavel Dvorkin Россия  
Дата: 20.01.22 06:52
Оценка: +2
Здравствуйте, VladD2, Вы писали:

VD>Винда и была 16битной надстройкой над ДОС. В 3.0 вообще не было никаких дрпов для диска кроме как досовских. Был АПИ, но он преобразовывался в те самые вызовы 21 прерывания. Далее была эволюция. Некоторые подсистемы на 386+ машинах стали использовать 32-тный код. Но Винда 3.11 по прожнему запускалась на 286 машинах где защищенного режима не было вовсе. Так что защищенный режим она использовать не могла.


Был. Защищеннный 16-битный режим, с LDT/GDT... И Windows 3.x в нем и работала, с вкраплениями (начиная с 3.11) 32-битного режима, если запускалась на 80386. А если запускалась на 80286, то без вкраплений.

Просто ты уже забыл
With best regards
Pavel Dvorkin
Re[6]: история персональной ВТ
От: Pavel Dvorkin Россия  
Дата: 20.01.22 07:15
Оценка:
Здравствуйте, m2l, Вы писали:

m2l>Источник?

m2l>Даже в вики про 286 написано про защитный режим. Пусть и давно но я с ним работал, и то что он появился в 80286 и что добавили в 80386 знаю из документации (в живую их тогда уже не было).
m2l>32-битная адресация и защищенный режим — это разные вещи, которые не связаны друг с другом.

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

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

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

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

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

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

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

https://ru.wikipedia.org/wiki/Intel_80386
With best regards
Pavel Dvorkin
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 — им просто сложно найти адекватную замену.
Re[5]: история персональной ВТ
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.01.22 09:13
Оценка: +1
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Был. Защищеннный 16-битный режим, с LDT/GDT... И Windows 3.x в нем и работала, с вкраплениями (начиная с 3.11) 32-битного режима, если запускалась на 80386. А если запускалась на 80286, то без вкраплений.


Нет. Там все было сложнее. Защищённый режим действительно появился в 286м. Но одно дело режим процессора, а другое работа ОС в нем. В 286м Intel-ом была сделана фатальная стратегическая ошибка — нельзя было обратиться к реальному режиму из защищённого и вернутся в реальный режим было нельзя. В результате защищённый режим 286 никто не использовал (кроме не пошедшего в жизнь MS Xenix, который я даже не видел). Так что защищённый режим в винде появился только для 386 машин. В i386 появилась виртуализация для DOS–сессий. И вот она позволила одновременно работать в защищённом режиме и одновременно обеспечить совместимость путем обращения к DOS–вским функциям и функциям BIOS.

PD>Просто ты уже забыл


Много лет утекло. Уже трудно вспомнить. Но можно загуглить.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: история персональной ВТ
От: Pavel Dvorkin Россия  
Дата: 20.01.22 09:30
Оценка:
Здравствуйте, m2l, Вы писали:

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

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

Я с этим и не спорю, это верно. Вот только фактически все элементы LDT/GDT и в Windows, и в Linux настроены так, что база у них 0, а лимит 4 Г. В принципе LDT и GDT могли бы иметь сегменты любого размера <4Гб и с базой от 0 до 4Г. В плоской же модели (flat) используется лишь вариант с 0 и 4 Г соответственно. Это и есть то, что я назвал обнулением. Конечно, LDT/GDT и сегментные регистры (CS, DS...) никуда не делись, но поскольку каждый сегментный регистр показывает на элемент LDT/GDT с нулевой базой, то

CS16:OFF32 -> LDT/GDT -> OFS32

то есть фактически линейный адрес (после преобразования по сегментному механизму) численно равен смещению в сегментированном адресе.



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

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

Это, скажем так, не вполне верно. Кольца остались, конечно, вот только 4 кольца механизма LDT/GDT проецируются на 2 режима механизма User/Supervisor. А именно, 3 кольцо есть User, все остальное — Supervisor. Но поскольку реально кольца 1 и 2 не использовались никогда, это никого не беспокоило тоже никогда, и все считают, что 0 — это Supervisor, 3- это User, а про 1 и 2 никто и не вспоминает.


m2l>* Сама идея одной GDT и многих LDT вполне себе живёт по сей день и в Windows и в Linux. Где ядро и драйверы работают в общем для всей остальной системы адресатном пространстве, а прикладные приложения в другой его части.


Бог с тобой. Тут ты просто не разбираешься. Все в одном АП. Старшая часть (от 0x80000000 стандартно) отводится ядру, младшая — пользовательской части

https://royallib.com/read/russinovich_mark/1vnutrennee_ustroystvo_Windows_gl_1_4.html#0

см. рис 1.4

А LDT вообще одна, я уже объяснил, как она используется.


>Для 32-разрядных систем тема с пределом в 2-гигабайта на процесс (3-и при соответствующей настройке) — много LDT именно из-за того, что оставшиеся 2-а (1-н) — общее для всей системы адресатное пространство ядра (GDT).


Это уже чистая фантазия.

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


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

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


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
m2l>Там нет ни слова об отказе от GDT/LDT, их использования для виртуальных машин или ещё-чем то подобном. Наоборот, описывается как они используются для трансляции адресов.

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


Все верно. Позволяет. Более того, он позволяет адресовать до 2^48 в 32-битном процессоре, разумеется, при отказе от flat-модели. Просто потому что SEG16:OFFS32 — это 48 бит.
Вот только пока речи не идет о виртуальных машинах, все эти возможности не используются. Ни несколько LDT (все дескрипторы в одной LDT и все настроены на flat), ни переключение задач в смысле 80286 (это вообще, кажется, нигде не использовалось, а переключение процессов идет через CR3 страничного механизма.
With best regards
Pavel Dvorkin
Отредактировано 20.01.2022 9:57 Pavel Dvorkin . Предыдущая версия .
Re[6]: история персональной ВТ
От: Pavel Dvorkin Россия  
Дата: 20.01.22 09:47
Оценка:
Здравствуйте, VladD2, Вы писали:


VD>Нет. Там все было сложнее. Защищённый режим действительно появился в 286м. Но одно дело режим процессора, а другое работа ОС в нем. В 286м Intel-ом была сделана фатальная стратегическая ошибка — нельзя было обратиться к реальному режиму из защищённого


Обращаться вообще нельзя, а переключиться можно было — как бы иначе можно было бы в PM-16 оказаться ? Компьютер же всегда стартует в RM-16


>и вернутся в реальный режим было нельзя.


А вот это верно. Не было таких средств у процессора. Но на IBM PC оказалось, что можно все же. Для этого надо было что-то послать в порт клавиатуры (sic!) , после чего производился сброс процессора и он стартовал заново в RM-16 с сохранением содержимого ОП. Сам эту процедуру пробовал в те времена


>В результате защищённый режим 286 никто не использовал (кроме не пошедшего в жизнь MS Xenix, который я даже не видел).


Ну уж нет. Windows 3.1 именно его и использовала, если ее запускали на 286 процессоре. Просто больше ей нечего было использовать. И работала она там в режиме PM-16 и имела доступ ко всем 2 или 4 Мб, которые были на моих машинах. Я сам для нее программы писал под Borland C++.

https://ru.wikipedia.org/wiki/Windows_3.x

Режимы доступа к памяти
Семейство Windows 3.x могло функционировать в трёх различных режимах работы с памятью:

Реальный режим, предназначенный для старых компьютеров (8086, 8088, 80186).
Стандартный режим, предназначенный для компьютеров с процессором 80286.
Расширенный режим 386, предназначенный для компьютеров с процессором 80386.

и далее их описание.

>Так что защищённый режим в винде появился только для 386 машин.


Расширенный режим появился там, а не защищеннный

>В i386 появилась виртуализация для DOS–сессий.


А вот это верно. В 286 , чтобы запустить DOS-программу, надо было переключаться, как написано выше. Переключиться было можно, но проблем было выше крыши. DOS-программа плевать хотела на все LDT/GDT и распоряжалась в 1 Мб как ей хотелось. Поэтому при переходе в DOS надо было все оттуда сохранить или постараться там ничего в PM-16 не хранить. Второе в общем случае невозможно, поэтому был компромисс — хранили там как можно меньше (проблема 1 Мбайта)
With best regards
Pavel Dvorkin
Re[4]: история персональной ВТ
От: B-52 Россия  
Дата: 20.01.22 09:57
Оценка: +2
Здравствуйте, VladD2, Вы писали:

M>>Наверное, все же за Эплом первенство. Планшет Apple Newton появился на рынке еще в 1993-м году, а разработка началась еще в 1987-м. Я даже помню еще советский номер журнала Наука и Жизнь с заметкой о прототипе устройства в разделе БИНТИ.


VD>Эппл придумал только то, что стилус можно заменить пальцем. К тому времени виндофоны уже заняли рынок. А Пальма была родоначальником жанра.


Michael7 имел в виду именно Newton, который имел черно-белый экран, и требовал стилуса. А вы пишете про iPhone.
Re[9]: история персональной ВТ
От: m2l  
Дата: 20.01.22 10:19
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

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


PD>Я с этим и не спорю, это верно. Вот только фактически все элементы LDT/GDT и в Windows, и в Linux настроены так, что база у низ 0, а лимит 4 Г. В принципе LDT и GDT могли бы иметь сегменты любого размера <4Гб и с базой от 0 до 4Г. В плоской же модели (flat) используется лишь вариант с 0 и 4 Г соответственно. Это и есть то, что я назвал обнулением. Конечно, LDT/GDT и сегментные регистры (Cs, DS...) никуда не делись, но поскольку каждый сегментный регистр показывает на элемент LDT/GDT с нулевой базой, то


Можно, я не буду запускать отладчик и делать дамп gdt/ldt, а просто спрошу — откуда ты это взял?

PD>CS16:OFF32 -> LDT/GDT -> OFS32

PD>то есть фактически линейный адрес (после преобразования по сегментному механизму) численно равен смещению с сегментированном адресе.
Ага. Как это мешает управлению адресным пространством через ldt? Что бы не быть голословным: https://github.com/torvalds/linux/blob/master/arch/x86/kernel/ldt.c
GDT — указывает на PTE общие для всех процессов, LDT — указывает на таблицы PTE адресующие виртуальное адресатное пространство самого процесса.

m2l>>* Бит в PTE определяет кому страница принадлежит — программе или операционной системе, это немного другой механизм. Разделения на 4-ре кольца (в современных, учитывая SMM можно считать что и больше) так и осталось.

m2l>>* Байка о двух режимах идет от Windows NT, которая изначально разрабатывалась ещё под процессоры DEC и Alpha — а в одном из них защищенный режим (его не Intel придумал, а сделал аналог уже существовавших решений) был ограничен как-раз двумя уровнями. Отсюда и взялась эта унификация, когда всю систему уложили в 0 и 3 кольца. И то, спроектировано ядро так, что те-же драйверы устройств, изначально можно было вынести в ring 1 или ring 2. Эти элементы микроядра небыли использованы по большей мере из-за падения производительности.

PD>Это, скажем так, не вполне верно. Кольца остались, конечно, вот только 4 кольца механизма LDT/GDT проецируются на 2 режима механизма User/Supervisor. А именно, 3 кольцо есть User, все остальное — Supervisor. Но поскольку реально кольца 1 и 2 не использовались никогда, это никого не беспокоило тоже никогда, и все считают, что 0 — это Supervisor, 3- это User, а про 1 и 2 никто и не вспоминает.


Ты путаешь два совершенно разных механизма. Двухбитный DPL дошел до наших с четырьмя уровнями защиты. И он задаётся дескрипторами GDT/LDT. Тот бит в PTE о котором устанавливает флаг, доступности страницы только для супервизора DPL=0. И он дополняет механику четырех колец защиты тем что запрещает "обратное чтение". Т.е. без этого бита процесс с DPL=2 может прочесть/записать память с DPL=2 или DPL=3, но не может с DPL=1 или DPL=0. А с ним можно создавать страницы с DPL=3 и в адресатном пространстве процесса, которые доступны только из ring-0 — для хранения паролей, или криптографических ключей и т.д. По сути это самый первый прообраз защищенных анклавов. И то, что ты проецируешь его на механику DPL — это ошибка.


m2l>>* Сама идея одной GDT и многих LDT вполне себе живёт по сей день и в Windows и в Linux. Где ядро и драйверы работают в общем для всей остальной системы адресатном пространстве, а прикладные приложения в другой его части.


PD>Бог с тобой. Тут ты просто не разбираешься. Все в одном АП. Старшая часть (от 0x80000000 стандартно) отводится ядру, младшая — пользовательской части

PD>https://royallib.com/read/russinovich_mark/1vnutrennee_ustroystvo_Windows_gl_1_4.html#0
PD>см. рис 1.4

Я про это и говорю. Системная часть — адресуется через GDT, пользовательское адресатное пространство через LDT.

PD>А LDT вообще одна, я уже объяснил, как она используется.

Ага, особенно на многоядерных машинах LDT одна. Адресующая одни и те же таблицы PTE для всех адресатных пространств одновременно работающих процессов разом по твоему?
LDT не используется для управления многозадачностью через процессор в том смысле, что на каждый процесс не создается по дескриптору LDT в GDT — это дорого. Но при этом планировщик, при переключении процессов перезаписывает поля LDT, сохраняя старые значения как часть служебной информации о процессе и восстанавливая при обратном переключении. Выше я тебе дал ссылку на исходный код Linux занимающийся этим.

>>Для 32-разрядных систем тема с пределом в 2-гигабайта на процесс (3-и при соответствующей настройке) — много LDT именно из-за того, что оставшиеся 2-а (1-н) — общее для всей системы адресатное пространство ядра (GDT).

PD>Это уже чистая фантазия.
Исходный код выше. Любой отладчик ядра для Windows, благо в наше время с этим всё просто.

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


PD>Все верно. Позволяет. Более того, он позволяет адресовать до 2^48 в 32-битном процессоре, разумеется, при отказе от flat-модели. Просто потому что SEG16:OFFS32 — это 48 бит.

PD>Вот только пока речи не идет о виртуальных машинах, все эти возможности не используются. Ни несколько LDT (все дескрипторы в одной LDT и все настроены на flat), ни переключение задач в смысле 80286 (это вообще, кажется, нигде не использовалось, а переключение проессов идет через CR3 страничного механизма.

Слушай, ведь лютейший же бред пишешь....

Ты же сам блин ссылаешься, у тебя под рисунком про AWE написано !?! Обычный прикладной интерфейс, к примеру SQL Server умеет им пользоваться. — Ну твоя же ссылка, вот прямо твой рисунок, ну прочитай один абзац текста.
Та же 48-битная адресация — берешь 32-битную Windows и запускаешь в ней отдельные процессы жрущие память. Каждый по отдельности — не более 2 Гб (3 при настройке параметров загрузки). А все вмести — начнут свопится только когда физическая память закончится. Windows с помощью этой адресации 2 ГБ памяти каждого процесса раскидает и на 4 и на 24 и на 48 гигабайт физической памяти. Нет тут никаких отказов ни от каких моделей — это совершенно штатные вещи.
Re[2]: история персональной ВТ
От: MaximVK Россия  
Дата: 20.01.22 10:22
Оценка:
Здравствуйте, _ilya_, Вы писали:

__>PC вымрут — место занимают, пыль собирают. Странно что планшеты не прижились, может с ноутбуками якобы в одной нише и чуть доплатить и якобы более мощное устройство можно купить. Но планшеты это иное, видимо недооцененное сейчас — в перспективе замена и ноутбуков и PC. Смартфоны с увеличением экрана или вовсе складными вдвое(появятся и в 4 раза складывающиеся — нужно патент получить, если такого нет, ха ха) экранами движутся в сторону планшетов, может эт и будет в результате телефон с огромным складным экраном, по сути в развернутом состоянии — планшет.


Пока не будут решены проблемы удобного ввода и вывода, то не смогут заменить. Сейчас стал популярен промежуточный вариант. Ноутбук + докстанция + большой монитор (или несколько) + клавиатура. Т.е. сам PC не нужен, есть достаточно мощный ноут, к которому можно подключать периферию для нормальной работы. Ну и другой путь развития — это терминалы доступа к решениям в облаке — это уже активно используется в крупных компаниях.
Re[7]: история персональной ВТ
От: Privalov  
Дата: 20.01.22 10:44
Оценка: +1
Здравствуйте, Pavel Dvorkin, Вы писали:

ЕМ>>На стыке 80-90-х многие эксперты ни разу не сомневались, что у OS/2 блестящее будущее, и где она?


PD>Все могло быть, но он победил, и, значит, был прав.


У OS/2 был один небольшой недостаток: ее не умели продавать. С технической точки зрения Чикага отстала от нее навсегда. Но продавцы Microsoft оказались шустрее.

Персоналки — вообще не рынок IBM.
Re[7]: история персональной ВТ
От: Privalov  
Дата: 20.01.22 10:46
Оценка:
Здравствуйте, m2l, Вы писали:

m2l>Если что, я под защищенным режимом подразумевают работу механизмов трансляции адресов (виртуальную память), переключение задач (сегмент TSS) и кольца защиты (проверку прав доступа к странице памяти) — это всё появилось в 286-м.


Все верно. Только в 286, ЕМНИП, виртуальная память работала сегментами, а не страницами. Страничный доступ появился в 386.
Re[8]: история персональной ВТ
От: m2l  
Дата: 20.01.22 10:53
Оценка:
Здравствуйте, Privalov, Вы писали:

m2l>>Если что, я под защищенным режимом подразумевают работу механизмов трансляции адресов (виртуальную память), переключение задач (сегмент TSS) и кольца защиты (проверку прав доступа к странице памяти) — это всё появилось в 286-м.


P>Все верно. Только в 286, ЕМНИП, виртуальная память работала сегментами, а не страницами. Страничный доступ появился в 386.


Да, тут промахнулся.
Re[7]: история персональной ВТ
От: Privalov  
Дата: 20.01.22 11:01
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:


PD>А вот это верно. Не было таких средств у процессора. Но на IBM PC оказалось, что можно все же. Для этого надо было что-то послать в порт клавиатуры (sic!) , после чего производился сброс процессора и он стартовал заново в RM-16 с сохранением содержимого ОП. Сам эту процедуру пробовал в те времена


Точно, сброс процессора. Деталей уже не помню. Можно братьев Фроловых поднять, у них целая книжка про защищенный режим была. Когда-то пробовал тоже.
ЕМНИП, нужно было послать что-то в порт 0x61. Этот порт, опять-таки ЕМНИП, был многоцелевым, использовался не только клавиатурой.

PD>Реальный режим, предназначенный для старых компьютеров (8086, 8088, 80186).

PD>Стандартный режим, предназначенный для компьютеров с процессором 80286.
PD>Расширенный режим 386, предназначенный для компьютеров с процессором 80386.

Это для 3.0. В 3.1 реальный режим убрали.
Re[2]: история персональной ВТ
От: Privalov  
Дата: 20.01.22 11:16
Оценка: +1
Здравствуйте, VladD2, Вы писали:

VD>Про Windows 95 просто гон. Надажность у нее была вполне себе.


Вполне себе — это OSR/2, ЕМНИП, 1997 год. Оригинальная Чикага была дамой весьма падучей.

VD>Появишася в то время Полуось 2.х это не позволяла и потому со свистом слила 95м, которые стали триумфально шестовать по миру.


К тому времени (1994, ЕМНИП), появилась Полуось 3.0. К сожалению, ее не умели продавать.

VD>Вот только у нее были точно такие же пробелмы как у Полуоси — она была не совместима с большинством программ под ДОС.


Я не знаю, с какой ты Полуосью сталкивался. У нас на ней запускалось все, с чем мы работали. Сеансы DOS, Windows, что угодно. И все работало в 4 М памяти. Правда,с настройками некоторых ДОС-программ приходилось основательно повозиться. Их там были десятки. И, кстати, возможно, Полуось именно поэтому не попала к домохозяйкам.
Удобно было на ней разрабатывать под ДОС. Память где-то расстрелял, сеанс подвис. Прибил его, запустил новый, всего делов.
Re[4]: история персональной ВТ
От: Mr.Delphist  
Дата: 20.01.22 11:31
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Она в ней нуждалась ровно постольку, поскольку не имела отдельного загрузчика, и запуск инициировался из-под DOS. Затем она забирала себе всю свободную память, переключалась в защищенный режим, разворачивала там ядро, грузила туда 32-разрядные VxD (аналоги драйверов ядра в NT), и поверх всего этого создавала стандартную 16-разрядную виндовую среду.


Но из той винды можно было выйти обратно в DOS. Из Win95 выйти уже было нельзя — только выключить/перезагрузить (хотя, если память не изменяет, можно было сделать вариант загрузки Win95 command prompt only, и работать "почти как в MS-DOS", причём эта система была заметно шустрее своей предшественницы)
Re[4]: история персональной ВТ
От: elmal  
Дата: 20.01.22 11:38
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Винда и была 16битной надстройкой над ДОС. В 3.0 вообще не было никаких дрпов для диска кроме как досовских. Был АПИ, но он преобразовывался в те самые вызовы 21 прерывания. Далее была эволюция. Некоторые подсистемы на 386+ машинах стали использовать 32-тный код. Но Винда 3.11 по прожнему запускалась на 286 машинах где защищенного режима не было вовсе. Так что защищенный режим она использовать не могла.

3.11 или 3.1? 3.1 я на 286-м компе застал, 3.11 я видел только на 386-м. Кроме того, в 286-м был свой защищенный режим. Он не совсем такой, как появился в 386-м, в 386-м его неплохо так переколбасили, но уже в 286-м позволял адресовать гигабайт.
Re[10]: история персональной ВТ
От: Pavel Dvorkin Россия  
Дата: 20.01.22 11:50
Оценка: 7 (1)
Здравствуйте, m2l, Вы писали:

Уф, уволь. Возьми Соломона-Руссиновича и найди там что-то, подтверждающее твои умозаключения о роли LDT.
То. что она используется — несомненно, с этим я не спорю. То, что что-то хранится в GDT, а что-то в LDT — тоже. Но это все (о виртуальных машинах не говорю)

Я не поленился, провел поиск. "LDT" упоминается 6 раз, при этом в одном месте, где описывается KPROCESS. Больше там ничего нет.

А про переключение процессов через CR3 есть

В специальном регистре CR3 процессоров х86 хранит­ся это значение для текущего процесса (один из программных потоков которого
обратился к виртуальному адресу). Это означает, что если при переключении кон­текста на процессоре окажется, что новый поток принадлежит другому процессу,
в регистр CR3 должен быть загружен адрес PDPT нового процесса из его структуры KPR0CESS.


При выделении памяти процессом создаются новые PTE. Если AWE, то PTE 64-битные, поэтому хватит для адресации 64Г с помощью лишь страничного механизма. Да, процесс может выделить больше чем 2 Гб, но одновременно использовать эту память не сможет — у него адреса 32-битные. Поэтому и существуют

https://docs.microsoft.com/en-us/windows/win32/api/memoryapi/nf-memoryapi-allocateuserphysicalpages#:~:text=The%20AllocateUserPhysicalPages%20function%20is%20used,function%20will%20fail%20with%20ERROR_PRIVILEGE_NOT_HELD.

но и

https://docs.microsoft.com/en-us/windows/win32/api/memoryapi/nf-memoryapi-mapuserphysicalpages

С помощью первой можно зааллокировать много, PTE позволят. Вот только адрес она не вернет, а вернет

[out] PageArray

A pointer to an array to store the page frame numbers of the allocated memory.

То есть, видимо, элементы PTE

А адрес можно получить только с помощью второй (конечно, после вызова первой и предварительного вызова VirtualAlloc. И будет он 32-битным.


Про flat model и сегментные регистры

Плоская модель памяти предполагает, что задача состоит из одного сегмента, который, в свою очередь, разбит на страницы.
...
В абсолютном большинстве современных 32(64)-разрядных операционных систем (для микропроцессоров Intel) используется плоская модель памяти.


https://prog-cpp.ru/asm-memory/

Одного сегмента! Что возможно только если сегментные регистры реально не влияют на вычисление линейного адреса, иначе будет не один сегмент.

Ну и вот еще

В плоской модели памяти базовые адреса всех сегментов равны нулю,пределы 4Гб-1 а защита ядра от программ осуществляется при помощи таблиц страниц. При такой схеме если программа передаёт ядру указатель на свои данные, например буфер для чтения файла, ядру нет необходимости переводить его в своё адресное пространство прибавлением std_application_base_address как это происходит сейчас.


http://board.kolibrios.org/viewtopic.php?t=636

Ну и напоследок

Когда CPU находится в 32-битных режимах, регистры и инструкции могут в любом случае адресовать всё линейное адресное пространство. Итак, почему бы не установить базовый адрес в ноль и позволить логическим адресам совпадать с линейными адресами? Intel называет это «плоской моделью», и это именно то, что делают современные ядра операционных систем под x86. Это эквивалентно отключению сегментации.



https://acm.bsu.by/wiki/Unix2019b/%D0%9E%D1%80%D0%B3%D0%B0%D0%BD%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BF%D0%B0%D0%BC%D1%8F%D1%82%D0%B8_%D0%BD%D0%B0_x86-64

Не думал я , что мне придется вести поиск на эту тему.

Нашел-таки ссылку, с которой поспорить тебе никак не удастся

Basic Flat Model
The simplest memory model for a system is the basic “flat model,” in which the operating system and application programs have access to a continuous, unsegmented
address space. To the greatest extent possible, this basic flat model hides the
segmentation mechanism of the architecture from both the system designer and the
application programmer.
To implement a basic flat memory model with the IA-32 architecture, at least two
segment descriptors must be created, one for referencing a code segment and one
for referencing a data segment (see Figure 3-2). Both of these segments, however,
are mapped to the entire linear address space: that is, both segment descriptors
have the same base address value of 0 and the same segment limit of 4 GBytes.


https://www.intel.com/content/dam/support/us/en/documents/processors/pentium4/sb/25366821.pdf

Уф...
В общем, я эту дискуссию намерен закончить.
With best regards
Pavel Dvorkin
Отредактировано 20.01.2022 12:28 Pavel Dvorkin . Предыдущая версия . Еще …
Отредактировано 20.01.2022 11:55 Pavel Dvorkin . Предыдущая версия .
Отредактировано 20.01.2022 11:53 Pavel Dvorkin . Предыдущая версия .
Re[5]: история персональной ВТ
От: Michael7 Россия  
Дата: 20.01.22 12:57
Оценка:
Здравствуйте, Mr.Delphist, Вы писали:

MD>Но из той винды можно было выйти обратно в DOS. Из Win95 выйти уже было нельзя — только выключить/перезагрузить (хотя, если память не изменяет, можно было сделать вариант загрузки Win95 command prompt only, и работать "почти как в MS-DOS", причём эта система была заметно шустрее своей предшественницы)


Не уверен, что мне память не изменяет, но вроде хотя штатно выйти нельзя было, существовал какой-то хак, чтобы из Win95 в DOS вывалиться. Не в сеанс MS-DOS или загрузку такая, а именно закончить работу.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.