Здравствуйте, Michael7, Вы писали:
M>Есть небольшая путаница, хотя в документации от Intel — это protected mode (защищенный режим) и у 286-х и у 386-х, в терминологии Microsoft на 80286 — это был "стандартный" режим (работы Windows). Защищенный — уже в 386-м.
Если что, я под защищенным режимом подразумевают работу механизмов трансляции адресов (виртуальную память), переключение задач (сегмент TSS) и кольца защиты (проверку прав доступа к странице памяти) — это всё появилось в 286-м.
Здравствуйте, Евгений Музыченко, Вы писали:
PD>>а слова насчет того, что он гениальный менеджер и что он уловил, что ему в руки попало, я считаю верными.
ЕМ>А если не уловил? Тогда еще ничто не было определено. Вполне могло выглядеть, как "попробуем это, а не получится — займемся чем-нибудь другим". На стыке 80-90-х многие эксперты ни разу не сомневались, что у OS/2 блестящее будущее, и где она?
Все могло быть, но он победил, и, значит, был прав.
Здравствуйте, VladD2, Вы писали:
VD>Винда и была 16битной надстройкой над ДОС. В 3.0 вообще не было никаких дрпов для диска кроме как досовских. Был АПИ, но он преобразовывался в те самые вызовы 21 прерывания. Далее была эволюция. Некоторые подсистемы на 386+ машинах стали использовать 32-тный код. Но Винда 3.11 по прожнему запускалась на 286 машинах где защищенного режима не было вовсе. Так что защищенный режим она использовать не могла.
Был. Защищеннный 16-битный режим, с LDT/GDT... И Windows 3.x в нем и работала, с вкраплениями (начиная с 3.11) 32-битного режима, если запускалась на 80386. А если запускалась на 80286, то без вкраплений.
Здравствуйте, 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 исключить. Но тут оказалось, что без них нельзя сделать виртуальные машины — каждой нужно свое пространство. В общем, нашлось им в конце концов применение.
Здравствуйте, 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 исключить. Но тут оказалось, что без них нельзя сделать виртуальные машины — каждой нужно свое пространство. В общем, нашлось им в конце концов применение.
На них завязано переключение задач. Я не знаю кто хотел отказаться и т.д. Но ты по ходу что-то с чем-то путаешь.
PS. ИМХО ты не совсем понимаешь всю гибкость защищенного режима. Разнесение адресации на GDT/LDT/PTE позволяет допустим отправлять в своп куски памяти с неиспользуемыми сейчас фрагментами PTE/LDT. Разнесение GDT/LDT позволяет делать общее для всех программ адресатное пространство, без дополнительных действий для его поддержания (для Windows и Linux в нём находится ядро, драйверы, DMA и всё что относится к ядру). Применение раздельных LDT позволяет делать для двух процессов общую область памяти, которая у каждого отображена в свои адреса. И таких фишек — очень много. AMD когда делала x64-86 не просто так сохранила большую часть аспектов этой работы для long mode — им просто сложно найти адекватную замену.
Здравствуйте, 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>Просто ты уже забыл
Много лет утекло. Уже трудно вспомнить. Но можно загуглить.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, 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 стандартно) отводится ядру, младшая — пользовательской части
А 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 страничного механизма.
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++.
Режимы доступа к памяти
Семейство Windows 3.x могло функционировать в трёх различных режимах работы с памятью:
Реальный режим, предназначенный для старых компьютеров (8086, 8088, 80186).
Стандартный режим, предназначенный для компьютеров с процессором 80286.
Расширенный режим 386, предназначенный для компьютеров с процессором 80386.
и далее их описание.
>Так что защищённый режим в винде появился только для 386 машин.
Расширенный режим появился там, а не защищеннный
>В i386 появилась виртуализация для DOS–сессий.
А вот это верно. В 286 , чтобы запустить DOS-программу, надо было переключаться, как написано выше. Переключиться было можно, но проблем было выше крыши. DOS-программа плевать хотела на все LDT/GDT и распоряжалась в 1 Мб как ей хотелось. Поэтому при переходе в DOS надо было все оттуда сохранить или постараться там ничего в PM-16 не хранить. Второе в общем случае невозможно, поэтому был компромисс — хранили там как можно меньше (проблема 1 Мбайта)
Здравствуйте, VladD2, Вы писали:
M>>Наверное, все же за Эплом первенство. Планшет Apple Newton появился на рынке еще в 1993-м году, а разработка началась еще в 1987-м. Я даже помню еще советский номер журнала Наука и Жизнь с заметкой о прототипе устройства в разделе БИНТИ.
VD>Эппл придумал только то, что стилус можно заменить пальцем. К тому времени виндофоны уже заняли рынок. А Пальма была родоначальником жанра.
Michael7 имел в виду именно Newton, который имел черно-белый экран, и требовал стилуса. А вы пишете про iPhone.
Здравствуйте, 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 гигабайт физической памяти. Нет тут никаких отказов ни от каких моделей — это совершенно штатные вещи.
Здравствуйте, _ilya_, Вы писали:
__>PC вымрут — место занимают, пыль собирают. Странно что планшеты не прижились, может с ноутбуками якобы в одной нише и чуть доплатить и якобы более мощное устройство можно купить. Но планшеты это иное, видимо недооцененное сейчас — в перспективе замена и ноутбуков и PC. Смартфоны с увеличением экрана или вовсе складными вдвое(появятся и в 4 раза складывающиеся — нужно патент получить, если такого нет, ха ха) экранами движутся в сторону планшетов, может эт и будет в результате телефон с огромным складным экраном, по сути в развернутом состоянии — планшет.
Пока не будут решены проблемы удобного ввода и вывода, то не смогут заменить. Сейчас стал популярен промежуточный вариант. Ноутбук + докстанция + большой монитор (или несколько) + клавиатура. Т.е. сам PC не нужен, есть достаточно мощный ноут, к которому можно подключать периферию для нормальной работы. Ну и другой путь развития — это терминалы доступа к решениям в облаке — это уже активно используется в крупных компаниях.
Здравствуйте, Pavel Dvorkin, Вы писали:
ЕМ>>На стыке 80-90-х многие эксперты ни разу не сомневались, что у OS/2 блестящее будущее, и где она?
PD>Все могло быть, но он победил, и, значит, был прав.
У OS/2 был один небольшой недостаток: ее не умели продавать. С технической точки зрения Чикага отстала от нее навсегда. Но продавцы Microsoft оказались шустрее.
Здравствуйте, m2l, Вы писали:
m2l>Если что, я под защищенным режимом подразумевают работу механизмов трансляции адресов (виртуальную память), переключение задач (сегмент TSS) и кольца защиты (проверку прав доступа к странице памяти) — это всё появилось в 286-м.
Все верно. Только в 286, ЕМНИП, виртуальная память работала сегментами, а не страницами. Страничный доступ появился в 386.
Здравствуйте, Privalov, Вы писали:
m2l>>Если что, я под защищенным режимом подразумевают работу механизмов трансляции адресов (виртуальную память), переключение задач (сегмент TSS) и кольца защиты (проверку прав доступа к странице памяти) — это всё появилось в 286-м.
P>Все верно. Только в 286, ЕМНИП, виртуальная память работала сегментами, а не страницами. Страничный доступ появился в 386.
PD>А вот это верно. Не было таких средств у процессора. Но на IBM PC оказалось, что можно все же. Для этого надо было что-то послать в порт клавиатуры (sic!) , после чего производился сброс процессора и он стартовал заново в RM-16 с сохранением содержимого ОП. Сам эту процедуру пробовал в те времена
Точно, сброс процессора. Деталей уже не помню. Можно братьев Фроловых поднять, у них целая книжка про защищенный режим была. Когда-то пробовал тоже.
ЕМНИП, нужно было послать что-то в порт 0x61. Этот порт, опять-таки ЕМНИП, был многоцелевым, использовался не только клавиатурой.
PD>Реальный режим, предназначенный для старых компьютеров (8086, 8088, 80186). PD>Стандартный режим, предназначенный для компьютеров с процессором 80286. PD>Расширенный режим 386, предназначенный для компьютеров с процессором 80386.
Здравствуйте, VladD2, Вы писали:
VD>Про Windows 95 просто гон. Надажность у нее была вполне себе.
Вполне себе — это OSR/2, ЕМНИП, 1997 год. Оригинальная Чикага была дамой весьма падучей.
VD>Появишася в то время Полуось 2.х это не позволяла и потому со свистом слила 95м, которые стали триумфально шестовать по миру.
К тому времени (1994, ЕМНИП), появилась Полуось 3.0. К сожалению, ее не умели продавать.
VD>Вот только у нее были точно такие же пробелмы как у Полуоси — она была не совместима с большинством программ под ДОС.
Я не знаю, с какой ты Полуосью сталкивался. У нас на ней запускалось все, с чем мы работали. Сеансы DOS, Windows, что угодно. И все работало в 4 М памяти. Правда,с настройками некоторых ДОС-программ приходилось основательно повозиться. Их там были десятки. И, кстати, возможно, Полуось именно поэтому не попала к домохозяйкам.
Удобно было на ней разрабатывать под ДОС. Память где-то расстрелял, сеанс подвис. Прибил его, запустил новый, всего делов.
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Она в ней нуждалась ровно постольку, поскольку не имела отдельного загрузчика, и запуск инициировался из-под DOS. Затем она забирала себе всю свободную память, переключалась в защищенный режим, разворачивала там ядро, грузила туда 32-разрядные VxD (аналоги драйверов ядра в NT), и поверх всего этого создавала стандартную 16-разрядную виндовую среду.
Но из той винды можно было выйти обратно в DOS. Из Win95 выйти уже было нельзя — только выключить/перезагрузить (хотя, если память не изменяет, можно было сделать вариант загрузки Win95 command prompt only, и работать "почти как в MS-DOS", причём эта система была заметно шустрее своей предшественницы)
Здравствуйте, 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-м позволял адресовать гигабайт.
Уф, уволь. Возьми Соломона-Руссиновича и найди там что-то, подтверждающее твои умозаключения о роли LDT.
То. что она используется — несомненно, с этим я не спорю. То, что что-то хранится в GDT, а что-то в LDT — тоже. Но это все (о виртуальных машинах не говорю)
Я не поленился, провел поиск. "LDT" упоминается 6 раз, при этом в одном месте, где описывается KPROCESS. Больше там ничего нет.
А про переключение процессов через CR3 есть
В специальном регистре CR3 процессоров х86 хранится это значение для текущего процесса (один из программных потоков которого
обратился к виртуальному адресу). Это означает, что если при переключении контекста на процессоре окажется, что новый поток принадлежит другому процессу,
в регистр CR3 должен быть загружен адрес PDPT нового процесса из его структуры KPR0CESS.
При выделении памяти процессом создаются новые PTE. Если AWE, то PTE 64-битные, поэтому хватит для адресации 64Г с помощью лишь страничного механизма. Да, процесс может выделить больше чем 2 Гб, но одновременно использовать эту память не сможет — у него адреса 32-битные. Поэтому и существуют
С помощью первой можно зааллокировать много, 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) используется плоская модель памяти.
Одного сегмента! Что возможно только если сегментные регистры реально не влияют на вычисление линейного адреса, иначе будет не один сегмент.
Ну и вот еще
В плоской модели памяти базовые адреса всех сегментов равны нулю,пределы 4Гб-1 а защита ядра от программ осуществляется при помощи таблиц страниц. При такой схеме если программа передаёт ядру указатель на свои данные, например буфер для чтения файла, ядру нет необходимости переводить его в своё адресное пространство прибавлением std_application_base_address как это происходит сейчас.
Когда CPU находится в 32-битных режимах, регистры и инструкции могут в любом случае адресовать всё линейное адресное пространство. Итак, почему бы не установить базовый адрес в ноль и позволить логическим адресам совпадать с линейными адресами? Intel называет это «плоской моделью», и это именно то, что делают современные ядра операционных систем под x86. Это эквивалентно отключению сегментации.
Не думал я , что мне придется вести поиск на эту тему.
Нашел-таки ссылку, с которой поспорить тебе никак не удастся
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.
Здравствуйте, Mr.Delphist, Вы писали:
MD>Но из той винды можно было выйти обратно в DOS. Из Win95 выйти уже было нельзя — только выключить/перезагрузить (хотя, если память не изменяет, можно было сделать вариант загрузки Win95 command prompt only, и работать "почти как в MS-DOS", причём эта система была заметно шустрее своей предшественницы)
Не уверен, что мне память не изменяет, но вроде хотя штатно выйти нельзя было, существовал какой-то хак, чтобы из Win95 в DOS вывалиться. Не в сеанс MS-DOS или загрузку такая, а именно закончить работу.