Сегментная защита памяти

Сегментная защита памяти

Сегментная защита памяти — один из вариантов реализации защиты памяти в процессорах архитектуры x86. Может применяться в защищенном режиме процессоров начиная с Intel 80386 и совместимых.

При использовании плоской модели памяти (англ. flat model, применяется многими современными ОС), каждый сегмент описывает весь объем виртуальной памяти. В такой модели защита памяти реализуется дополнительно страничной памятью.[1]


Содержание

Определения

Существует четыре уровня привилегий (PL) сегментов (0-3). Привилегированность увеличивается с уменьшением номера (то есть нулевой — самый привилегированный). Уровни 0-2 соответствуют супервизору (Supervisor), 3 — пользователю (user). На нулевом уровне позволяется использование привилегированных инструкций.

Уровень привилегий сегмента (DPL англ. Descriptor Privilege Level) соответствует значению поля DPL в дескрипторе сегмента.

Текущий уровень привилегий (CPL англ. Current Privilege Level) соответствует уровню привилегий сегмента кода, селектор которого загружен в регистр CS (то есть уровню привилегий выполняющегося сегмента кода).

Запрашиваемый уровень привилегий (RPL англ. Requested Privilege Level) находится в двух младших битах селектора (задаётся программой).

Условия и принцип защиты

При загрузке селектора в сегментный регистр и при обращении к памяти проверяются условия сегментной защиты, и при несоблюдении вызывается обработчик исключения #GP.

Условия защиты следующие:

  • Нельзя обращаться за пределы сегмента, обозначенные лимитом[2];
  • В сегментные регистры ES, CS, SS, DS, FS, GS нельзя загружать селекторы, указывающие на системные сегменты (в которых бит S=0);
  • В регистры ES, DS, FS, GS можно загружать селекторы таких сегментов, у которых DPL>=Max(CPL, RPL);
  • В регистры ES, DS, FS, GS можно загружать только селекторы сегментов данных или сегментов кода для выполнения/чтения;
  • В регистр CS нельзя загружать селектор сегмента данных;
  • В регистр CS можно загружать селектор сегмента кода только при CPL=DPL;
  • В регистр SS можно загружать только селектор сегмента данных для чтения/записи с DPL = CPL;
  • В сегмент кода нельзя писать;
  • В сегмент данных только для чтения нельзя писать;
  • В системные регистры LDTR, TR можно загружать только селекторы сегментов LDT и TSS соответственно;

Взаимодействие уровней привилегий

Взаимодействие четырёх уровней между собой осуществляется посредством шлюзов. Дескриптор шлюза так же, как и дескриптор сегмента имеет поле PL. Обращение к шлюзу подчинено вышеописанным правилам, но существуют дополнительные правила, накладывающие естественные ограничения на сегмент кода/TSS, указанный в шлюзе:

  • DPL вызываемого сегмента не должен быть численно больше CPL;
  • DPL шлюза не должен быть численно меньше DPL указанного в нём сегмента;
  • В шлюзе должен быть указан только сегмент кода или TSS (если это шлюз задачи);

Если посредством шлюза происходит обращение к неподчинённому сегменту с таким же уровнем привилегий, или к подчинённому сегменту кода с таким же или численно меньшим уровнем привилегий, то происходит простой переход:

Push Flags ; Только для шлюзов прерывания и ловушки
Push CS
Push IP
Jmp FAR Gate_Address

Переключение стека

Если же происходит переход к неподчинённому сегменту кода с численно меньшим уровнем привилегий, то происходит переключение стека во избежание его переполнения на верхних (численно меньших) уровнях. Напр. если происходит ошибка стека на нулевом уровне, то процессор останавливается.

Сегмент TSS содержит три дальних адреса стека — для уровней привилегий 0 — 2.

При переходе с больших на меньшие уровни через шлюзы происходит смена привилегий, и, соответственно, переключение стеков.[3]

Алгоритм переключения выглядит несколько сложнее:

  • Из соответствующих полей TSS загружаются новые значения SS, (E)SP;
  • В новый стек сохраняются предыдущие значения SS, (E)SP (до вызова);
  • Если шлюз является шлюзом вызова, то в новый стек копируются WC слов/двойных слов из стека вызывающей программы;
  • Если это шлюз прерывания или ловушки, то сохраняется значение (E)Flags;
  • Сохраняется текущее значение CS, (E)IP;
  • Из дескриптора шлюза в регистры CS:(E)IP загружается новый дальний адрес, указанный в соответствующих полях дескриптора;

При выполнении команды RetF/IRet:

  • Процессор извлекает из стека дальний адрес возврата (и регистр флагов);
  • Если у команды RetF есть параметр, то увеличивает значение (E)SP на его значение (удаляет из стека переданные процедуре параметры);
  • Анализирует RPL селектора CS[4]: если он численно больше CPL, то извлекает из стека дальний адрес прежней вершины стека и загружает его в SS:(E)SP. Таким образом происходит возврат к старому стеку;

Примечания

  1. The Unabridged Pentium 4 IA32 Processor Genealogy, Addison Wesley, 2004 ISBN: 0-321-24656-X Chapter 13. The Flat Model "It should be noted that virtually all modern OSs utilize the Flat Model.", "There is no way to disable the IA32 processor's segmentation logic. However, if all segments are described (in the GDT) as read/writable, starting at location 00000000h and as 4GB in length, segmentation is effectively eliminated." "If segmentation is eliminated and Paging is used, the Paging Unit can provide complete protection, ... the following checks on each memory access attempt"
  2. Существует два вида сегментов: растущие вверх и растущие вниз. Допустимый диапазон сегментных адресов для растущих вверх сегментов: от нуля до лимита включительно. Для растущих вниз: от лимита (включительно) до $FFFFF при G=0 или до $FFFFFFFF при G=1.
  3. Всякий раз, когда происходит переход с большего на меньший уровень, стек меньшего уровня инициализируется заново.
  4. RPL, загруженный в CS всегда равен CPL

См. также

Ссылки


Wikimedia Foundation. 2010.

Игры ⚽ Нужен реферат?

Полезное


Смотреть что такое "Сегментная защита памяти" в других словарях:

  • Сегментная адресация памяти — Эта статья или раздел описывает ситуацию применительно лишь к частным случаям. Необходимо переработать изложение или добавить информацию, чтобы статья описывала более общий случай …   Википедия

  • Защита памяти — (англ. Memory protection)  это способ управления правами доступа к отдельным регионам памяти. Используется большинством многозадачных операционных систем. Основной целью защиты памяти является запрет доступа процессу к той памяти,… …   Википедия

  • Менеджер виртуальной памяти — (далее просто «менеджер памяти»)  часть операционной системы, благодаря которой можно адресовать память большую, чем объем физической памяти (ОЗУ). Благодаря виртуальной памяти можно запускать множество ресурсоёмких приложений, требующих… …   Википедия

  • Защищённый режим — (режим защищённой виртуальной адресации)  режим работы x86 совместимых процессоров. Частично был реализован уже в процессоре 80286, но там существенно отличался способ работы с памятью, так как процессоры еще были 16 битными и не была… …   Википедия

  • Дескриптор шлюза — Дескриптор шлюза  служебная структура данных, служащая для различных переходов. Используется только в защищённом режиме. В реальном режиме некоторым аналогом может служить дальний адрес. Длина дескриптора стандартна и равна восьми байтам.… …   Википедия

  • Дескриптор сегмента — (в архитектуре x86)  служебная структура в памяти, которая определяет сегмент. Длина дескриптора равна 8 байт . Структура сегментного дескриптора База (жёлтые поля, 32 бита)  начало сегмента в линейной памяти Лимит (красные поля, 20… …   Википедия

  • x86 — 80486 DX2 x86 (англ. Intel 80x86)  архитектура процессора c одноимённым наборо …   Википедия

  • Страничная память — В этой статье не хватает ссылок на источники информации. Информация должна быть проверяема, иначе она может быть поставлена под сомнение и удалена. Вы можете …   Википедия

  • X86 — 80486 DX2 x86 (Intel 80x86)  аппаратная платформа: архитектура микропроцессора и соответствующий набор инструкций, как разработанных и выпускаемых компанией Intel, так и совместимых с ними процессоров других производителей (AMD, VIA …   Википедия

  • Виртуальная память — (англ. Virtual memory)  технология управления памятью ЭВМ, разработанная для многозадачных операционных систем. При использовании данной технологии для каждой программы используются независимые схемы адресации памяти, отображающиеся тем …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»