Сегментная защита памяти: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[непроверенная версия][непроверенная версия]
Содержимое удалено Содержимое добавлено
Нет описания правки
Нет описания правки
Строка 1: Строка 1:
Существует четыре уровня привилегий (PL) [[сегментная аресация памяти|сегментов]] (0–3). Привилегированность увеличивается с уменьшением номера (т. е. нулевой – самый привилегированный). Уровни 0–2 соответствуют супервизору (Supervisor), 3 – пользователю (user). На нулевом уровне позволяется использование привилегированных инструкций.
Существует четыре уровня привилегий (PL) [[сегментная адресация памяти|сегментов]] (0–3). Привилегированность увеличивается с уменьшением номера (т. е. нулевой – самый привилегированный). Уровни 0–2 соответствуют супервизору (Supervisor), 3 – пользователю (user). На нулевом уровне позволяется использование привилегированных инструкций.


Уровень привилегий [[сегментная аресация памяти|сегмента]] (DPL {{lang-en|Descriptor Privilege Level}}) соответствует значению поля DPL в [[дескриптор сегмента|дескрипторе сегмента]].
Уровень привилегий [[сегментная адресация памяти|сегмента]] (DPL {{lang-en|Descriptor Privilege Level}}) соответствует значению поля DPL в [[дескриптор сегмента|дескрипторе сегмента]].


Текущий уровень привилегий (CPL {{lang-en|Current Privilege Level}}) соответствует уровню привилегий [[сегментная аресация памяти|сегмента]] кода, [[сегментная аресация памяти|селектор]] которого загружен в регистр CS (т. е. уровню привилегий выполняющегося [[сегментная аресация памяти|сегмента]] кода).
Текущий уровень привилегий (CPL {{lang-en|Current Privilege Level}}) соответствует уровню привилегий [[сегментная адресация памяти|сегмента]] кода, [[сегментная адресация памяти|селектор]] которого загружен в регистр CS (т. е. уровню привилегий выполняющегося [[сегментная адресация памяти|сегмента]] кода).


Запрашиваемый уровень привилегий (RPL {{lang-en|Requested Privilege Level}}) находится в двух младших [[бит]]ах [[сегментная аресация памяти|селектора]] (задаётся программой).
Запрашиваемый уровень привилегий (RPL {{lang-en|Requested Privilege Level}}) находится в двух младших [[бит]]ах [[сегментная адресация памяти|селектора]] (задаётся программой).


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


Условия защиты следующие:
Условия защиты следующие:
* Нельзя обращаться за пределы [[сегментная аресация памяти|сегмента]], обозначенные лимитом<ref>Существует два вида [[сегментная аресация памяти|сегментов]]: ''растущие вверх'' и ''растущие вниз''. Допустимый диапазон [[сегментная аресация памяти|'''сегментных''' адресов]] для ''растущих вверх'' [[сегментная аресация памяти|сегментов]]: от нуля до лимита включительно. Для ''растущих вниз'': от лимита (включительно) до $FFFFF при G=0 или до $FFFFFFFF при G=1.</ref>;
* Нельзя обращаться за пределы [[сегментная адресация памяти|сегмента]], обозначенные лимитом<ref>Существует два вида [[сегментная адресация памяти|сегментов]]: ''растущие вверх'' и ''растущие вниз''. Допустимый диапазон [[сегментная адресация памяти|'''сегментных''' адресов]] для ''растущих вверх'' [[сегментная адресация памяти|сегментов]]: от нуля до лимита включительно. Для ''растущих вниз'': от лимита (включительно) до $FFFFF при G=0 или до $FFFFFFFF при G=1.</ref>;
* В сегментные регистры ES, CS, SS, DS, FS, GS нельзя загружать [[сегментная аресация памяти|селекторы]], указывающие на системные [[сегментная аресация памяти|сегменты]] (в которых [[бит]] S=0);
* В сегментные регистры ES, CS, SS, DS, FS, GS нельзя загружать [[сегментная адресация памяти|селекторы]], указывающие на системные [[сегментная адресация памяти|сегменты]] (в которых [[бит]] S=0);
* В регистры ES, DS, FS, GS можно загружать [[сегментная аресация памяти|селекторы]] таких [[сегментная аресация памяти|сегментов]], у которых DPL>=Max(CPL, RPL);
* В регистры ES, DS, FS, GS можно загружать [[сегментная адресация памяти|селекторы]] таких [[сегментная адресация памяти|сегментов]], у которых DPL>=Max(CPL, RPL);
* В регистры ES, DS, FS, GS можно загружать ''только'' [[сегментная аресация памяти|селекторы сегментов]] данных или [[сегментная аресация памяти|сегментов]] кода для выполнения/чтения;
* В регистры ES, DS, FS, GS можно загружать ''только'' [[сегментная адресация памяти|селекторы сегментов]] данных или [[сегментная адресация памяти|сегментов]] кода для выполнения/чтения;
* В регистр CS нельзя загружать [[сегментная аресация памяти|селектор сегмента]] данных;
* В регистр CS нельзя загружать [[сегментная адресация памяти|селектор сегмента]] данных;
* В регистр SS можно загружать только [[сегментная аресация памяти|селектор сегмента]] данных для чтения/записи с DPL = CPL;
* В регистр SS можно загружать только [[сегментная адресация памяти|селектор сегмента]] данных для чтения/записи с DPL = CPL;
* В [[сегментная аресация памяти|сегмент]] кода нельзя писать;
* В [[сегментная адресация памяти|сегмент]] кода нельзя писать;
* В [[сегментная аресация памяти|сегмент]] данных только для чтения нельзя писать;
* В [[сегментная адресация памяти|сегмент]] данных только для чтения нельзя писать;
* В системные регистры [[LDTR]], [[TR]] можно загружать только [[сегментная аресация памяти|селекторы сегментов]] LDT и TSS соответственно;
* В системные регистры [[LDTR]], [[TR]] можно загружать только [[сегментная адресация памяти|селекторы сегментов]] LDT и TSS соответственно;
== Примечания ==
== Примечания ==
<references />
<references />

Версия от 17:10, 11 июля 2008

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

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

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

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

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

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

Примечания

  1. Существует два вида сегментов: растущие вверх и растущие вниз. Допустимый диапазон сегментных адресов для растущих вверх сегментов: от нуля до лимита включительно. Для растущих вниз: от лимита (включительно) до $FFFFF при G=0 или до $FFFFFFFF при G=1.