Защищенный режим

редактировать

В вычислениях защищенный режим, также называемый режимом защищенного виртуального адреса, является режим работы x86 -совместимых центральных процессоров (CPU). Это позволяет системному программному обеспечению использовать такие функции, как виртуальная память, разбиение на страницы и безопасная многозадачность, предназначенные для увеличения контроля операционной системы над прикладное программное обеспечение.

Когда процессор, поддерживающий защищенный режим x86, включен, он начинает выполнять инструкции в реальном режиме, чтобы поддерживать обратную совместимость с более ранними процессорами x86.. В защищенный режим можно войти только после того, как системное программное обеспечение установит одну таблицу дескрипторов и активирует бит включения защиты (PE) в регистре управления 0 (CR0).

Защищенный режим был впервые добавлен в архитектуру x86 в 1982 году с выпуском процессора Intel 80286 (286), а затем расширен с выпуском из 80386 (386) в 1985 году. Благодаря усовершенствованиям, добавленным в защищенный режим, он получил широкое распространение и стал основой для всех последующих улучшений архитектуры x86, хотя многие из этих улучшений, такие как как добавленные инструкции и новые регистры, также принесла пользу в реальном режиме.

Содержание

  • 1 История
    • 1.1 286
    • 1.2 386
  • 2 386 дополнений к защищенному режиму
  • 3 Вход и выход из защищенного режима
  • 4 Функции
    • 4.1 Уровни привилегий
    • 4.2 Совместимость приложений в реальном режиме
    • 4.3 Виртуальный режим 8086
    • 4.4 Адресация сегмента
      • 4.4.1 Защищенный режим
      • 4.4.2 286
      • 4.4.3 386
      • 4.4.4 Структура записи дескриптора сегмента
    • 4.5 Пейджинг
    • 4.6 Многозадачность
  • 5 Операционные системы
  • 6 См. также
  • 7 Ссылки
  • 8 Внешние ссылки

История

The Intel 8086, предшественник 286, изначально был разработан с 20- -битной адресной шиной для своей памяти. Это позволило процессору получить доступ к 2 байтам памяти, что эквивалентно 1 мегабайту. В то время 1 мегабайт считался относительно большим объемом памяти, поэтому разработчики IBM Personal Computer зарезервировали первые 640 килобайт для использования приложениями и операционной системой и оставшиеся 384 килобайта для BIOS (базовая система ввода / вывода) и память для дополнительных устройств.

По мере уменьшения стоимости памяти и увеличения использования памяти Ограничение 1 МБ стало серьезной проблемой. Intel намеревалась устранить это ограничение вместе с другими с выпуском 286.

286

Первоначальный защищенный режим, выпущенный с 286, широко не использовался ; например, он использовался Microsoft Xenix (около 1984 г.), Coherent и Minix. Несколько недостатков, таких как невозможность доступа к BIOS или вызовам DOS из-за невозможности вернуться в реальный режим без перезагрузки процессора, препятствовали широкому использованию. Принятие было дополнительно затруднено тем фактом, что 286 разрешал доступ к памяти только в 16-битных сегментах через каждый из четырех сегментных регистров, то есть только 4 * 2 байта, эквивалентные 256 килобайтам, могли быть доступны одновременно. Поскольку изменение регистра сегмента в защищенном режиме привело к загрузке 6-байтового дескриптора сегмента в ЦП из памяти, инструкция загрузки регистра сегмента заняла много десятков циклов процессора, что сделало ее намного медленнее, чем на 8086; поэтому стратегия вычисления сегментных адресов на лету для доступа к структурам данных размером более 128 килобайт (объединенный размер двух сегментов данных) стала непрактичной даже для тех немногих программистов, которые освоили это на 8086/8088.

286 поддерживал обратную совместимость со своим предшественником 8086, изначально переходя в реальный режим при включении питания. Реальный режим функционировал практически так же, как и 8086, позволяя подавляющему большинству существующего программного обеспечения 8086 работать без изменений на новом 286. Реальный режим также служил более базовым режимом, в котором можно было установить защищенный режим, решая проблему. своего рода проблема с курицей и яйцом. Чтобы получить доступ к расширенным функциям 286, операционная система создала бы некоторые таблицы в памяти, которые контролировали доступ к памяти в защищенном режиме, установили адреса этих таблиц в некоторые специальные регистры процессора, а затем установили бы процессор в защищенный режим. Это обеспечило 24-битную адресацию, которая позволила процессору получить доступ к 2 байтам памяти, что эквивалентно 16 мегабайтам.

386

Микропроцессор Intel 80386

С выпуском 386 в 1985 году многие из решены проблемы, препятствующие широкому распространению предыдущего защищенного режима. Модель 386 была выпущена с размером адресной шины 32 бита, что позволяет использовать 2 байта памяти, что эквивалентно 4 гигабайтам. Размеры сегментов также были увеличены до 32 бит, что означает, что можно было получить доступ ко всему адресному пространству в 4 гигабайта без необходимости переключения между несколькими сегментами. В дополнение к увеличенному размеру адресной шины и регистров сегментов было добавлено много других новых функций с целью повышения операционной безопасности и стабильности. Защищенный режим сейчас используется практически во всех современных операционных системах, работающих на архитектуре x86, таких как Microsoft Windows, Linux и многих других.

Кроме того, изучая отказы защищенного режима 286 для удовлетворения потребностей многопользовательской DOS, Intel добавила отдельный виртуальный режим 8086, который позволил несколько виртуализированных 8086 процессоров для эмуляции на 386. Однако аппаратная поддержка, необходимая для виртуализации самого защищенного режима, должна была подождать еще 20 лет.

386 дополнений к защищенному режиму

С В версии 386 в защищенный режим были добавлены следующие дополнительные функции:

Вход и выход из защищенного режима

До выпуска модели 386 защищенный режим не предлагал прямого метода переключения обратно в реальный режим после входа в защищенный режим. IBM разработала обходной путь (реализованный в IBM AT ), который включал сброс ЦП с помощью контроллера клавиатуры и сохранение системных регистров, указателя стека и часто прерывания маска в ОЗУ микросхемы часов реального времени. Это позволило BIOS восстановить процессор до аналогичного состояния и начать выполнение кода до сброса. Позже для сброса ЦП 286 использовалась тройная ошибка, которая была намного быстрее и чище, чем метод контроллера клавиатуры (и не зависит от IBM AT-совместимого оборудования, но будет работать на любом ЦП 80286. в любой системе).

Чтобы войти в защищенный режим, необходимо сначала создать глобальную таблицу дескрипторов (GDT) как минимум с тремя записями: нулевой дескриптор, дескриптор сегмента кода и дескриптор сегмента данных. На IBM-совместимом компьютере строка A20 (21-я адресная строка) также должна быть включена, чтобы разрешить использование всех адресных строк, чтобы ЦП мог получить доступ к памяти, превышающей 1 мегабайт (только первые 20 разрешено использовать после включения питания, чтобы гарантировать совместимость со старым программным обеспечением, написанным для моделей IBM PC и PC / XT на базе Intel 8088). После выполнения этих двух шагов в регистре CR0 должен быть установлен бит PE и должен быть сделан дальний переход, чтобы очистить входную очередь предварительной выборки .

; установить бит PE mov eax, cr0 или eax, 1 mov cr0, eax; дальний прыжок (cs = селектор сегмента кода) jmp cs: @pm @pm:; Сейчас мы в личку.

С выпуском 386 из защищенного режима можно было выйти, загрузив в сегментные регистры значения реального режима, отключив линию A20 и сбросив бит PE в регистре CR0, без необходимости выполнять начальные шаги настройки, необходимые с the 286.

Функции

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

Уровни привилегий

Пример использования кольца привилегий в операционной системе, использующей все кольца

В защищенном режиме существует четыре уровня привилегий или кольца, пронумерованные от 0 до 3, причем кольцо 0 является наиболее привилегированным, а 3 - наименьшим. Использование колец позволяет системному программному обеспечению ограничивать доступ задач к данным, шлюзы вызова или выполнение привилегированных инструкций. В большинстве сред операционная система и некоторые драйверы устройств работают в кольце 0, а приложения - в кольце 3.

Совместимость приложений в реальном режиме

Согласно данным программиста Intel 80286 Справочное руководство,

... 80286 остается совместимым снизу вверх с большинством прикладных программ 8086 и 80186. Большинство прикладных программ 8086 можно перекомпилировать или перекомпилировать и запустить на 80286 в защищенном режиме.

По большей части двоичная совместимость с кодом реального режима, возможность доступа к физической памяти до 16 МБ, и 1 ГБ виртуальной памяти, были наиболее очевидными изменениями для прикладных программистов. Это было не без ограничений. Если бы приложение использовало или полагалось на какой-либо из приведенных ниже методов, оно не могло бы работать:

  • Сегментная арифметика
  • Привилегированные инструкции
  • Прямой доступ к оборудованию
  • Запись в сегмент кода
  • Выполнение данных
  • Перекрывающиеся сегменты
  • Использование функций BIOS из-за того, что прерывания BIOS зарезервированы Intel

На самом деле, почти все DOS прикладные программы нарушили эти правила. Из-за этих ограничений виртуальный режим 8086 был введен в 386. Несмотря на такие потенциальные неудачи, Windows 3.0 и ее преемники могут использовать преимущества двоичной совместимости с реальным режимом для запуска многих Windows. 2.x (Windows 2.0 и Windows 2.1x ), которые работают в реальном режиме в Windows 2.x, в защищенном режиме.

Виртуальный режим 8086

С выпуском 386 защищенный режим предлагает то, что в руководствах Intel называют виртуальным режимом 8086. Виртуальный режим 8086 предназначен для того, чтобы код, ранее написанный для 8086, мог выполняться без изменений и одновременно с другими задачами без ущерба для безопасности или стабильности системы.

Виртуальный режим 8086, однако, не полностью обратно совместим со всеми программами. Программы, которые требуют манипулирования сегментами, привилегированных инструкций, прямого доступа к оборудованию или используют самомодифицирующийся код, будут генерировать исключение, которое должно обслуживаться операционной системой. Кроме того, приложения, работающие в виртуальном режиме 8086, генерируют ловушку с использованием инструкций, которые включают ввод / вывод (I / O), что может отрицательно сказаться на производительности.

Из-за этих ограничений некоторые программы, изначально разработанные для работы на 8086, не могут быть запущены в виртуальном режиме 8086. В результате системное программное обеспечение вынуждено либо ставить под угрозу безопасность системы, либо обеспечивать обратную совместимость при работе с устаревшим программным обеспечением. Пример такого компромисса можно увидеть в выпуске Windows NT, в котором упала обратная совместимость для «плохо себя ведающих» приложений DOS.

Адресация сегментов

виртуальных сегментов 80286

В реальном режиме каждый логический адрес указывает непосредственно на ячейку физической памяти, каждый логический адрес состоит из двух частей по 16 бит: Сегментная часть логического адреса содержит базовый адрес сегмента с гранулярностью 16 байтов, т. Е. Сегмент может начинаться с физического адреса 0, 16, 32,..., 2-16. Часть смещения логического адреса содержит смещение внутри сегмента, то есть физический адрес может быть вычислен как физический_адрес: = сегмент_часть × 16 + смещение(если адрес строка A20 активирована) соответственно (segment_part × 16 + offset) mod 2 (если A20 выключен) Каждый сегмент имеет размер 2 байта.

Защищенный режим

В защищенном режиме сегмент_часть заменяется 16-битным селектором, в котором 13 старших битов (бит 3 - бит 15) содержат индекс записи внутри таблица дескрипторов. Следующий бит (бит 2) указывает, используется ли операция с GDT или LDT. Два младших бита (бит 1 и бит 0) селектора объединяются для определения привилегии запроса, где значения 0 и 3 представляют наивысшую и самую низкую привилегию, соответственно. Это означает, что байтовое смещение дескрипторов в таблице дескрипторов такое же, как у 16-битного селектора, при условии, что младшие три бита обнулены.

Запись таблицы дескрипторов определяет реальный линейный адрес сегмента, предельное значение для размера сегмента и некоторые биты атрибутов (флаги).

286

Адрес сегмента внутри записи таблицы дескрипторов имеет длину 24 бита, поэтому каждый байт физической памяти может быть определен как граница сегмента. Предельное значение внутри записи таблицы дескрипторов имеет длину 16 бит, поэтому длина сегмента может составлять от 1 до 2 байтов. Вычисленный линейный адрес равен адресу физической памяти.

386

Адрес сегмента внутри записи таблицы дескрипторов расширяется до 32 бит, поэтому каждый байт физической памяти может быть определен как граница сегмента. Предельное значение внутри записи таблицы дескрипторов расширяется до 20 бит и дополняется флагом гранулярности (G-бит, для краткости):

  • Если G-бит равен нулю, предел имеет гранулярность 1 байт, т.е. размер сегмента может быть 1, 2,..., 2 байта.
  • Если G-бит равен одному пределу, имеет гранулярность 2 байта, то есть размер сегмента может быть 1 × 2, 2 × 2,..., 2 × 2 байта. Если подкачка отключена, вычисленный линейный адрес равен адресу физической памяти. Если пейджинг включен, вычисленный линейный адрес используется как вход пейджинга.

Процессор 386 также использует 32-битные значения для смещения адреса.

Для обеспечения совместимости с 286 защищенным режимом был добавлен новый флаг по умолчанию (для краткости D-бит). Если бит D сегмента кода выключен (0), все команды внутри этого сегмента по умолчанию будут интерпретироваться как 16-битные команды; если он включен (1), они будут интерпретироваться как 32-битные команды.

Структура записи дескриптора сегмента

80286 Дескриптор сегмента
10987654321098765432109876543210
Базовый [0..15]Предел [0..15]
32109876543210987654321098765432
Не используетсяPDPLSXCRABase [16..23]
80386 Дескриптор сегмента
10987654321098765432109876543210
Base [0..15]Предел [0..15]
32109876543210987654321098765432
Base [24..31]GD0UОграничение [16..19]PDPLSXCRABase [16..23]

Где:

  • A - бит доступа;
  • R - бит чтения;
  • C (бит 42) зависит от X:
    • если X = 1, то C является битом согласования и определяет, какие уровни привилегий могут перейти на этот сегмент (без изменения уровня привилегий):
      • если C = 0, то сюда может перейти только код с тем же уровнем привилегий, что и DPL;
      • если C = 1, то сюда может перейти код с таким же или более низким уровнем привилегий относительно DPL.
    • если X = 0, то C - это бит направления:
      • если C = 0, то сегмент растет;
      • если C = 1, то сегмент растет вниз.
  • X - это исполняемый бит:
    • , если X = 1, тогда сегмент является сегментом кода;
    • если X = 0, тогда сегмент является сегментом данных.
  • S - бит типа сегмента, который обычно должен быть очищен для системных сегментов;
  • DPL - уровень привилегий дескриптора;
  • P - бит присутствия;
  • D - размер операнда по умолчанию;
  • G - бит гранулярности;
  • Бит 52 дескриптора 80386 не используется оборудованием.

Пейджинг

Общий метод использования пейджинга для создать виртуальное адресное пространство Пейджинг (на Intel 80386) с размером страницы 4K

В дополнение к добавлению виртуального режима 8086, 386 также добавил пейджинг в защищенный режим. Посредством разбиения на страницы системное программное обеспечение может ограничивать и контролировать доступ задачи к страницам, которые представляют собой разделы памяти. Во многих операционных системах подкачка используется для создания независимого виртуального адресного пространства для каждой задачи, предотвращая манипулирование одной задачей с памятью другой. Пейджинг также позволяет перемещать страницы из первичной памяти в более медленную и большую вторичную память, такую ​​как жесткий диск. Это позволяет использовать больше памяти, чем физически доступно в первичном хранилище.

Архитектура x86 позволяет управлять страницами через два массива : каталоги страниц и таблицы страниц. Первоначально каталог страниц имел размер одной страницы, четыре килобайта, и содержал 1024 записи каталога страниц (PDE), хотя последующие усовершенствования архитектуры x86 добавили возможность использовать страницы большего размера. Каждый PDE содержал указатель на таблицу страниц. Таблица страниц также изначально имела размер четыре килобайта и содержала 1024 записи таблицы страниц (PTE). Каждый PTE содержит указатель на фактический физический адрес страницы и используется только при использовании четырехкибайтных страниц. В любой момент времени может использоваться только один каталог страниц.

Многозадачность

Благодаря использованию звонков, привилегированных шлюзов вызова и Сегмент состояния задачи (TSS), представленный в 286, вытесняющая многозадачность стала возможной в архитектуре x86. TSS позволяет изменять регистры общего назначения, поля селектора сегментов и стеки, не затрагивая регистры другой задачи. TSS также позволяет уровню привилегий задачи и разрешениям порта ввода-вывода быть независимыми от другой задачи.

Во многих операционных системах не используются все функции TSS. Обычно это происходит из-за проблем с переносимостью или из-за проблем с производительностью, создаваемых аппаратными переключателями задач. В результате многие операционные системы используют как оборудование, так и программное обеспечение для создания многозадачной системы.

Операционные системы

Операционные системы, такие как OS / 2 1.x, пытаются переключиться процессор между защищенным и реальным режимами. Это и медленно, и небезопасно, потому что программа в реальном режиме может легко вывести компьютер из строя. OS / 2 1.x определяет правила ограничительного программирования, позволяющие API семейства или связанной программе работать в реальном или защищенном режиме. Некоторые ранние операционные системы Unix, OS / 2 1.x и Windows использовали этот режим.

Windows 3.0 могла запускать программы в реальном режиме в 16-битном защищенном режиме; при переключении в защищенный режим было решено сохранить модель с одним уровнем привилегий, которая использовалась в реальном режиме, поэтому приложения Windows и библиотеки DLL могут перехватывать прерывания и осуществлять прямой доступ к оборудованию. Так продолжалось в серии Windows 9x. Если программа Windows 1.x или 2.x написана правильно и избегает сегментной арифметики, она будет работать одинаково как в реальном, так и в защищенном режиме. Программы Windows обычно избегают сегментной арифметики, потому что Windows реализует схему виртуальной памяти программного обеспечения, перемещая программный код и данные в памяти, когда программы не запущены, поэтому манипулирование абсолютными адресами опасно; программы должны сохранять дескрипторы только для блоков памяти, когда они не работают. Запуск старой программы, когда Windows 3.0 работает в защищенном режиме, вызывает диалоговое окно с предупреждением, предлагающее либо запустить Windows в реальном режиме, либо получить обновленную версию приложения. При обновлении программ с хорошим поведением с помощью утилиты MARK с параметром MEMORY этот диалог не появляется. Невозможно запустить некоторые программы с графическим интерфейсом в 16-битном защищенном режиме, а другие программы с графическим интерфейсом - в реальном режиме. В Windows 3.1 реальный режим больше не поддерживался, и к нему нельзя было получить доступ.

В современных 32-битных операционных системах виртуальный режим 8086 по-прежнему используется для запуска приложений, например DPMI совместимые программы DOS extender (через виртуальные машины DOS ) или приложения Windows 3.x (через подсистему Windows в Windows ) и определенные классы драйверов устройств (например, для изменения разрешения экрана с помощью функций BIOS) в OS / 2 2.0 (и более поздних версиях OS / 2) и 32-битных Windows NT, все под управлением 32-битного ядра. Однако 64-битные операционные системы (которые работают в длинном режиме ) больше не используют это, поскольку виртуальный режим 8086 был удален из длинного режима.

См. Также

Ссылки

Внешние ссылки

Последняя правка сделана 2021-06-02 08:31:58
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте