Всем доброго времени суток! ) Сколько я бродил по строчкам и страницам разных источников, но до сих пор не понял полную картину способностей нашего любимого Ix386 ))хотя принципы прекрасно понимаю. Меня тревожит туман вокруг моих знаний о том когда именно и в какие этапы и вкаких ОС работают режимы. 1. Например, современный Pentium работают ВСЕГДА в защищенном режиме (независимо от ОС и состояния машины) как родном или все таки по нужде разных обстоятельств он переключается? 2. Виндоус работает в обычном защищенном или страничном? 3. Какая выгода от страничной адресации, когда все равно в дескрипторах обычного ПМ базовый адрес 32-х битовый (2^32= теже 4 с хвостиком млрд). В чем прикол? не понятно. и еще - линейный односегментный режим это тоже самое что и ПМ или как? есть еще режимы, но здесь я имею ввиду основные РМ, ПМ и ПМ со страницами если где некоректно выразился - простите. p. s. те кто полностью удовлетворит меня ответами - будет моим кумиром до конца дней моих Сразу огромное спасибо!
Antoniosis Быть кумиром меня не прельщает, но ответить на вопросы могу попробовать. И кумира могу посоветовать, если он Вам очень нужен. 1. Для начала Pentium уже давно не современный. Все x86-совместимые процессоры стартуют в реальном режиме, после чего современная ОС переводит его в защищённый. И так он и остаётся до выключения работать в защищённом режиме, хотя для запуска 16-битных программ система может его "переключать" в режим виртуального 8086, который по сути и не является режимом, а только надстройкой защищённого режима, необходимой чтобы можно было стартовать устаревшие 16-битные программы в условиях, когда вся система работает в защищённом режиме. 2. Windows стартует в реальном режиме (а выбор есть что ли? ... хотя тоже спорное утверждение, т.к. есть биосы, которые могут после себя оставить т.н. "the big real mode" или по-нашенскому "нереальный" режим), а потом почти сразу переводит процессор в защищённый (и далее в 64-битный режим, если это 64-битная ОС). Разумеется, страничная адресация (она же пэйджинг), используется, как в любой другой современной ОС под x86. 3. Выгода в том, что можно как угодно разбрасывать куски различных задач по физической памяти, но для самих программ их виртуальное адресное пространство будет оставаться линейным (подряд идущим). Кроме того, это позволяет реализовать виртуальную память: когда реально существующая RAM дополняется виртуальной за счёт использования файла подкачки, лежащего на винте. Т.о. за счёт памяти винчестера общая виртуальная память всех процессов может намного превышать объём реально присутствующей физической оперативной памяти. Впервые вижу такое понятие в отношении x86. Судя по названию, видимо, это реальный режим. Нет такого режима "ПМ со страницами". Это всё тот же защищённый режим. А страничная адресация — одна из его фич. Практически любой Вам предложит обращаться к Intel Manuals по почти любому вопросу об x86. Большинство могли бы посоветовать для начала глянуть сюда. В частности здесь описаны режимы.
... обычный защищенный это наверное имеется ввиду сегментация памяти, виндовс использует и ее (т. к. нельзя отключить) и страничную организацию одновременно трансляция линейного адреса в физический совсем в этих режимах разная: - при сегментации линейный адрес соответствует какому-то адресу в физ памяти в зависимости от описываемого сегментным селектором региона - при страничной организации памяти линейный адрес преобразовывается в физический в соотствествии с текущим каталогом страниц, к тому же страница не обязательно должна находится в физической памяти, может быть просто подгружена с диска при доступе к ней (например из страничного файла) подробнее тут 3.1 MEMORY MANAGEMENT OVERVIEW - сегментация CHAPTER 4 PAGING - страничная организация
Про режимы можно посмотреть на http://ru.osdev.wikia.com/wiki/Архи....B5.D1.81.D1.81.D0.BE.D1.80.D0.BE.D0.B2_IA-32.
Вот он, ключевой момент. Т.е. предположим для прикладных прог 3-го кольца он создает и дескрипторные таблицы и каталоги страниц одновременно? я имел ввиду "model flat" она ж линейная и один большой сегмент.
Antoniosis Нельзя сказать, что Windows "использует" сегментацию. Скорее пытается жить с ней, т.к. в защищённом режиме она не отключается (но зато в 64-битном вообще отсутствует). Соответственно для всех пользовательских приложений создаётся ровно три одних и тех же дескриптора: для кода (селектор 1B), для данных (селектор 23) и один вспомогательный (селектор 3B), указывающий на TEB. Причём первые два имеют одну и ту же нулевую базу и размер в 4 ГБ (что как раз и говорит о том, что Windows пытается имитировать отсутствие механизма сегментации, раз уж его нельзя отключить). Хотя имеется официально недокументированная возможность создавать собственные дескрипторы в LDT. Страничная адресация же реально используется. Каталоги страниц тут уже для каждого пользовательского приложения свои.
Antoniosis Таблицы страниц существуют, вообще говоря, и для любых прикладных программ (каждому процессу -- свой набор таблиц), и для самой системы. Сегментацию это не отключает: её отключить попросту физически невозможно. Просто в модели flat ("плоской") сделано так, что все сегменты описывают одну и ту же область линейных адресов максимально возможного размера (4 Гбайта), а посему программист может считать, что их вовсе не существует.