Особенности адресации в защищенном режиме

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

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

В отличие от реального режима, в защищенном режиме программа уже не может запросто обратиться по любому физическому адресу. В защищенном режиме используется виртуализация памяти (страничная модель). Каждой загруженной программе (задаче, процессу) операционная система выделяет 4 Гбайт виртуальной памяти, которая состоит из сегментов различного назначения и с разными правами доступа. Сегмент может иметь почти произвольный размер до 4 Гбайт, в отличие от сегмента реального режима, который не превышает 64 Кбайт. Из одних сегментов можно только читать данные, в другие возможна и запись.

Ключевым объектом защищенного режима является специальная структура – дескриптор сегмента, содержащий краткое описание непрерывной области памяти, которая может являться сегментом кода, данных или стека. Все дескрипторы программ, выполняемых в текущий момент, собираются в одну из трех дескрипторных таблиц.

Для программного кода выделяются специальные сегменты, команды могут выбираться и исполняться только из них. Процессору «безразлично» содержимое ячейки памяти, которой передается управление, - он всегда пытается трактовать ее как код команды. Если ошибочно управление передалось на сегмент данных, то сработает защита и ошибочный процесс будет завершен.

Виртуальная логическая память, адресуемая программой в пределах выделенных ей сегментов, разбивается на страницы. В системах Win32 с процессорами Pentium размер одной страницы составляет 4 Кбайт, следовательно, Win32 разбивает блок памяти 4 Гбайт на страницы по 4 Кбайт. При этом в каждой странице содержится небольшой объем служебной информации, в частности, данные о том, занята страница или нет.

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

Если активировано несколько программ, то в физической оперативной памяти в каждый момент времени присутствует только часть виртуальных страниц. Остальные страницы хранятся на диске, откуда операционная система может «подкачать» их в физическую память, предварительно выгрузив на диск часть не используемых в данный момент страниц. Обращение процессора к ячейке виртуальной памяти, присутствующей в физической памяти, происходит обычным образом. Если затребованная область памяти в данный момент отсутствует в физической памяти, то операционная система организует замену страниц, называемую свопингом (swapping).