SII Механизм сегментации на входе получает эффективный адрес в виде смещения в сегменте. Эффективный скалдывается с базовым, получается линейный (виртуальный). Линейный отображается в физический.
Mika0x65 А также селектор сегмента, без коего выполнить преобразование невозможно. rei3er В плоской модели памяти, принятой в Windows, Linux и др., эффективный адрес, т.е. смещение в сегменте, действительно совпадает с линейным. Логический адрес с линейным не совпадает в любом случае, поскольку первый всегда включает и селектор сегмента, а не только смещение (кстати говоря, не единственного сегмента -- Вам, полагаю, известно, что из-за особенностей механизма сегментации IA-32 необходимо использовать два сегмента минимум -- один для кода, а другой для данных), а второй состоит лишь из одного компонента. Однако модель памяти, не использующая сегментацию, является плоской независимо от того, имеется ли данное совпадение или нет. Модель указанных ОС -- лишь частный случай. Плоской является модель памяти, принятая для COM-файлов MS DOS; плоской будет являться и любая другая модель, где задача никак не манипулирует с сегментными регистрами, даже если смещения не будут совпадать с линейными адресами.
Нет, DOS работает в реальном режиме. Можно, находясь в DOS'е включить защищенный режим, сделать что надо, и переключиться обратно.
Mika0x65 Luzer Причём переключаться туда и обратно аккуратно, чтобы не похерить области памяти DOS и BIOS, не изменить соответствующие настройки оборудования и т.д.
Luzer Можно настройки попортить и дос не будет работать в новоиспеченном реальном режиме до следующего ребута.
Страничная адресация - альтернативный тип управления памятью, полезный для виртуальной памяти многозадачных ОС. В отличие от сегментации, которая разделяет программы и данные на сегменты произвольной длины, страничная адресация делит программы на множество страниц одинакового размера. Страницы не имеют прямой связи с логической структурой программ. В то время, как сегментные селекторы могут рассматриваться как логические "имена" программных модулей и структур данных, страница указывает только часть модуля или структуры данных. Преимуществом страничной организации является возможность хранения в основной памяти только небольшого количества страниц, требуемых для каждой активизируемой задачи. 80386 использует два уровня таблиц, преобразующих исполнительный адрес (с выхода блока сегментации) в физический адрес. В 80386 используются три компонента страничного механизма: страничная директория; таблицы страниц; собственно страница (страничный кадр). процессор может рассматривать память как один или несколько сегментов, причём размер сегмента может достигать 4 гигабайт (4*2*30 байт). С другой стороны, страничная адресация позволяет организовать защиту памяти для каждой страницы. Размер страницы составляет 4 килобайта. Использование страниц значительно облегчает реализацию виртуальной памяти. Единый размер страницы упрощает управление памятью и устраняет явление фрагментации. Страничная директория размером 4 Кбайта позволяет иметь 1024 входа в директорию страниц. Каждый вход страничной директории содержит адрес таблиц следующего уровня, таблицы страниц и информацию о таблице страниц. информация с сайта http://sborki.ru Вот не понятно мне, например, что значит полезный для виртуальной памяти? и вообще, все ли здесь корректно и правильно написано? а то в разных источниках все разное... ужас
no имеецо ввиду исходный код как в ворде разбивает? ничо страница не указывает это равно 240байт... разве 4гб=240байт? лол не всегда читайте маны от интела
согласен, что читать нада официальную документацию, но увы) язык я знаю только один и то неважно... Freeman спасибо за разборку
Luzer Наши горе-переводчики, не знающие ни русского, ни английского, directory постоянно переводят как директорию, хотя вообще-то это каталог (последний термин устоялся ещё в 1970-х годах -- тогда переводили, как правило, лучше, хотя и тогда бывали ляпы). Спроси, например, историка, даже знакомого с компутерами, что такое директория, и он, вероятно, сразу скажет про правительство Франции после свержения монархии, но до воцарения Наполеона. А вот каталог или, на худой конец, папка (folder) куда понятнее незнакомому с компутерным сленгом. Но это так, лирика... А читать в любом случае надо официальные руководства: технический английский в одну сторону (перевод на русский) учится легко и быстро. Что же касается приведённого выше текста, то вникать лень, но кажется, что в общем правильно, но неполно. В частности, как сказал Freeman, размер страницы не обязательно (хотя обычно) составляет 4 Кб. Но суть-то работы страничного механизма поняли, или попытаться объяснить своими словами без излишнего углубления в детали?
не очень понял... Непонятно, страничная адресация используется только вместе с сегментацией, а виртуальная память зачем? и всегда ли она используется в страничной адресации? Если не затруднит, с удовольствием прочту)
читаю сейчас про таблицу дескрипторов. Как я понял, Локальная таблица дескрипторов она создается для каждой программы Операционной системой. Она является сегментом и поэтому имеет свой дескриптор в глобальной таблице дескрипторов. Вот не совсем понятно, почему она является сегментом. Это связано с сегментной адресацией?
теперь про прерывания) только в реальном режиме используется таблица векторов прерываний или в защищенном тоже?
это не сегмент, а таблица дескрипторов описывается специальным системным дескриптором, который как раз и располагается в глобальной таблице дескрипторов он кэшируется в регистре LDTR в защищенном используется таблица дескрипторов прерываний (IDT) базовый линейный адрес хранится в регистре IDTR
Luzer В голове наблюдается некоторая каша Виртуальная память -- это фишка, реализуемая операционной системой, опирающейся на соответствующую аппаратуру; сам процессор организовать её не в состоянии. А вот сегментация и страничная организация -- аппаратные фичи именно процессора, которые может использовать (или не использовать) ось. В IA-32 включить страничный механизм без перехода в защищённый режим невозможно, однако в защищённом он может быть как включен, так и выключен (в последнем случае физические адреса всегда будут равны линейным, получаемым на выходе механизма сегментации). Сегментацию включить или отключить невозможно, однако можно так описать сегменты, что её как бы не будет: для этого во всех сегментах устанавливается базовый адрес 0 и предел 4 Гб. Именно так поступают Windows и Linux; эта модель памяти называется плоской (хотя, как я говорил выше, это не единственный вариант организации плоской модели, просто наиболее простой, понятный, да и во многих случаях разумный). Сегментный механизм для обычных сегментов кода и данных работает достаточно просто. При обращении к информации в сегменте (для чего используется виртуальный адрес -- селектор сегмента в одном из сегментных регистров и смещение, тем или иным способом указываемое в команде) процессор проверяет, разрешён ли доступ к сегменту (в подробности вдаваться не буду), и если проверка успешна, прибавляет смещение к базовому адресу сегмента, хранящемуся в его дескрипторе. Полученная сумма -- это линейный адрес ячейки памяти, к которой пытается обратиться программа. Далее в игру вступает механизм сегментации (описываю опять-таки упрощённо). Он рассматривает линейный адрес как состоящий из нескольких полей (от двух до четырёх). В обычно разбираемом режиме с 32-разрядным физическим адресом и страницами размером 4 Кб таких полей будет три: номер таблицы страниц (биты 31-22), номер страницы (биты 21-12) и смещение на странице (биты 11-0, коих как раз и хватает для адресации байта в странице размером 4 Кб). Процессор берёт базовый адрес каталога страниц в управляющем регистре CR3 (он же PDBR). Каталог содержит 1024 элемента, каждый из которых содержит базовый адрес одной таблицы страниц. Какой именно из элементов используется, процессор определяет по номеру таблицы из линейного адреса (биты 31-22). Таблица страниц также состоит из 1024 элементов, каждый из которых содержит базовый адрес страницы. Какой элемент выбирается, определяется по номеру страницы (биты 21-12 линейного адреса). После этого, получив базовый адрес страницы, процессор добавляет к нему в неизменном виде смещение на странице (биты 11-0 линейного адреса) -- и у нас готовый физический адрес, по которому будет производиться обращение к памяти. Единственное "но": записи и каталога страниц, и таблицы страниц содержат дополнительные биты, которые показывают, загружена ли в память соответствующая таблица страниц или страница. Если загружена и доступна -- всё хорошо, с ней можно работать, если же нет -- происходит прерывание. Этот механизм и лежит в основе организации виртуальной памяти: когда происходит означенное прерывание, ОС загружает с диска нужную страницу, вытесняя на диск какую-нибудь из давно не использованных, и повторяет выполнение команды, вызвавшей прерывание.
Luzer В определённом смысле LDT является сегментом: во-первых, она занимает какую-то область памяти, а во-вторых, описывается дескриптором сегмента. Только описывается она не обычным дескриптором кода или данных, а специальным системным дескриптором (точно так же системными дескрипторами описываются TSS и шлюзы вызова задач, процедур, ловушек и прерываний). Чтобы изменять информацию в самой LDT, система должна обращаться к занимаемой ей области памяти как к обычному сегменту данных, а не как к LDT, а вот чтобы дать возможность задаче использовать определённые в LDT сегменты, она должна описать эту LDT с помощью соответствующего системного дескриптора и правильным образом загрузить регистр LDTR. В общем, ничего сложного в этом нет, но довольно геморройно для изучения, да и для программирования. Это, пожалуй, одна из причин, почему реально возможности сегментации IA-32 используются осями по минимуму, а в 64-разрядном режиме были вообще фактически упразднены. И там, и там, только в реальном режиме она попроще: содержит лишь адреса обработчиков прерываний (их 16-разрядные сегменты и смещения), а в защищённом она представляет собой таблицу дескрипторов прерываний (IDT), адрес и размер которой загружаются предварительно в регистр IDTR, а сама таблица содержит до 256 8-байтовых дескрипторов, каждый из которых является шлюзом задачи, прерывания или ловушки. Опять-таки налицо аппаратная реализация поговорки "хотели как лучше, а получилось как всегда": на бумаге механизм выглядит неплохо, а на практике оказывается слишком громоздким и неудобным, и его возможности используются опять-таки весьма ограниченно.