3.1. Общие сведения и терминология
3.3. Переключение в защищенный режим
3.5. Механизмы адресации в защищенном режиме
3.8. Формат элемента PTE (PDE)
3.9. Особенности страничного механизма в Pentium и Р6
3.11. Методы обработки прерываний, возникших в режиме V86
3.12. Механизм переключения задач. Формат сегмента TSS
3.13. Битовая карта ввода-вывода
3.14. Действия процессора при переключении задач
3.17. Программная модель 32-разрядного МП
3.18. Регистры системного программиста
3.19. Буфер TLB (кэш-память страниц)
3.20. Общие сведения о кэш-памяти
3.22. Сведения о кэшах в процессорах фирмы Intel
3.23. Инициализация процессора
3.24. Некоторые сведения о внутренней организации 32-разрядных процессоров
3.26. Система прерываний 32-разрядных процессоров
3.1. Общие сведения и терминология
Среди 32-разрядных процессоров фирмы Intel различают процессоры 386, 486, Pentium, семейство Р6 (процессоры Pentium Pro, Pentium II, Celerone и Pentium III, в котрых фирма реализует микроархитектуру Р6) и Pentium IV, в котором реализована NetBurst—микроархитектура. Базовые механизмы, реализуемые всеми этими процессорами,практически идентичны. При употреблении термина «процессор» речь будет идти обо всех вышеперечисленных процессорах, а конкретные особенности для отдельного процессора будут оговариваться дополнительно.
Итак, процессор имеет 32-адресные линии (А31-0) и, следовательно, может адресовать 232 байта (4 Гбайта) оперативной памяти. Начиная с Р6, в регистре cr4 (control register – регистр управления) введен специальный бит PAE (physical address extension – расширение физического адреса). Если этот бит установлен в единицу, то к процессору добавляются еще 4 адресные линии (А35-32) и он может адресовать 64 Гбайта оперативной памяти. Но при этом обязательно должен быть включен страничный механизм, так как, несмотря на наличие 36-адресных линий, сегментный механизм процессора продолжает вырабатывать 32-разрядный адрес, т.е. продолжает адресовать 4 Гбайта ОП. И только наличие страничного механизма позволяет транслировать эти 4 Гбайта в любое место 64-Гбайтного пространства.
Шина данных у процессоров 386 и 486 32-разрядная, начиная с Pentium – 64-разрядная. При этом во всех процессорах (в отличие от ВМ86) шины адреса и данных раздельные (не мультиплексные). Процессор может работать в следующих режимах.
1. Реальный режим. С точки зрения пользователя, МП в этом режиме представляет из себя аналог МП 8086, только более быстрый и с расширенной системой команд. Механизм формирования физического адреса в реальном режиме аналогичен подобному механизму МП 8086:
Аф = (sr)×16+Аэф.
Надо отметить, что сами процессы формирования Аф в 8086 и реальном режиме различны, а результат ‑ один и тот же. Так как сегментные регистры (sr) и Аэф ‑ 16-разрядные, то формируемый таким образом Аф будет 20-разрядным. Следовательно, в реальном режиме МП адресует 1Мбайт оперативной памяти (младший мегабайт 4-Гбайтного пространства памяти). Сегменты, как и в ВМ86 имеют фиксированный размер 64 Кбайта.
2. Режим виртуального 86-го процессора (V86). Этот режим предназначен для того, чтобы в защищенном режиме была возможность выполнять программы, написанные для ВМ86 (DOS-задачи). Работа процессора в этом режиме похожа на работу ВМ86, но сам режим V86 является подмножеством защищенного режима.
3. Режим SMM (system management mode – режим управления системой). Работа процессора в этом режиме «не видна» ни прикладным программам, ни даже операционной системе. Связано это с тем, что в этом режиме процессор адресует область памяти, недоступную в других режимах. Обычно в этом режиме процессор выполняет программу, написанную разработчиками аппаратуры. Чаще всего эта программа реализует системные функции пониженного энергопотребления. Попасть в режим SMM можно только по специальному внешнему аппаратному прерыванию SMI (system mode interrupt). Выход из режима SMM осуществляется специальной командой RSM (resume system mode).
4. Защищенный режим. В этом режиме раскрываются все возможности МП. В режиме используются все 32 адресных линии и может адресоваться память объемом до 4 Гбайт. Сегменты в защищенном режиме имеют переменный объем (1 байт ‑ 4 Гбайта). Одновременно МП может работать с 214 таких сегментов. Очевидно, что все сегменты могут не поместиться в реально существующей оперативной памяти (ОП), поэтому часть из них (а скорее всего большинство) находится на диске. Когда процессор обращается к сегменту, которого нет в ОП, происходит прерывание. Обработчик этого прерывания должен подка-чать с диска в ОП нужный сегмент, после чего происходит рестарт «виноватой» команды. От пользователя этот процесс скрыт и у него создается впечатление что в его распоряжении находится память объемом 64 Тбайта (214 сегментов по 4 Гбайта каждый, т.е. 246 байта). Такая память называется виртуальной (кажущаяся).
В защищенном режиме МП аппаратно поддерживает многозадачность. То есть в системе одновременно может находиться множество задач, а МП обеспечивает быстрое переключение между этими задачами. Наличие многозадачности приводит к ряду проблем, основные две из которых следующие: как переключаться с задачи на задачу и как защитить задачи друг от друга.
Для решения первой проблемы для каждой задачи в системе создается так называемый сегмент состояния задачи (TSS – task state segment). Размер этого сегмента должен быть не менее 104-х байт. Когда МП переключается с задачи А на задачу В, то он автоматически запоминает контекст задачи А (содержимое почти всех своих внутренних регистров) в TSS задачи А, а затем также автоматически загружает в свои регистры контекст задачи В (из TSS задачи В). Тем самым обеспечивается переключение на задачу В и в то же время возможность возврата и продолжения выполнения задачи А. Под задачей понимается любой программный код, для которого в системе создан свой TSS. Создание TSS ‑ это функция ОС.
Для решения проблемы защиты задач друг от друга всем создаваемым в системе сегментам присваивается уровень привилегий. Возможно четыре уровня привилегий: 0,1,2 и 3, причем 0-й уровень самый старший. Уровень 3 (самый низкий) присваивается обычно сегментам пользователя, уровень 0 ‑ сегментам ОС, а уровни 1 и 2 предназначены для расширения ОС и на практике часто не используются.
Если программа с уровнем привилегий А обращается к сегменту с уровнем привилегий В, то процессор проверяет условие А£В. Если условие выполняется, то доступ к сегменту предоставлен, если же условие не выполняется, то будет прерывание (нарушены права доступа к сегменту).
Механизм формирования физического адреса в защищенном режиме радикально отличается от механизма МП 8086. Для каждого создаваемого в системе сегмента создается (как правило, ОС) специальная структура, называемая дескриптором этого сегмента. Дескриптор занимает в памяти 8 байт и содержит все необходимые сведения о сегменте: начальный адрес сегмента, размер сегмента, уровень привилегий, атрибуты сегмента и.т.д. МП вычисляет физический адрес по формуле
Аф = начальный адрес сегмента+Аэф.
В отличие от 8086, начальный адрес сегмента не вычисляется, а берется готовым из дескриптора.
Все созданные в системы дескрипторы сводятся в дескрипторные таблицы. Любая задача может одновременно работать с двумя такими таблицами. Одна из них называется глобальной (GDT ‑ global descriptor table), а другая ‑ локальной (LDT ‑ local descriptor table). В GDT собраны дескрипторы сегментов, разделяемых всеми задачами в системе, а в LDT располагаются дескрипторы сегментов, с которыми работает только данная задача. GDT в системе одна и всегда должна находиться в ОП, а LDT может быть столько же, сколько и задач (для любой задачи LDT может быть создана, а может и не создаваться), и располагаться эти таблицы могут как в ОП, так и на диске.
Для того чтобы перейти к новому сегменту, надо обратиться к его дескриптору, т.е. надо найти этот дескриптор в дескрипторной таблице. Для этого необходимо знать начальный адрес таблицы и внутритабличное смещение (это смещение принято называть селектором дескриптора). Начальные адреса таблиц процессору известны, они хранятся в специальных внутренних регистрах МП, а смещение берется из сегментного регистра. Любой сегментный регистр в МП имеет формат, приведенный на рис. 3.1.
| Видимая часть | Теневая часть | |
| 16 бит | 64 бита |