Защищённый режим: различия между версиями

[непроверенная версия][отпатрулированная версия]
Содержимое удалено Содержимое добавлено
м →‎Ссылки: удаление {{stub}} из статей более 1000 слов согласно ВП:Ф-В#Стабы
Нет описания правки
Строка 1:
'''Защищённый режим''' (режим защищённой виртуальной адресации) — режим работы x86-совместимых [[процессор]]ов. Частично был реализован уже в процессоре [[80286]], но там существенно отличался способ работы с памятью, так как процессоры ещеещё были 16-битными и не была реализована [[Страничная память|страничная организация памяти]]. Первая 32-битная реализация защищенного режима - — процессор Intel 80386. Применяется в совместимых процессорах других производителей. Данный режим используется в современных многозадачных операционных системах, [[Microsoft Windows]], [[Linux]], [[OS X]].
 
Ранее похожий режим применялся фирмой [[Digital Equipment]] (DEC) для 32-разрядных компьютеров: [[VAX-11]].
Строка 7:
В процессоре [[80286]], помимо [[Реальный режим|реального режима]], был реализован также защищённый режим. В защищённом режиме процессор может адресовать до 16 Мбайт физической памяти и 1 Гбайт виртуальной (16384 сегмента по 64 кбайт) за счёт изменения механизма адресации. Переключение из реального режима в защищённый происходит программно и относительно просто, однако для обратного перехода необходим аппаратный сброс процессора. Для отслеживания текущего режима работы процессора используется регистр слова состояния машины (MSW). Программы реального режима без модификаций в защищённом режиме исполняться не могут, так же как и программы [[BIOS]] машины.
Суть защищённого режима в следующем: программист и разрабатываемые им программы используют логическое адресное пространство, размер которого может составлять 1 гигабайт. Логический адрес преобразуется в физический адрес автоматически с помощью [[Блок управления памятью|схемы управления памятью]] (MMU). При этом содержимое сегментного регистра не связано напрямую с физическим адресом, а является номером сегмента в соответствующей таблице. Благодаря защищённому режиму, в памяти может храниться только та часть программы, которая необходима в данный момент, а остальная часть может храниться во внешней памяти (например, на жёстком диске). В случае обращения к той части программы, которой нет в памяти в данный момент, операционная система может приостановить программу, загрузить требуемую секцию кода из внешней памяти и возобновить выполнение программы. Следовательно, становятся допустимыми программы, размер которых больше объемаобъёма имеющейся памяти, и пользователю кажется, что он работает с большей памятью, чем на самом деле.
 
Физический адрес формируется следующим образом. В сегментных регистрах хранится [[селектор]], содержащий индекс [[Дескриптор сегмента|дескриптора]] в таблице дескрипторов (13 бит), 1 бит, определяющий к какой таблице дескрипторов будет производиться обращение (к локальной или к глобальной) и 2 бита запрашиваемого уровня привилегий. Далее происходит обращение к соответствующей [[Таблица дескрипторов|таблице дескрипторов]] и соответствующему дескриптору, который содержит начальный 24-битный адрес [[Сегмент памяти|сегмента]], размер сегмента и права доступа, после чего вычисляется необходимый физический адрес путём сложения адреса сегмента со смещением из 16-разрядного регистра.
Строка 15:
С появлением 32-разрядных процессоров 80386 фирмы Intel процессоры могут работать в трех режимах: [[реальный режим|реальном]], защищённом и виртуального процессора 8086.
 
В защищённом режиме используются полные возможности 32-разрядного процессора — обеспечивается непосредственный доступ к 4 Гбайт физического адресного пространства и [[Многозадачность|многозадачный режим]] с параллельным выполнением нескольких программ ([[процесс (информатика)|процессов]]). Собственно говоря, многозадачный режим организует многозадачная операционная система, однако микропроцессор предоставляет необходимый для этого режима надежный механизм защиты задач друг от друга [[Кольца защиты|с помощью четырехуровневойчетырёхуровневой системы привилегий]]. Также в этом режиме доступна страничная организация памяти, повышающая уровень защиты задач друг от друга и эффективность их выполнения.
 
В процессоре i386 компания Intel учла необходимость лучшей поддержки реального режима, потому что программное обеспечение времени его появления не было готово полностью работать в защищённом режиме. Поэтому, например, в i386, возможно переключение из защищённого режима обратно в реальный (при разработке 80286 считалось, что это не потребуется, поэтому на компьютерах с процессором 80286 возврат в реальный режим осуществляется схемно — через сброс процессора).
Строка 23:
== Страничная организация памяти ==
{{main|Страничная память}}
Вся физическая память делится на ''страницы'' фиксированного размера (4 К[[Байт]], 2 МБ или 4 МБ, в x86_64 также 1 ГБ). Каждая страница, независимо от размера, выровненавыравнена по границе 4 К[[Байт]].
 
Основная мысль сводится к формированию таблиц описания памяти, которые определяют состояние её отдельных сегментов/страниц и т. п. При нехватке памяти операционная система может выгрузить часть данных из оперативной памяти на диск, а в таблицу описаний внести указание на отсутствие этих данных в памяти. При попытке обращения к отсутствующим данным процессор сформирует [[Page fault|исключение #PF]] (разновидность прерывания) и отдаст управление операционной системе, которая вернёт данные в память, а затем вернёт управление программе. Таким образом для программ процесс [[подкачка страниц|подкачки данных]] с дисков происходит незаметно.
 
== Линейная адресация ==
<!-- перенесено из [[Линейная адресация памяти]]; автор: [[User:Jego.ruS]], CC-BY-SA -->
''Линейная адресация памяти'' — схема адресации памяти компьютера в защищенном режиме (начиная с [[Intel 80386]] и других совместимых x86-процессорах). Используется большинством современных многозадачных ОС.
 
Строка 34:
 
При использовании линейной адресации 32-[[бит]]ный логический адрес делится на три части:
* Номер записи в ''каталоге страниц'' (номер таблицы страниц) — [[бит]]ы 31-22 (10 бит). Одна запись из каталога страниц определяет отображение 4  М[[Байт]] адресного пространства.
* Номер записи в ''таблице страниц'' (номер страницы в таблице страниц) — [[бит]]ы 21-12 (10 бит). Одна запись из таблицы страниц определяет отображение 4 К[[Байт]] адресного пространства.
* Смещение в рамках страницы — [[бит]]ы 11-0 (12 бит).
Строка 45:
 
== Каталог и таблицы страниц ==
Обе эти структуры представляют собой таблицы элементов каталога и таблицы страниц ({{lang-en|Page Directory Entry}}, PDE и {{lang-en|Page Table Entry}}, PTE) страницы памяти по 4  К[[Байт]].
 
Оба элемента занимают по 4 [[байт]]а (32 [[бит]]а) и имеют похожую структуру:
Строка 58:
 
Описание флагов:
* Бит P ({{lang-en|Present}}) определяет наличие данной страницы или таблицы страниц в физической памяти. Если он сброшен, то процессор записывает ''линейный адрес'' отсутствующей страницы <ref>Конкретнее, в [[Системные регистры x86|CR2]] записывается полный адрес (32 бита). Напр. если программа обратилась по адресу 00001543h (то есть ко второй странице (№ 1) при страницах по 4 Кбайт), то в [[Системные регистры x86|CR2]] запишется именно это число</ref> в регистр [[Системные регистры x86|CR2]] и передаёт управление [[Page fault|обработчику #PF]], который должен загрузить страницу в память (или создать её) и установить этот [[бит]].
* Бит RW ({{lang-en|Read/Write}}) определяет, можно ли в эту страницу что-то писать (1 — можно, 0 — нельзя).
* Бит US ({{lang-en|User/Supervisor}}) разрешает коду с [[Сегментная защита памяти|CPL]]=3 (код пользователя) обращаться к этой странице (при US=1).
Строка 65:
* Бит A ({{lang-en|Accessed}}). Аналогично [[бит]]у A в [[Дескриптор сегмента|дескрипторе сегмента]], этот [[бит]] никак не влияет на работу со страницей. Он просто устанавливается процессором при первом же обращении к этой странице (чтение, запись, выполнение).
* Бит D ({{lang-en|Dirty}}, ''букв. грязный'') используется только в элементах ''таблицы страниц'' (PTE) для отслеживания изменений страницы. Аналогично биту A, устанавливается процессором, но только ''при записи'' на эту страницу.
* Бит PS ({{lang-en|Page size}}, ''только каталог страниц'') определяет размер страницы. Если сброшен, то этот элемент указывает на таблицу страниц с размером страниц 4 К[[Байт]]. Если установлен, то элемент указывает на страницу размером 4 М[[Байт]] при 32-[[бит]]ной физической адресации или 2  М[[Байт]] при 36-битной. '''Важно!''' Работает только при установленном [[бит]]е [[PSE]] в регистре [[Системные регистры x86|CR4]].
* Бит PAT ({{lang-en|Page attribute table}}, ''только таблица страниц''). - — Начиная с Pentium 3 может использоваться (совместно с PCD и PWT и [[Моделезависимые регистры|MSR]] IA32_CR_PAT) для определения политики кеширования страницы (UC, WC, WT, WP, WB, UC-) наряду с [[MTRR]]<ref>The Unabridged Pentium 4: IA32 Processor Genealogy ISBN 0-321-24656-X "«PAT Feature (Page Attribute Table)"» page 797</ref><ref>kernel.org/doc/ols/2008/ols2008v2-pages-135-144.pdf</ref>
* Бит G ({{lang-en|Global}}). Если этот [[бит]] установлен, то адрес страницы (или таблицы страниц) никогда не удаляется из [[Translation lookaside buffer|TLB]] [[кэш]]а.<ref>Удалить из [[Translation lookaside buffer|TLB]] [[кэш]]а можно любую страницу привилегированной командой [[INVLPG]]</ref>