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

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

Защищённый режим (режим защищённой виртуальной адресации) — режим работы x86-совместимых процессоров. Частично был реализован уже в процессоре 80286, но там существенно отличался способ работы с памятью, так как процессоры ещё были 16-битными и не была реализована страничная организация памяти. Первая 32-битная реализация защищённого режима — процессор Intel 80386. Применяется в совместимых процессорах других производителей. Данный режим используется в современных многозадачных операционных системах, Microsoft Windows, Linux, OS X.

Ранее похожий режим применялся фирмой Digital Equipment (DEC) для 32-разрядных компьютеров: VAX-11.





Особенности процессора 80286

В процессоре 80286, помимо реального режима, был реализован также защищённый режим. В защищённом режиме процессор может адресовать до 16 Мбайт физической памяти и 1 Гбайт виртуальной (16384 сегмента по 64 кбайт) за счёт изменения механизма адресации. Переключение из реального режима в защищённый происходит программно и относительно просто, однако для обратного перехода необходим аппаратный сброс процессора. Для отслеживания текущего режима работы процессора используется регистр слова состояния машины (MSW). Программы реального режима без модификаций в защищённом режиме исполняться не могут, так же как и программы BIOS машины.

Суть защищённого режима в следующем: программист и разрабатываемые им программы используют логическое адресное пространство, размер которого может составлять 1 гигабайт. Логический адрес преобразуется в физический адрес автоматически с помощью схемы управления памятью (MMU). При этом содержимое сегментного регистра не связано напрямую с физическим адресом, а является номером сегмента в соответствующей таблице. Благодаря защищённому режиму, в памяти может храниться только та часть программы, которая необходима в данный момент, а остальная часть может храниться во внешней памяти (например, на жёстком диске). В случае обращения к той части программы, которой нет в памяти в данный момент, операционная система может приостановить программу, загрузить требуемую секцию кода из внешней памяти и возобновить выполнение программы. Следовательно, становятся допустимыми программы, размер которых больше объёма имеющейся памяти, и пользователю кажется, что он работает с большей памятью, чем на самом деле.

Физический адрес формируется следующим образом. В сегментных регистрах хранится селектор, содержащий индекс дескриптора в таблице дескрипторов (13 бит), 1 бит, определяющий к какой таблице дескрипторов будет производиться обращение (к локальной или к глобальной) и 2 бита запрашиваемого уровня привилегий. Далее происходит обращение к соответствующей таблице дескрипторов и соответствующему дескриптору, который содержит начальный 24-битный адрес сегмента, размер сегмента и права доступа, после чего вычисляется необходимый физический адрес путём сложения адреса сегмента со смещением из 16-разрядного регистра.

Особенности процессоров 80386 — 80486

С появлением 32-разрядных процессоров 80386 фирмы Intel процессоры могут работать в трёх режимах: реальном, защищённом и виртуального процессора 8086.

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

В процессоре i386 компания Intel учла необходимость лучшей поддержки реального режима, потому что программное обеспечение времени его появления не было готово полностью работать в защищённом режиме. Поэтому, например, в i386, возможно переключение из защищённого режима обратно в реальный (при разработке 80286 считалось, что это не потребуется, поэтому на компьютерах с процессором 80286 возврат в реальный режим осуществляется схемно — через сброс процессора).

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

Страничная организация памяти

Вся физическая память делится на страницы фиксированного размера (4 КБайт, 2 МБ или 4 МБ, в x86_64 также 1 ГБ). Каждая страница, независимо от размера, выравнена по границе 4 КБайт.

Основная мысль сводится к формированию таблиц описания памяти, которые определяют состояние её отдельных сегментов/страниц и т. п. При нехватке памяти операционная система может выгрузить часть данных из оперативной памяти на диск, а в таблицу описаний внести указание на отсутствие этих данных в памяти. При попытке обращения к отсутствующим данным процессор сформирует исключение #PF (разновидность прерывания) и отдаст управление операционной системе, которая вернёт данные в память, а затем вернёт управление программе. Таким образом для программ процесс подкачки данных с дисков происходит незаметно.

Линейная адресация

Линейная адресация памяти — схема адресации памяти компьютера в защищённом режиме (начиная с Intel 80386 и других совместимых x86-процессорах). Используется большинством современных многозадачных ОС.

Благодаря механизму линейной адресации можно создавать любое (ограниченное только размерами оперативной памяти) количество независимых виртуальных адресных пространств. Причём каждая страница линейного адресного пространства может находиться по любому физическому адресу или даже быть выгруженной на диск.

При использовании линейной адресации 32-битный логический адрес делится на три части:

  • Номер записи в каталоге страниц (номер таблицы страниц) — биты 31-22 (10 бит). Одна запись из каталога страниц определяет отображение 4 МБайт адресного пространства.
  • Номер записи в таблице страниц (номер страницы в таблице страниц) — биты 21-12 (10 бит). Одна запись из таблицы страниц определяет отображение 4 КБайт адресного пространства.
  • Смещение в рамках страницы — биты 11-0 (12 бит).

При использовании страниц по 4 МБайт вторая часть отсутствует. Смещение же в странице будут определять биты 21-0 (22 бита).

Для включения линейной адресации необходимо, находясь в защищённом режиме, установить бит PG в регистре CR0. Предварительно необходимо создать в памяти каталог страниц (англ. Page Directory, PD) и таблицы страниц (англ. Page Table, PT), после чего в регистр CR3 загрузить физический адрес каталога страниц.

Каталог и таблицы страниц

Обе эти структуры представляют собой таблицы элементов каталога и таблицы страниц (англ. Page Directory Entry, PDE и англ. Page Table Entry, PTE) страницы памяти по 4 КБайт.

Оба элемента занимают по 4 байта (32 бита) и имеют похожую структуру:

В жёлтых полях (Page table address, Page address) записаны старшие 20 бит адреса таблицы страниц и страницы соответственно (младшие 12 бит физического адреса всегда равны нулю — не забывайте о выравнивании).

Три бита Avl — это биты, отданные системе. В них можно записать всё что угодно.

Описание флагов:

  • Бит P (англ. Present) определяет наличие данной страницы или таблицы страниц в физической памяти. Если он сброшен, то процессор записывает линейный адрес отсутствующей страницы[1] в регистр CR2 и передаёт управление обработчику #PF, который должен загрузить страницу в память (или создать её) и установить этот бит.
  • Бит RW (англ. Read/Write) определяет, можно ли в эту страницу что-то писать (1 — можно, 0 — нельзя).
  • Бит US (англ. User/Supervisor) разрешает коду с CPL=3 (код пользователя) обращаться к этой странице (при US=1).
  • Бит PWT (англ. Page write through) — запрещение кэша записи (немедленная запись). Используется для управления кэшированием данной страницы. Если он установлен, то запись происходит непосредственно в оперативную память. Актуально обычно в многоядерных машинах.
  • Бит PCD (англ. Page cache disable) — запрещение кэширования этой страницы. При обращении к такой странице, она не заносится в кэш.
  • Бит A (англ. Accessed). Аналогично биту A в дескрипторе сегмента, этот бит никак не влияет на работу со страницей. Он просто устанавливается процессором при первом же обращении к этой странице (чтение, запись, выполнение).
  • Бит D (англ. Dirty, букв. грязный) используется только в элементах таблицы страниц (PTE) для отслеживания изменений страницы. Аналогично биту A, устанавливается процессором, но только при записи на эту страницу.
  • Бит PS (англ. Page size, только каталог страниц) определяет размер страницы. Если сброшен, то этот элемент указывает на таблицу страниц с размером страниц 4 КБайт. Если установлен, то элемент указывает на страницу размером 4 МБайт при 32-битной физической адресации или 2 МБайт при 36-битной. Важно! Работает только при установленном бите PSE в регистре CR4.
  • Бит PAT (англ. Page attribute table, только таблица страниц). — Начиная с Pentium 3 может использоваться (совместно с PCD и PWT и MSR IA32_CR_PAT) для определения политики кеширования страницы (UC, WC, WT, WP, WB, UC-) наряду с MTRR[2][3]
  • Бит G (англ. Global). Если этот бит установлен, то адрес страницы (или таблицы страниц) никогда не удаляется из TLB кэша.[4]

Напишите отзыв о статье "Защищённый режим"

Примечания

  1. Конкретнее, в CR2 записывается полный адрес (32 бита). Напр. если программа обратилась по адресу 00001543h (то есть ко второй странице (№ 1) при страницах по 4 Кбайт), то в CR2 запишется именно это число
  2. The Unabridged Pentium 4: IA32 Processor Genealogy ISBN 0-321-24656-X «PAT Feature (Page Attribute Table)» page 797
  3. kernel.org/doc/ols/2008/ols2008v2-pages-135-144.pdf
  4. Удалить из TLB кэша можно любую страницу привилегированной командой INVLPG

См. также

Литература

  • Рудаков П. И., Финогенов К. Г. Программируем на языке Ассемблера IBM PC. — М.: Энтроп, 1996.

Ссылки

  • [www.intel.ru/content/www/ru/ru/processors/architectures-software-developer-manuals.html Руководства для разработчиков приложений для 64- и 32-разрядных архитектур Intel]
  • [developer.amd.com/resources/documentation-articles/developer-guides-manuals/ AMD documentation]
  • [www.rcollins.org/articles/pmbasics/tspec_a1_doc.html Protected Mode Basics]
  • [www.intel.com/design/intarch/papers/exc_ia.htm Overview of the Protected Mode Operations of the Intel Architechrure]
  • [tldp.org/LDP/khg/HyperNews/get/memory/80386mm.html 80386 Memory Management]
  • [pdos.csail.mit.edu/6.828/2008/readings/i386/s05_02.htm 80386 Programmer's Reference Manual]


Отрывок, характеризующий Защищённый режим

– Да, в этой комнате, четыре дня тому назад, совещались Винцингероде и Штейн, – с той же насмешливой, уверенной улыбкой продолжал Наполеон. – Чего я не могу понять, – сказал он, – это того, что император Александр приблизил к себе всех личных моих неприятелей. Я этого не… понимаю. Он не подумал о том, что я могу сделать то же? – с вопросом обратился он к Балашеву, и, очевидно, это воспоминание втолкнуло его опять в тот след утреннего гнева, который еще был свеж в нем.
– И пусть он знает, что я это сделаю, – сказал Наполеон, вставая и отталкивая рукой свою чашку. – Я выгоню из Германии всех его родных, Виртембергских, Баденских, Веймарских… да, я выгоню их. Пусть он готовит для них убежище в России!
Балашев наклонил голову, видом своим показывая, что он желал бы откланяться и слушает только потому, что он не может не слушать того, что ему говорят. Наполеон не замечал этого выражения; он обращался к Балашеву не как к послу своего врага, а как к человеку, который теперь вполне предан ему и должен радоваться унижению своего бывшего господина.
– И зачем император Александр принял начальство над войсками? К чему это? Война мое ремесло, а его дело царствовать, а не командовать войсками. Зачем он взял на себя такую ответственность?
Наполеон опять взял табакерку, молча прошелся несколько раз по комнате и вдруг неожиданно подошел к Балашеву и с легкой улыбкой так уверенно, быстро, просто, как будто он делал какое нибудь не только важное, но и приятное для Балашева дело, поднял руку к лицу сорокалетнего русского генерала и, взяв его за ухо, слегка дернул, улыбнувшись одними губами.
– Avoir l'oreille tiree par l'Empereur [Быть выдранным за ухо императором] считалось величайшей честью и милостью при французском дворе.
– Eh bien, vous ne dites rien, admirateur et courtisan de l'Empereur Alexandre? [Ну у, что ж вы ничего не говорите, обожатель и придворный императора Александра?] – сказал он, как будто смешно было быть в его присутствии чьим нибудь courtisan и admirateur [придворным и обожателем], кроме его, Наполеона.
– Готовы ли лошади для генерала? – прибавил он, слегка наклоняя голову в ответ на поклон Балашева.
– Дайте ему моих, ему далеко ехать…
Письмо, привезенное Балашевым, было последнее письмо Наполеона к Александру. Все подробности разговора были переданы русскому императору, и война началась.


После своего свидания в Москве с Пьером князь Андреи уехал в Петербург по делам, как он сказал своим родным, но, в сущности, для того, чтобы встретить там князя Анатоля Курагина, которого он считал необходимым встретить. Курагина, о котором он осведомился, приехав в Петербург, уже там не было. Пьер дал знать своему шурину, что князь Андрей едет за ним. Анатоль Курагин тотчас получил назначение от военного министра и уехал в Молдавскую армию. В это же время в Петербурге князь Андрей встретил Кутузова, своего прежнего, всегда расположенного к нему, генерала, и Кутузов предложил ему ехать с ним вместе в Молдавскую армию, куда старый генерал назначался главнокомандующим. Князь Андрей, получив назначение состоять при штабе главной квартиры, уехал в Турцию.
Князь Андрей считал неудобным писать к Курагину и вызывать его. Не подав нового повода к дуэли, князь Андрей считал вызов с своей стороны компрометирующим графиню Ростову, и потому он искал личной встречи с Курагиным, в которой он намерен был найти новый повод к дуэли. Но в Турецкой армии ему также не удалось встретить Курагина, который вскоре после приезда князя Андрея в Турецкую армию вернулся в Россию. В новой стране и в новых условиях жизни князю Андрею стало жить легче. После измены своей невесты, которая тем сильнее поразила его, чем старательнее он скрывал ото всех произведенное на него действие, для него были тяжелы те условия жизни, в которых он был счастлив, и еще тяжелее были свобода и независимость, которыми он так дорожил прежде. Он не только не думал тех прежних мыслей, которые в первый раз пришли ему, глядя на небо на Аустерлицком поле, которые он любил развивать с Пьером и которые наполняли его уединение в Богучарове, а потом в Швейцарии и Риме; но он даже боялся вспоминать об этих мыслях, раскрывавших бесконечные и светлые горизонты. Его интересовали теперь только самые ближайшие, не связанные с прежними, практические интересы, за которые он ухватывался с тем большей жадностью, чем закрытое были от него прежние. Как будто тот бесконечный удаляющийся свод неба, стоявший прежде над ним, вдруг превратился в низкий, определенный, давивший его свод, в котором все было ясно, но ничего не было вечного и таинственного.
Из представлявшихся ему деятельностей военная служба была самая простая и знакомая ему. Состоя в должности дежурного генерала при штабе Кутузова, он упорно и усердно занимался делами, удивляя Кутузова своей охотой к работе и аккуратностью. Не найдя Курагина в Турции, князь Андрей не считал необходимым скакать за ним опять в Россию; но при всем том он знал, что, сколько бы ни прошло времени, он не мог, встретив Курагина, несмотря на все презрение, которое он имел к нему, несмотря на все доказательства, которые он делал себе, что ему не стоит унижаться до столкновения с ним, он знал, что, встретив его, он не мог не вызвать его, как не мог голодный человек не броситься на пищу. И это сознание того, что оскорбление еще не вымещено, что злоба не излита, а лежит на сердце, отравляло то искусственное спокойствие, которое в виде озабоченно хлопотливой и несколько честолюбивой и тщеславной деятельности устроил себе князь Андрей в Турции.
В 12 м году, когда до Букарешта (где два месяца жил Кутузов, проводя дни и ночи у своей валашки) дошла весть о войне с Наполеоном, князь Андрей попросил у Кутузова перевода в Западную армию. Кутузов, которому уже надоел Болконский своей деятельностью, служившей ему упреком в праздности, Кутузов весьма охотно отпустил его и дал ему поручение к Барклаю де Толли.
Прежде чем ехать в армию, находившуюся в мае в Дрисском лагере, князь Андрей заехал в Лысые Горы, которые были на самой его дороге, находясь в трех верстах от Смоленского большака. Последние три года и жизни князя Андрея было так много переворотов, так много он передумал, перечувствовал, перевидел (он объехал и запад и восток), что его странно и неожиданно поразило при въезде в Лысые Горы все точно то же, до малейших подробностей, – точно то же течение жизни. Он, как в заколдованный, заснувший замок, въехал в аллею и в каменные ворота лысогорского дома. Та же степенность, та же чистота, та же тишина были в этом доме, те же мебели, те же стены, те же звуки, тот же запах и те же робкие лица, только несколько постаревшие. Княжна Марья была все та же робкая, некрасивая, стареющаяся девушка, в страхе и вечных нравственных страданиях, без пользы и радости проживающая лучшие годы своей жизни. Bourienne была та же радостно пользующаяся каждой минутой своей жизни и исполненная самых для себя радостных надежд, довольная собой, кокетливая девушка. Она только стала увереннее, как показалось князю Андрею. Привезенный им из Швейцарии воспитатель Десаль был одет в сюртук русского покроя, коверкая язык, говорил по русски со слугами, но был все тот же ограниченно умный, образованный, добродетельный и педантический воспитатель. Старый князь переменился физически только тем, что с боку рта у него стал заметен недостаток одного зуба; нравственно он был все такой же, как и прежде, только с еще большим озлоблением и недоверием к действительности того, что происходило в мире. Один только Николушка вырос, переменился, разрумянился, оброс курчавыми темными волосами и, сам не зная того, смеясь и веселясь, поднимал верхнюю губку хорошенького ротика точно так же, как ее поднимала покойница маленькая княгиня. Он один не слушался закона неизменности в этом заколдованном, спящем замке. Но хотя по внешности все оставалось по старому, внутренние отношения всех этих лиц изменились, с тех пор как князь Андрей не видал их. Члены семейства были разделены на два лагеря, чуждые и враждебные между собой, которые сходились теперь только при нем, – для него изменяя свой обычный образ жизни. К одному принадлежали старый князь, m lle Bourienne и архитектор, к другому – княжна Марья, Десаль, Николушка и все няньки и мамки.
Во время его пребывания в Лысых Горах все домашние обедали вместе, но всем было неловко, и князь Андрей чувствовал, что он гость, для которого делают исключение, что он стесняет всех своим присутствием. Во время обеда первого дня князь Андрей, невольно чувствуя это, был молчалив, и старый князь, заметив неестественность его состояния, тоже угрюмо замолчал и сейчас после обеда ушел к себе. Когда ввечеру князь Андрей пришел к нему и, стараясь расшевелить его, стал рассказывать ему о кампании молодого графа Каменского, старый князь неожиданно начал с ним разговор о княжне Марье, осуждая ее за ее суеверие, за ее нелюбовь к m lle Bourienne, которая, по его словам, была одна истинно предана ему.
Старый князь говорил, что ежели он болен, то только от княжны Марьи; что она нарочно мучает и раздражает его; что она баловством и глупыми речами портит маленького князя Николая. Старый князь знал очень хорошо, что он мучает свою дочь, что жизнь ее очень тяжела, но знал тоже, что он не может не мучить ее и что она заслуживает этого. «Почему же князь Андрей, который видит это, мне ничего не говорит про сестру? – думал старый князь. – Что же он думает, что я злодей или старый дурак, без причины отдалился от дочери и приблизил к себе француженку? Он не понимает, и потому надо объяснить ему, надо, чтоб он выслушал», – думал старый князь. И он стал объяснять причины, по которым он не мог переносить бестолкового характера дочери.
– Ежели вы спрашиваете меня, – сказал князь Андрей, не глядя на отца (он в первый раз в жизни осуждал своего отца), – я не хотел говорить; но ежели вы меня спрашиваете, то я скажу вам откровенно свое мнение насчет всего этого. Ежели есть недоразумения и разлад между вами и Машей, то я никак не могу винить ее – я знаю, как она вас любит и уважает. Ежели уж вы спрашиваете меня, – продолжал князь Андрей, раздражаясь, потому что он всегда был готов на раздражение в последнее время, – то я одно могу сказать: ежели есть недоразумения, то причиной их ничтожная женщина, которая бы не должна была быть подругой сестры.
Старик сначала остановившимися глазами смотрел на сына и ненатурально открыл улыбкой новый недостаток зуба, к которому князь Андрей не мог привыкнуть.
– Какая же подруга, голубчик? А? Уж переговорил! А?
– Батюшка, я не хотел быть судьей, – сказал князь Андрей желчным и жестким тоном, – но вы вызвали меня, и я сказал и всегда скажу, что княжна Марья ни виновата, а виноваты… виновата эта француженка…