Адресация и многозадачность: Средства поддержки мультизадачности |
Программирование - Архитектура и система команд микропроцессоров x86 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Процессоры, начиная с Intel286, обладают средствами, позволяющими организовать попеременное выполнение процессором разных задач. Под задачей понимается программа, которая оперирует в своем (отведенном только для нее) адресном пространстве, со своими данными в памяти и внутренних регистрах. При необходимости процессор может переключаться между разными задачами, обеспечивая полное переключение контекста и сохранение контекста старой задачи (с возможностью последующего возврата к ней). Во всех описываемых процессорах, начиная с Intel286, имеется так называемый защищенный режим работы (включается битом CR0.PE). В этом режиме помимо средств расширенной адресации и поддержки мультизадачности процессор обеспечивает многоуровневую систему защиты кодов (программ, данных и т.п.) от несанкционированного использования и изменения. Механизм мультизадачностиМеханизм поддержки мультизадачности функционирует только в защищенном режиме. Его работа обеспечивается следующими элементами прикладной и системной архитектуры процессора:
Регистр задачи хранит селектор TSS текущей задачи. Сам TSS предназначен для хранения полного контекста и состояния задачи и уникален для каждой выполняемой задачи (см. рис. 2.6.).
Рис. 2.6. Связь регистра задачи TR и сегмента состояния задачи TSS
После сброса процессора механизм мультизадачности отключен, для его инициализации необходимо сначала перевести процессор в защищенный режим, затем создать TSS для новой задачи и загрузить командой LTR регистр задачи корректным селектором. Корректное выполнение программ в защищенном режиме возможно только при инициализированной мультизадачности. Даже если предстоит выполнять одну программу, она запускается как одна задача в мультизадачном окружении. Более сложные системы могут использовать развитые возможности процессора по диспетчеризации, сохранению состояния и переключению различных задач. Типы задач и контекст задачиСуществует несколько типов задач, которые отличаются режимами работы процессора при их выполнении: 32-разрядные задачи, 16-разрядные задачи, задачи V86. Все эти задачи могут попеременно выполняться совершенно независимо друг от друга. Процессор обеспечивает полное переключение контекста и режима при переходе от одной задачи к другой. Переключение задач может осуществляться в следующих случаях:
Контекст каждой задачи хранится в соответствующем TSS и включает:
Таким образом, каждая задача может иметь: свое линейное адресное пространство, заданное своей локальной таблицей дескрипторов (LDT), свое физическое адресное пространство, расположенное в любой доступной области и задаваемое страничным механизмом (базовый адрес каталога страниц в CR3), свой протокол защиты, обеспечиваемый указателями на стеки разных уровней привилегий и картой ввода/вывода. Поле селектора TSS предыдущей задачи обеспечивает возможность возврата при последовательном вызове нескольких вложенных задач. Переключение задачНормальное переключение задач обеспечивается специальными дескрипторами в таблицах дескрипторов LDT, GDT или IDT. Такими дескрипторами являются 16- и 32-разрядные дескрипторы TSS и дескриптор шлюза задачи. Дескриптор шлюза задачи предназначен для перенаправления всех указывающих на него вызовов (CALL), переходов (JMP) и векторов прерываний (особых ситуаций) на обработку в отдельную задачу (рис. 2.7.).
Рис. 2.7. Принцип работы механизма переключения задач
Полностью процесс переключения задачи (все выполняемые процессором действия) выглядит следующим образом.
Таблица 2.3. Проверки и исключения, инициируемые в процессе переключения задач
Вложенные задачиДля отслеживания цепочек последовательных вызовов задач предназначено поле LINK в сегменте TSS и флаг NT регистра EFLAGS. При вызове (командой CALL, прерыванием или особой ситуацией) новой задачи из кода другой задачи (напрямую или через дескриптор шлюза задачи) для индикации того, что новая задача является вложенной, устанавливается флаг NT.EFLAGS, а селектор TSS старой задачи помещается в поле обратной связи LINK сегмента TSS новой задачи. Указанные действия повторяются, если вложенная задача сама вызывает еще одну задачу и т.д. (см. рис. 2.8.). При приходе команды IRET процессор производит возврат к задаче более высокого уровня. При этом поле LINK сегмента TSS закрываемой задачи используется для получения селектора TSS задачи, к которой производится возврат, флаг NT.EFLAGS после возврата устанавливается в значение, которое было сохранено в TSS перед вызовом вложенной задачи.
Рис. 2.8. Связь между вложенными задачами
В случае, если обращение к новой задаче производится командой JMP, новая задача не считается вложенной, флаг NT не устанавливается и поле LINK не используется. Во всех случаях и для всех типов описываемых процессоров рекурсивный вызов задач невозможен. Процессор автоматически предотвращает такую возможность опираясь на значение флага B (занятость) в дескрипторе TSS вызываемой задачи.
Таблица 2.4. Влияние различных способов переключения задач на флаги EFLAGS.NT, CR0.TS, поле занятости дескриптора B, поле обратной связи LINK
Особенности переключения задач в программах, использующих FPU и расширенные системы команд MMX, 3DNow!, SIMDПри переключении задач процессор не производит автоматического переключения контекста для FPU/MMX/SIMD. Программа должна самостоятельно позаботится о том, чтобы значения в соответствующих FPU/MMX/SIMD-регистрах соответствовали текущей выполняемой задаче. Однако ввиду того, что в мультизадачных операционных системах переключение задач может происходить в случайные моменты времени (например, ввиду генерации внешнего прерывания) в процессор введен специальный механизм для поддержки переключения контекста FPU/MMX/SIMD. Работа этого механизма обуславливается наличием специального флага индикации переключения задач CR0.TS, который устанавливается во всех без исключения случаях переключения задач. В нормальном режиме флаг CR0.TS сброшен и все команды FPU/MMX/SIMD выполняются в обычном режиме. После того, как произошло переключение задач CR0.TS автоматически устанавливается. Теперь любая команда FPU/MMX/SIMD (в т.ч. и все 3DNow! команды) перед своим исполнением вызовет генерацию особой ситуации #NM (Сопроцессор отсутствует). Многозадачные операционные системы должны содержать в себе специальную программу обработчик прерывания #NM, которая обеспечит соответствие контекста FPU/MMX/SIMD текущей задаче. Т.е. этот обработчик при получении управления должен: сбросить флаг CR0.TS; проверить, соответствует ли текущий контекст FPU/MMX/SIMD текущей выполняемой задаче, если соответствует — управление возвращается к прерванной команде, если нет — обработчик должен сохранить значения всех регистров FPU/MMX/SIMD в специальной области памяти, загрузить из другой специальной области памяти значения всех этих регистров для новой задачи и затем передать управление прерванной команде. Естественно в обработчик должен быть заложен механизм слежения за текущими задачами для гарантии полного соответствия всех сохраняемых и загружаемых контекстов своим задачам. Для сохранения контекста FPU/MMX/SIMD могут применяться различные команды и последовательности команд. Это вызвано прежде всего тем, что с развитием архитектуры процессоров старые команды для сохранения совместимости оставлялись без изменений, а новые команды вводились для обеспечения работы появившихся расширений.
Таблица 2.5. Команды, применяемые для сохранения/восстановления контекста FPU/MMX/SIMD
Специальный флаг CR4.OSFXSR введен для индикации операционной системой того, осуществляет ли она переключение контекста FPU командами FXSAVE и FXRSTOR, обеспечивая таким образом переключение контекста SIMD.
|
Все права защищены © Алексей Ровдо, 1994-2023. Перепечатка возможна только по согласованию с владельцем авторских прав. admin@club155.ru